
# Automatically set working directory to the folder containing the source file
# Load rstudioapi package

library(rstudioapi)
# Set working directory to source file location
setwd(dirname(getActiveDocumentContext()$path))

getwd()

library(readxl)
library(metaSEM)
library(semPlot)
library(semTools)

citation("metaSEM")

#______________________________________________________________________________

#                               TL -> PE -> IWB
#_______________________________________________________________________________

#_________________________STAGE_1_____________________________________________
data <- read_excel("metasem.xlsx", sheet = 1)

data

# Tüm veri çerçevesini sayısala çevir
data <- as.data.frame(lapply(data, as.numeric))

names(data)

nvar = 3
varnames = c("TL", "PE", "IWB")
labels = list(varnames,varnames)
cordat = list()
  for (i in 1:nrow(data)){
    cordat[[i]] = vec2symMat(as.matrix(data[i,3:5]), diag = FALSE)
    dimnames(cordat[[i]]) = labels
  }

cordat

## Sample sizes
my.n <- data$N
my.n

## Total sample sizes in each cell
pattern.n(cordat, my.n)

## Number of studies in each cell
pattern.na(cordat, show.na = FALSE)

## Stage 1 analysis: find an average correlation matrix
stage1 <- tssem1(cordat, my.n)
summary(stage1)



stage1 <- tssem1(Cov=cordat, n=data$N, method="REM", RE.type = "Diag")
summary(stage1)

## Average correlation matrix
meanR <- vec2symMat(coef(stage1, select = "fixed"), diag = FALSE)
dimnames(meanR) <- list(varlist, varlist)
meanR

## Absolute heterogeneity variance: tau^2
tau2 <- vec2symMat(coef(stage1, select = "random"), diag = FALSE)
dimnames(tau2) <- list(varlist, varlist)
tau2

## Relative heterogeneity index: I^2
I2 <- vec2symMat(summary(stage1)$I2.values[, "Estimate"], diag = FALSE)
dimnames(I2) <- list(varlist, varlist)
I2

## Proposed model
model <- "IWB ~ c*TL + b*PE
          PE ~ a*TL
          TL ~~ 1*TL"
plot(model, color="yellow")

varlist = c("TL", "PE", "IWB")
RAM1 <- lavaan2RAM(model, obs.variables = varlist)
RAM1

#_________________________STAGE_2_____________________________________________

# #A Matrisi – Yapısal Katsayılar (Paths)

# #A[1,1] = 0 TL kendini etkilemez (döngü yok)
# A[1,2] = 0.1*b21	PE'nin TL üzerindeki etkisi (b21 parametresi, 0.1 ile ölçeklenmiş)
# #A[3,1:3] = 0	IWB kendisini veya diğerlerini etkilemez (modelin son değişkeni gibi)
# A[1,3] = 0.1*b31	IWB'nin TL üzerindeki etkisi (b31 parametresi)
# A[2,1] = 0	TL’nin PE üzerinde etkisi yok (çünkü bu ters yön)
# A[2,2] = 0	PE kendini etkilemez
# A[2,3] = 0.1*b32	IWB'nin PE üzerindeki etkisi (b32)


# # Harmonik ortalama N hesapla
# N_values <- data$N
# harmonic_N <- length(N_values) / sum(1 / N_values)
# # harmonic_N
# # 1. Harmonik N hesapla
# harmonic_N <- length(data$N) / sum(1 / data$N)
# 
# # 2. stage1 nesnesinin içindeki toplam N değerini override et
# stage1$total.n <- harmonic_N
# 
# 


stage2a <- tssem2(
  stage1,
  RAM=RAM1,
  diag.constraints = TRUE,
  intervals = "LB"
)
summary(stage2a)

# Yol diyagramı çizimi
plot_object_PE <- meta2semPlot(stage2a)

# Yol grafiğini çiz
semPaths(plot_object_PE, whatLabels = "est", layout = "tree2",
         edge.label.cex = 1.2, sizeMan = 7, nCharNodes = 0)

semPaths(plot_object_PE,
         whatLabels = "est",
         layout = "tree2",
         edge.label.cex = 1.2,
         rotation = 1,         # 0 = yukarıdan aşağı, 2 = soldan sağa
         sizeMan = 9,
         nCharNodes = 0,
         color = list(lat = "skyblue", man = "lightgreen"),
         edge.color = "black",
         edge.label.color = "blue")

# semPaths(plot_object_PE,
#          layout = "tree2",
#          whatLabels = "est",
#          style = "ram",
#          sizeMan = 8,
#          color = list(man = "lightblue", lat = "lightyellow"),
#          border.color = list(man = "darkblue", lat = "orange"),
#          edge.label.cex = 1.2)

