---
title: "CodeEff_Matrix_usage"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{CodeEff_Matrix_usage}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

## Introduction

The `CodeEff_Matrix` function estimates code effects using left and right embeddings from source and target sites. This vignette demonstrates how to use this function with example data provided in the package.

---

## Load the Required Library

Ensure the `MUGS` package is loaded before running the example:

```{r setup}
library(MUGS)
```

---

## Load the Data

Load the required datasets for the example:

```{r load_data}
# Load required data
data(S.1)
data(S.2)
data(U.1)
data(U.2)
data(X.group.source)
data(X.group.target)
```
---

## Prepare Variables

Prepare the variables required for the `CodeEff_Matrix` function:

```{r prepare_variables}
# Set parameters
n1 <- 100
n2 <- 100
p <- 5

# Initial right embeddings
V.1 <- U.1
V.2 <- U.2

# Fix rownames to ensure alignment
n1.no <- n1 - 50  # if you know n.common = 50
rownames(U.1) <- as.character(seq_len(nrow(U.1)))  # "1" to "n1"
rownames(U.2) <- as.character(seq(from = n1.no + 1, length.out = nrow(U.2)))
rownames(S.1) <- rownames(U.1)
rownames(S.2) <- rownames(U.2)
rownames(V.1) <- rownames(U.1)
rownames(V.2) <- rownames(U.2)

# Extract names and find common codes
names.list.1 <- rownames(S.1)
names.list.2 <- rownames(S.2)
common_codes <- intersect(names.list.1, names.list.2)

# Check for overlap
if (length(common_codes) == 0) stop("Error: No common codes found between S.1 and S.2.")

# Create zeta.int
full.name.list <- c(names.list.1, names.list.2)
zeta.int <- matrix(0, length(full.name.list), p)
rownames(zeta.int) <- full.name.list
```

---

## Run the Function

Run the `CodeEff_Matrix` function:

```{r run_function}
# Estimate code effects
CodeEff_Matrix.out <- CodeEff_Matrix(
  S.1=S.1,
  S.2=S.2,
  n1=n1,
  n2=n2,
  U.1=U.1,
  U.2=U.2,
  V.1=U.1,
  V.2=U.2,
  common_codes = common_codes,
  zeta.int = zeta.int,
  lambda=10,
  p=5
  )
```

---

## Examine the Output

Explore the structure and key components of the output:

```{r examine_output}
# View structure of the output
str(CodeEff_Matrix.out)

# Print specific components of the result
cat("\nEstimated Code Effects (zeta):\n")
print(CodeEff_Matrix.out$zeta[1:5, 1:3])  # Show the first 5 rows and 3 columns of zeta

cat("\nFrobenius Norm Difference (dif_F):\n")
print(CodeEff_Matrix.out$dif_F)

cat("\nUpdated Right Embeddings for Source Site (V.1.new):\n")
print(CodeEff_Matrix.out$V.1.new[1:5, 1:3])  # Show first 5 rows and 3 columns of V.1.new

cat("\nUpdated Right Embeddings for Target Site (V.2.new):\n")
print(CodeEff_Matrix.out$V.2.new[1:5, 1:3])  # Show first 5 rows and 3 columns of V.2.new
```

---

## Notes

1. **Custom Parameters**: Modify parameters like `n1`, `n2`, `p`, and `lambda` to test different scenarios.
2. **Data Preparation**: Ensure datasets (`S.1`, `S.2`, `U.1`, `U.2`, etc.) are correctly loaded and aligned.
3. **Output**: Key components include the estimated zeta matrix, Frobenius norm difference, and updated embeddings.

---

## Summary

This vignette demonstrated how to use the `CodeEff_Matrix` function for estimating code effects. Adjust input parameters and datasets to test different scenarios and interpret the output components for your analysis.