stage2b <- tssem2(stage1,
                  RAM=RAM1,
                        diag.constraints=TRUE,
                        intervals="LB",
                  mx.algebras = list(Indirect=mxAlgebra(a*b, name="Indirect"),
                                     Direct=mxAlgebra(c, name="Direct")))

summary(stage2b)




HatVar <-0.74
R2 <- 1 - HatVar
R2


## Add a constraint on c=a*b
## Rerun to remove errors

stage2b <- mxModel(stage2b, mxConstraint(c==a*b, name="constraint"))
stage2b <- mxRun(stage2b)
stage2b <- mxTryHard(stage2b, extraTries = 100)
stage2b <- mxRun(stage2b, intervals = TRUE)
summary(stage2b)

anova(stage2$mx.fit, stage2b)
#______________________________________________________________________________

#                               TL -> CSE -> IWB
#_______________________________________________________________________________

#_________________________STAGE_1_____________________________________________
data <- read_excel("metasem.xlsx", sheet = 2)
data

# Tüm veri çerçevesini sayısala çevir
data <- as.data.frame(lapply(data, as.numeric))

names(data)


nvar = 3
varnames = c("TL", "CSE", "IWB")
labels = list(varnames,varnames)
cordat = list()
for (i in 1:nrow(data)){
  cordat[[i]] = vec2symMat(as.matrix(data[i,3:5]), diag = FALSE)
  dimnames(cordat[[i]]) = labels
}

cordat

## Sample sizes
my.n <- data$N
my.n

## Total sample sizes in each cell
pattern.n(cordat, my.n)

## Number of studies in each cell
pattern.na(cordat, show.na = FALSE)

## Stage 1 analysis: find an average correlation matrix
stage1 <- tssem1(cordat, my.n)
summary(stage1)



stage1 <- tssem1(Cov=cordat, n=data$N, method="REM", RE.type = "Diag")
summary(stage1)




#_________________________STAGE_2_____________________________________________

# #A Matrisi – Yapısal Katsayılar (Paths)

# #A[1,1] = 0 TL kendini etkilemez (döngü yok)
# A[1,2] = 0.1*b21	PE'nin TL üzerindeki etkisi (b21 parametresi, 0.1 ile ölçeklenmiş)
# #A[3,1:3] = 0	IWB kendisini veya diğerlerini etkilemez (modelin son değişkeni gibi)
# A[1,3] = 0.1*b31	IWB'nin TL üzerindeki etkisi (b31 parametresi)
# A[2,1] = 0	TL’nin PE üzerinde etkisi yok (çünkü bu ters yön)
# A[2,2] = 0	PE kendini etkilemez
# A[2,3] = 0.1*b32	IWB'nin PE üzerindeki etkisi (b32)

A = create.mxMatrix(
  c(
    0, 0, 0,
    "0.1*b21", 0, 0,
    "0.1*b31", "0.1*b32", 0
  ),
  type = "Full",
  nrow = 3,
  ncol = 3,
  byrow = TRUE,
  name = "A",
  dimnames = list(varnames,varnames))

#S Matrisi – Hata / Artık Varyans-Kovaryansları


S <- create.mxMatrix(
  c(
    1, # TL'in varyansı sabit 1
    0, "1*p22", # PE'nin varyansı serbest p22
    0, 0, "1*p33" # IWB'nin varyansı serbest p33
  ),
  type = "Symm",
  byrow = TRUE,
  name = "S",
  dimnames = list(varnames, varnames)
)


stage2 <- tssem2(stage1, Amatrix=A, Smatrix=S,
                 diag.constraints=TRUE, intervals="LB")
summary(stage2)

# Yol diyagramı çizimi
plot_object_CSE <- meta2semPlot(stage2)

# Yol grafiğini çiz
semPaths(plot_object_CSE, whatLabels = "est", layout = "tree2",
         edge.label.cex = 1.2, sizeMan = 7, nCharNodes = 0)

semPaths(plot_object_CSE,
         whatLabels = "est",
         layout = "tree2",
         edge.label.cex = 1.2,
         sizeMan = 9,
         nCharNodes = 0,
         color = list(lat = "skyblue", man = "lightgreen"),
         edge.color = "black",
         edge.label.color = "blue")


stage2_direct <- tssem2(stage1, 
                        Amatrix=A, 
                        Smatrix=S,
                        diag.constraints=TRUE,
                        intervals="LB",
                        mx.algebras=list(
                          Direct_Effect = mxAlgebra(b31, name="Direct_Effect"),
                          Indirect_Effect = mxAlgebra(b21 * b32, name="Indirect_Effect")
                        ))

summary(stage2_direct)


#______________________________________________________________________________

#                               TL -> KS -> IWB
#_______________________________________________________________________________

#_________________________STAGE_1_____________________________________________
data <- read_excel("metasem.xlsx", sheet = 3)
data

# Tüm veri çerçevesini sayısala çevir
data <- as.data.frame(lapply(data, as.numeric))

names(data)


nvar = 3
varnames = c("TL", "KS", "IWB")
labels = list(varnames,varnames)
cordat = list()
for (i in 1:nrow(data)){
  cordat[[i]] = vec2symMat(as.matrix(data[i,3:5]), diag = FALSE)
  dimnames(cordat[[i]]) = labels
}

cordat



## Sample sizes
my.n <- data$N
my.n

## Total sample sizes in each cell
pattern.n(cordat, my.n)

## Number of studies in each cell
pattern.na(cordat, show.na = FALSE)

## Stage 1 analysis: find an average correlation matrix
stage1 <- tssem1(cordat, my.n)
summary(stage1)

stage1 <- tssem1(Cov=cordat, n=data$N, method="REM", RE.type = "Diag")
summary(stage1)




#_________________________STAGE_2_____________________________________________

# #A Matrisi – Yapısal Katsayılar (Paths)

# #A[1,1] = 0 TL kendini etkilemez (döngü yok)
# A[1,2] = 0.1*b21	PE'nin TL üzerindeki etkisi (b21 parametresi, 0.1 ile ölçeklenmiş)
# #A[3,1:3] = 0	IWB kendisini veya diğerlerini etkilemez (modelin son değişkeni gibi)
# A[1,3] = 0.1*b31	IWB'nin TL üzerindeki etkisi (b31 parametresi)
# A[2,1] = 0	TL’nin PE üzerinde etkisi yok (çünkü bu ters yön)
# A[2,2] = 0	PE kendini etkilemez
# A[2,3] = 0.1*b32	IWB'nin PE üzerindeki etkisi (b32)

A = create.mxMatrix(
  c(
    0, 0, 0,
    "0.1*b21", 0, 0,
    "0.1*b31", "0.1*b32", 0
  ),
  type = "Full",
  nrow = 3,
  ncol = 3,
  byrow = TRUE,
  name = "A",
  dimnames = list(varnames,varnames))

#S Matrisi – Hata / Artık Varyans-Kovaryansları


S <- create.mxMatrix(
  c(
    1, # TL'in varyansı sabit 1
    0, "1*p22", # PE'nin varyansı serbest p22
    0, 0, "1*p33" # IWB'nin varyansı serbest p33
  ),
  type = "Symm",
  byrow = TRUE,
  name = "S",
  dimnames = list(varnames, varnames)
)


stage2 <- tssem2(stage1, Amatrix=A, Smatrix=S,
                 diag.constraints=TRUE, intervals="LB")
summary(stage2)

# Yol diyagramı çizimi
plot_object_KS <- meta2semPlot(stage2)

# Yol grafiğini çiz
semPaths(plot_object_KS, whatLabels = "est", layout = "tree2",
         edge.label.cex = 1.2, sizeMan = 7, nCharNodes = 0)

semPaths(plot_object_KS,
         whatLabels = "est",
         layout = "tree2",
         edge.label.cex = 1.2,
         sizeMan = 9,
         nCharNodes = 0,
         color = list(lat = "skyblue", man = "lightgreen"),
         edge.color = "black",
         edge.label.color = "blue")


stage2_direct <- tssem2(stage1, 
                        Amatrix=A, 
                        Smatrix=S,
                        diag.constraints=TRUE,
                        intervals="LB",
                        mx.algebras=list(
                          Direct_Effect = mxAlgebra(b31, name="Direct_Effect"),
                          Indirect_Effect = mxAlgebra(b21 * b32, name="Indirect_Effect")
                        ))

summary(stage2_direct)

#______________________________________________________________________________

#                               TL -> LMX -> IWB
#_______________________________________________________________________________

#_________________________STAGE_1_____________________________________________
data <- read_excel("metasem.xlsx", sheet = 4)
data

# Tüm veri çerçevesini sayısala çevir
data <- as.data.frame(lapply(data, as.numeric))

names(data)


nvar = 3
varnames = c("TL", "LMX", "IWB")
labels = list(varnames,varnames)
cordat = list()
for (i in 1:nrow(data)){
  cordat[[i]] = vec2symMat(as.matrix(data[i,3:5]), diag = FALSE)
  dimnames(cordat[[i]]) = labels
}

cordat


## Sample sizes
my.n <- data$N
my.n

## Total sample sizes in each cell
pattern.n(cordat, my.n)

## Number of studies in each cell
pattern.na(cordat, show.na = FALSE)

## Stage 1 analysis: find an average correlation matrix
stage1 <- tssem1(cordat, my.n)
summary(stage1)








stage1 <- tssem1(Cov=cordat, n=data$N, method="REM", RE.type = "Diag")
summary(stage1)




#_________________________STAGE_2_____________________________________________

# #A Matrisi – Yapısal Katsayılar (Paths)

# #A[1,1] = 0 TL kendini etkilemez (döngü yok)
# A[1,2] = 0.1*b21	PE'nin TL üzerindeki etkisi (b21 parametresi, 0.1 ile ölçeklenmiş)
# #A[3,1:3] = 0	IWB kendisini veya diğerlerini etkilemez (modelin son değişkeni gibi)
# A[1,3] = 0.1*b31	IWB'nin TL üzerindeki etkisi (b31 parametresi)
# A[2,1] = 0	TL’nin PE üzerinde etkisi yok (çünkü bu ters yön)
# A[2,2] = 0	PE kendini etkilemez
# A[2,3] = 0.1*b32	IWB'nin PE üzerindeki etkisi (b32)

A = create.mxMatrix(
  c(
    0, 0, 0,
    "0.1*b21", 0, 0,
    "0.1*b31", "0.1*b32", 0
  ),
  type = "Full",
  nrow = 3,
  ncol = 3,
  byrow = TRUE,
  name = "A",
  dimnames = list(varnames,varnames))

#S Matrisi – Hata / Artık Varyans-Kovaryansları


S <- create.mxMatrix(
  c(
    1, # TL'in varyansı sabit 1
    0, "1*p22", # PE'nin varyansı serbest p22
    0, 0, "1*p33" # IWB'nin varyansı serbest p33
  ),
  type = "Symm",
  byrow = TRUE,
  name = "S",
  dimnames = list(varnames, varnames)
)


stage2 <- tssem2(stage1, Amatrix=A, Smatrix=S,
                 diag.constraints=TRUE, intervals="LB")
summary(stage2)

# Yol diyagramı çizimi
plot_object_LMX <- meta2semPlot(stage2)

semPaths(plot_object_LMX,
         whatLabels = "est",
         layout = "tree2",
         edge.label.cex = 1.2,
         sizeMan = 9,
         nCharNodes = 0,
         color = list(lat = "skyblue", man = "lightgreen"),
         edge.color = "black",
         edge.label.color = "blue")

# Yol grafiğini çiz
semPaths(plot_object_LMX, whatLabels = "est", layout = "tree2",
         edge.label.cex = 1.2, sizeMan = 7, nCharNodes = 0)


stage2_direct <- tssem2(stage1, 
                        Amatrix=A, 
                        Smatrix=S,
                        diag.constraints=TRUE,
                        intervals="LB",
                        mx.algebras=list(
                          Direct_Effect = mxAlgebra(b31, name="Direct_Effect"),
                          Indirect_Effect = mxAlgebra(b21 * b32, name="Indirect_Effect")
                        ))

summary(stage2_direct)

#______________________________________________________________________________

#                               TL -> WE -> IWB
#_______________________________________________________________________________

#_________________________STAGE_1_____________________________________________
data <- read_excel("metasem.xlsx", sheet = 5)
data

# Tüm veri çerçevesini sayısala çevir
data <- as.data.frame(lapply(data, as.numeric))

names(data)


nvar = 3
varnames = c("TL", "WE", "IWB")
labels = list(varnames,varnames)
cordat = list()
for (i in 1:nrow(data)){
  cordat[[i]] = vec2symMat(as.matrix(data[i,3:5]), diag = FALSE)
  dimnames(cordat[[i]]) = labels
}

cordat


## Sample sizes
my.n <- data$N
my.n

## Total sample sizes in each cell
pattern.n(cordat, my.n)

## Number of studies in each cell
pattern.na(cordat, show.na = FALSE)

## Stage 1 analysis: find an average correlation matrix
stage1 <- tssem1(cordat, my.n)
summary(stage1)



stage1 <- tssem1(Cov=cordat, n=data$N, method="REM", RE.type = "Diag")
summary(stage1)




#_________________________STAGE_2_____________________________________________

# #A Matrisi – Yapısal Katsayılar (Paths)

# #A[1,1] = 0 TL kendini etkilemez (döngü yok)
# A[1,2] = 0.1*b21	PE'nin TL üzerindeki etkisi (b21 parametresi, 0.1 ile ölçeklenmiş)
# #A[3,1:3] = 0	IWB kendisini veya diğerlerini etkilemez (modelin son değişkeni gibi)
# A[1,3] = 0.1*b31	IWB'nin TL üzerindeki etkisi (b31 parametresi)
# A[2,1] = 0	TL’nin PE üzerinde etkisi yok (çünkü bu ters yön)
# A[2,2] = 0	PE kendini etkilemez
# A[2,3] = 0.1*b32	IWB'nin PE üzerindeki etkisi (b32)

A = create.mxMatrix(
  c(
    0, 0, 0,
    "0.1*b21", 0, 0,
    "0.1*b31", "0.1*b32", 0
  ),
  type = "Full",
  nrow = 3,
  ncol = 3,
  byrow = TRUE,
  name = "A",
  dimnames = list(varnames,varnames))

#S Matrisi – Hata / Artık Varyans-Kovaryansları


S <- create.mxMatrix(
  c(
    1, # TL'in varyansı sabit 1
    0, "1*p22", # PE'nin varyansı serbest p22
    0, 0, "1*p33" # IWB'nin varyansı serbest p33
  ),
  type = "Symm",
  byrow = TRUE,
  name = "S",
  dimnames = list(varnames, varnames)
)


stage2 <- tssem2(stage1, Amatrix=A, Smatrix=S,
                 diag.constraints=TRUE, intervals="LB")
summary(stage2)

# Yol diyagramı çizimi
plot_object_WE <- meta2semPlot(stage2)

# Yol grafiğini çiz
semPaths(plot_object_WE, whatLabels = "est", layout = "tree2",
         edge.label.cex = 1.2, sizeMan = 7, nCharNodes = 0)

semPaths(plot_object_WE,
         whatLabels = "est",
         layout = "tree2",
         edge.label.cex = 1.2,
         sizeMan = 9,
         nCharNodes = 0,
         color = list(lat = "skyblue", man = "lightgreen"),
         edge.color = "black",
         edge.label.color = "blue")


stage2_direct <- tssem2(stage1, 
                        Amatrix=A, 
                        Smatrix=S,
                        diag.constraints=TRUE,
                        intervals="LB",
                        mx.algebras=list(
                          Direct_Effect = mxAlgebra(b31, name="Direct_Effect"),
                          Indirect_Effect = mxAlgebra(b21 * b32, name="Indirect_Effect")
                        ))

summary(stage2_direct)

#______________________________________________________________________________

#                               TL -> IM -> IWB
#_______________________________________________________________________________

#_________________________STAGE_1_____________________________________________
data <- read_excel("metasem.xlsx", sheet = 6)
data

# Tüm veri çerçevesini sayısala çevir
data <- as.data.frame(lapply(data, as.numeric))

names(data)


nvar = 3
varnames = c("TL", "IM", "IWB")
labels = list(varnames,varnames)
cordat = list()

for (i in 1:nrow(data)){
  cordat[[i]] = vec2symMat(as.matrix(data[i,3:5]), diag = FALSE)
  dimnames(cordat[[i]]) = labels
}

cordat


## Sample sizes
my.n <- data$N
my.n

## Total sample sizes in each cell
pattern.n(cordat, my.n)

## Number of studies in each cell
pattern.na(cordat, show.na = FALSE)

## Stage 1 analysis: find an average correlation matrix
stage1 <- tssem1(cordat, my.n)
summary(stage1)

stage1 <- tssem1(Cov=cordat, n=data$N, method="REM", RE.type = "Diag")
summary(stage1)


#_________________________STAGE_2_____________________________________________

# #A Matrisi – Yapısal Katsayılar (Paths)

# #A[1,1] = 0 TL kendini etkilemez (döngü yok)
# A[1,2] = 0.1*b21	PE'nin TL üzerindeki etkisi (b21 parametresi, 0.1 ile ölçeklenmiş)
# #A[3,1:3] = 0	IWB kendisini veya diğerlerini etkilemez (modelin son değişkeni gibi)
# A[1,3] = 0.1*b31	IWB'nin TL üzerindeki etkisi (b31 parametresi)
# A[2,1] = 0	TL’nin PE üzerinde etkisi yok (çünkü bu ters yön)
# A[2,2] = 0	PE kendini etkilemez
# A[2,3] = 0.1*b32	IWB'nin PE üzerindeki etkisi (b32)

A = create.mxMatrix(
  c(
    0, 0, 0,
    "0.1*b21", 0, 0,
    "0.1*b31", "0.1*b32", 0
  ),
  type = "Full",
  nrow = 3,
  ncol = 3,
  byrow = TRUE,
  name = "A",
  dimnames = list(varnames,varnames))

#S Matrisi – Hata / Artık Varyans-Kovaryansları


S <- create.mxMatrix(
  c(
    1, # TL'in varyansı sabit 1
    0, "1*p22", # PE'nin varyansı serbest p22
    0, 0, "1*p33" # IWB'nin varyansı serbest p33
  ),
  type = "Symm",
  byrow = TRUE,
  name = "S",
  dimnames = list(varnames, varnames)
)


stage2 <- tssem2(stage1, Amatrix=A, Smatrix=S,
                 diag.constraints=TRUE, intervals="LB")
summary(stage2)

# Yol diyagramı çizimi
plot_object_IM <- meta2semPlot(stage2)

# Yol grafiğini çiz
semPaths(plot_object_IM, whatLabels = "est", layout = "tree2",
         edge.label.cex = 1.2, sizeMan = 7, nCharNodes = 0)



semPaths(plot_object_IM,
         whatLabels = "est",
         layout = "tree2",
         edge.label.cex = 1.2,
         sizeMan = 9,
         nCharNodes = 0,
         color = list(lat = "skyblue", man = "lightgreen"),
         edge.color = "black",
         edge.label.color = "blue")


stage2_direct <- tssem2(stage1, 
                        Amatrix=A, 
                        Smatrix=S,
                        diag.constraints=TRUE,
                        intervals="LB",
                        mx.algebras=list(
                          Direct_Effect = mxAlgebra(b31, name="Direct_Effect"),
                          Indirect_Effect = mxAlgebra(b21 * b32, name="Indirect_Effect")
                        ))

summary(stage2_direct)

#-------------------------------------------------------------------------------
#______________________________________________________________________________

#                               TL -> PS-> IWB
#_______________________________________________________________________________

#_________________________STAGE_1_____________________________________________
#_________________________STAGE_1_____________________________________________
data <- read_excel("metasem.xlsx", sheet = 7)

data

# Tüm veri çerçevesini sayısala çevir
data <- as.data.frame(lapply(data, as.numeric))

names(data)

nvar = 3
varnames = c("TL", "PS", "IWB")
labels = list(varnames,varnames)
cordat = list()
for (i in 1:nrow(data)){
  cordat[[i]] = vec2symMat(as.matrix(data[i,3:5]), diag = FALSE)
  dimnames(cordat[[i]]) = labels
}

cordat

## Sample sizes
my.n <- data$N
my.n

## Total sample sizes in each cell
pattern.n(cordat, my.n)

## Number of studies in each cell
pattern.na(cordat, show.na = FALSE)

## Stage 1 analysis: find an average correlation matrix
stage1 <- tssem1(cordat, my.n)
summary(stage1)



stage1 <- tssem1(Cov=cordat, n=data$N, method="REM", RE.type = "Diag")
summary(stage1)

## Average correlation matrix
varlist = c("TL", "PS", "IWB")
meanR <- vec2symMat(coef(stage1, select = "fixed"), diag = FALSE)
dimnames(meanR) <- list(varlist, varlist)
meanR

## Absolute heterogeneity variance: tau^2
tau2 <- vec2symMat(coef(stage1, select = "random"), diag = FALSE)
dimnames(tau2) <- list(varlist, varlist)
tau2

## Relative heterogeneity index: I^2
I2 <- vec2symMat(summary(stage1)$I2.values[, "Estimate"], diag = FALSE)
dimnames(I2) <- list(varlist, varlist)
I2

## Proposed model
model <- "IWB ~ c*TL + b*PS
          PS ~ a*TL
          TL ~~ 1*TL"
plot(model, color="yellow")

varlist = c("TL", "PS", "IWB")
RAM1 <- lavaan2RAM(model, obs.variables = varlist)
RAM1

#_________________________STAGE_2_____________________________________________

# #A Matrisi – Yapısal Katsayılar (Paths)

# #A[1,1] = 0 TL kendini etkilemez (döngü yok)
# A[1,2] = 0.1*b21	PE'nin TL üzerindeki etkisi (b21 parametresi, 0.1 ile ölçeklenmiş)
# #A[3,1:3] = 0	IWB kendisini veya diğerlerini etkilemez (modelin son değişkeni gibi)
# A[1,3] = 0.1*b31	IWB'nin TL üzerindeki etkisi (b31 parametresi)
# A[2,1] = 0	TL’nin PE üzerinde etkisi yok (çünkü bu ters yön)
# A[2,2] = 0	PE kendini etkilemez
# A[2,3] = 0.1*b32	IWB'nin PE üzerindeki etkisi (b32)


# # Harmonik ortalama N hesapla
# N_values <- data$N
# harmonic_N <- length(N_values) / sum(1 / N_values)
# # harmonic_N
# # 1. Harmonik N hesapla
# harmonic_N <- length(data$N) / sum(1 / data$N)
# 
# # 2. stage1 nesnesinin içindeki toplam N değerini override et
# stage1$total.n <- harmonic_N
# 
# 


stage2a <- tssem2(
  stage1,
  RAM=RAM1,
  diag.constraints = TRUE,
  intervals = "LB"
)
summary(stage2a)

# Yol diyagramı çizimi
plot_object_PS <- meta2semPlot(stage2a)

# Yol grafiğini çiz
semPaths(plot_object_PS, whatLabels = "est", layout = "tree2",
         edge.label.cex = 1.2, sizeMan = 7, nCharNodes = 0)

semPaths(plot_object_PS,
         whatLabels = "est",
         layout = "tree2",
         edge.label.cex = 1.2,
         rotation = 1,         # 0 = yukarıdan aşağı, 2 = soldan sağa
         sizeMan = 9,
         nCharNodes = 0,
         color = list(lat = "skyblue", man = "lightgreen"),
         edge.color = "black",
         edge.label.color = "blue")

# semPaths(plot_object_PE,
#          layout = "tree2",
#          whatLabels = "est",
#          style = "ram",
#          sizeMan = 8,
#          color = list(man = "lightblue", lat = "lightyellow"),
#          border.color = list(man = "darkblue", lat = "orange"),
#          edge.label.cex = 1.2)

stage2b <- tssem2(stage1,
                  RAM=RAM1,
                  diag.constraints=TRUE,
                  intervals="LB",
                  mx.algebras = list(Indirect=mxAlgebra(a*b, name="Indirect"),
                                     Direct=mxAlgebra(c, name="Direct")))

summary(stage2b)




HatVar <-0.81
R2 <- 1 - HatVar
R2


## Add a constraint on c=a*b
## Rerun to remove errors

stage2b <- mxModel(stage2b, mxConstraint(c==a*b, name="constraint"))
stage2b <- mxRun(stage2b)
stage2b <- mxTryHard(stage2b, extraTries = 100)
stage2b <- mxRun(stage2b, intervals = TRUE)
summary(stage2b)

anova(stage2$mx.fit, stage2b)



#-------------------------------------------------------------------------------
#______________________________________________________________________________

#                               TL -> Trs-> IWB
#_______________________________________________________________________________

#_________________________STAGE_1_____________________________________________
data <- read_excel("metasem.xlsx", sheet = 8)

data

# Tüm veri çerçevesini sayısala çevir
data <- as.data.frame(lapply(data, as.numeric))

names(data)

nvar = 3
varnames = c("TL", "TRS", "IWB")
labels = list(varnames,varnames)
cordat = list()
for (i in 1:nrow(data)){
  cordat[[i]] = vec2symMat(as.matrix(data[i,3:5]), diag = FALSE)
  dimnames(cordat[[i]]) = labels
}

cordat

## Sample sizes
my.n <- data$N
my.n

## Total sample sizes in each cell
pattern.n(cordat, my.n)

## Number of studies in each cell
pattern.na(cordat, show.na = FALSE)

length(cordat)
length(my.n)


## Stage 1 analysis: find an average correlation matrix
stage1 <- tssem1(cordat, my.n)
summary(stage1)



stage1 <- tssem1(Cov=cordat, n=data$N, method="REM", RE.type = "Diag")
summary(stage1)

## Average correlation matrix
meanR <- vec2symMat(coef(stage1, select = "fixed"), diag = FALSE)
dimnames(meanR) <- list(varlist, varlist)
meanR

## Absolute heterogeneity variance: tau^2
tau2 <- vec2symMat(coef(stage1, select = "random"), diag = FALSE)
dimnames(tau2) <- list(varlist, varlist)
tau2

## Relative heterogeneity index: I^2
I2 <- vec2symMat(summary(stage1)$I2.values[, "Estimate"], diag = FALSE)
dimnames(I2) <- list(varlist, varlist)
I2

## Proposed model
model <- "IWB ~ c*TL + b*TRS
          TRS ~ a*TL
          TL ~~ 1*TL"
plot(model, color="yellow")

varlist = c("TL", "TRS", "IWB")
RAM1 <- lavaan2RAM(model, obs.variables = varlist)
RAM1

#_________________________STAGE_2_____________________________________________

# #A Matrisi – Yapısal Katsayılar (Paths)

# #A[1,1] = 0 TL kendini etkilemez (döngü yok)
# A[1,2] = 0.1*b21	PE'nin TL üzerindeki etkisi (b21 parametresi, 0.1 ile ölçeklenmiş)
# #A[3,1:3] = 0	IWB kendisini veya diğerlerini etkilemez (modelin son değişkeni gibi)
# A[1,3] = 0.1*b31	IWB'nin TL üzerindeki etkisi (b31 parametresi)
# A[2,1] = 0	TL’nin PE üzerinde etkisi yok (çünkü bu ters yön)
# A[2,2] = 0	PE kendini etkilemez
# A[2,3] = 0.1*b32	IWB'nin PE üzerindeki etkisi (b32)


# # Harmonik ortalama N hesapla
# N_values <- data$N
# harmonic_N <- length(N_values) / sum(1 / N_values)
# # harmonic_N
# # 1. Harmonik N hesapla
# harmonic_N <- length(data$N) / sum(1 / data$N)
# 
# # 2. stage1 nesnesinin içindeki toplam N değerini override et
# stage1$total.n <- harmonic_N
# 
# 


stage2a <- tssem2(
  stage1,
  RAM=RAM1,
  diag.constraints = TRUE,
  intervals = "LB"
)
summary(stage2a)

# Yol diyagramı çizimi
plot_object_TRS <- meta2semPlot(stage2a)

# Yol grafiğini çiz
semPaths(plot_object_TRS, whatLabels = "est", layout = "tree2",
         edge.label.cex = 1.2, sizeMan = 7, nCharNodes = 0)

semPaths(plot_object_TRS,
         whatLabels = "est",
         layout = "tree2",
         edge.label.cex = 1.2,
         rotation = 1,         # 0 = yukarıdan aşağı, 2 = soldan sağa
         sizeMan = 9,
         nCharNodes = 0,
         color = list(lat = "skyblue", man = "lightgreen"),
         edge.color = "black",
         edge.label.color = "blue")

# semPaths(plot_object_PE,
#          layout = "tree2",
#          whatLabels = "est",
#          style = "ram",
#          sizeMan = 8,
#          color = list(man = "lightblue", lat = "lightyellow"),
#          border.color = list(man = "darkblue", lat = "orange"),
#          edge.label.cex = 1.2)

stage2b <- tssem2(stage1,
                  RAM=RAM1,
                  diag.constraints=TRUE,
                  intervals="LB",
                  mx.algebras = list(Indirect=mxAlgebra(a*b, name="Indirect"),
                                     Direct=mxAlgebra(c, name="Direct")))

summary(stage2b)




HatVar <-0.74
R2 <- 1 - HatVar
R2


## Add a constraint on c=a*b
## Rerun to remove errors

stage2b <- mxModel(stage2b, mxConstraint(c==a*b, name="constraint"))
stage2b <- mxRun(stage2b)
stage2b <- mxTryHard(stage2b, extraTries = 100)
stage2b <- mxRun(stage2b, intervals = TRUE)
summary(stage2b)

anova(stage2$mx.fit, stage2b)
#______________________________________________________________________________



models <- list(plot_object_PE, plot_object_IM, plot_object_CSE, plot_object_LMX,
               plot_object_WE, plot_object_KS, plot_object_PS, plot_object_TRS)
names <- c("PE", "IM", "CSE", "LMX", "WE", "KS", "PS","TRS")

for (i in 1:length(models)) {
  fname <- paste0("sem_", names[i], ".png")
  png(fname, width = 1200, height = 800, res = 150)
  semPaths(models[[i]],
           whatLabels = "est",
           layout = "tree2",
           edge.label.cex = 1.2,
           sizeMan = 9,
           nCharNodes = 0,
           color = list(lat = "skyblue", man = "lightgreen"),
           edge.color = "black",
           edge.label.color = "blue")
  dev.off()
}

##################################################################################
library(magick)

# PNG dosyalarını oku
img1 <- image_read("sem_PE.png")
img2 <- image_read("sem_CSE.png")
img3 <- image_read("sem_WE.png")
img4 <- image_read("sem_IM.png")
img5 <- image_read("sem_LMX.png")
img6 <- image_read("sem_KS.png")
img7 <- image_read("sem_PS.png")
img8 <- image_read("sem_TRS.png")

## Her satırı yatay olarak birleştir
row1 <- image_append(c(img1, img2))  # 1. satır
row2 <- image_append(c(img3, img4))  # 2. satır
row3 <- image_append(c(img5, img6))  # 3. satır
row4 <- image_append(c(img7, img8))  # 4. satır

# Satırları dikey olarak birleştir
combined <- image_append(c(row1, row2, row3, row4), stack = TRUE)

# Görseli kaydet
# Görseli kaydet
image_write(combined, "combined_2x4_sem_paths.png")



