DATA
PREPARATION
Load all sheets of an Excel
Sheets <- rio::import_list("https://drive.google.com/uc?id=1eWmXuL3uXAHMZesaCuiSQcuMD8djEKNc&export=download")
#Sheets <-rio::import_list("C:\\Users\\S\\Documents\\WXWork\\1688851821252719\\Cache\\File\\2024-09\\Matrix-overall.xlsx")
#as.data.frame(Sheets$Template)
#as.data.frame(Sheets$`C-r`)
#names(Sheets$r`C-r`)
Sheets <- lapply(Sheets, function(df) {
# 删除第一列
df <- df[, -1]
# 返回修改后的 df
# 添加新列 Yi,填充为 NA
df <- df %>%
mutate(Yi = NA)
# 将对角线的值填充为 1
diag(df) <- 1
return(df)
})
# 使用 lapply 将 Sheets 中的每个数据框转换为 data.table,并替换缺失值
Sheets <- lapply(Sheets, function(df) {
# 替换所有缺失值为 -999
df[is.na(df)] <- -999
# 返回修改后的 df
return(df)
})
Sheets <- lapply(Sheets, function(df) {
# 替换列名
df <- df %>%
dplyr::rename(X = `INPUT`, Mp = `TEAM PROCESS`, Ms = `EMERGENT STATES`, Yt = `Team effectiveness`)
# 返回修改后的数据框
return(df)
})
FULL
MODEL
# 1.1 model specification
IV.S <- '
Mp ON X (Xp);
Ms ON X (Xs);
Yi ON X
Mp (Yip)
Ms (Yis);
Yt ON X
Mp (Ytp)
Ms (Yts);
MODEL INDIRECT:
Yi IND X;
Yt IND X;
MODEL CONSTRAINT:
NEW(MXdif YiMdif YtMdif);
MXdif = Xp - Xs;
YiMdif = Yip - Yis;
YtMdif = Ytp - Yts;
'
#IV <- mplus2lavaan.modelSyntax(IV.S)
#IVb <- mplus2lavaan.modelSyntax(IV.S)
#cat(IV)
# lavaan 模型代码
model <- '
# 结构方程模型
Mp ~ Xp*X
Ms ~ Xs*X
Yi ~ Xi*X + Yip*Mp + Yis*Ms
Yt ~ Xt*X + Ytp*Mp + Yts*Ms
# 间接效应
# lavaan 中可以自动计算间接效应,如果需要的话
# 你可以使用 := 定义间接效应
# 约束条件
XMdiff := Xp - Xs # 计算 Xp 和 Xs 的差值
XYdiff := Xi - Xt # 计算 Xp 和 Xs 的差值
YMidiff := Yip - Yis # 计算 Yip 和 Yis 的差值
YMtdiff := Ytp - Yts # 计算 Ytp 和 Yts 的差值
MedMpYi := Xp*Yip
MedMpYt := Xp*Ytp
MedMsYi := Xs*Yis
MedMsYt := Xs*Yts
MdifYi := MedMpYi - MedMsYi
MdifYt := MedMpYt - MedMsYt
'
ModelOnly <- '
Mp ~ Xp*X
Ms ~ Xs*X
Yi ~ Xi*X + Yip*Mp + Yis*Ms
Yt ~ Xt*X + Ytp*Mp + Yts*Ms
'
IV.F <- sem(model,sample.cov = P,sample.nobs = Nhar)
lavaan_summary(IV.F)
##
## Fit Measures (lavaan):
## χ²(1, N = 26688) = 1752.614, p < 1e-99 ***
## χ²/df = 1752.614
## AIC = 296132.760 (Akaike Information Criterion)
## BIC = 296239.256 (Bayesian Information Criterion)
## CFI = 0.796 (Comparative Fit Index)
## TLI = -1.041 (Tucker-Lewis Index; Non-Normed Fit Index, NNFI)
## NFI = 0.796 (Normed Fit Index)
## IFI = 0.796 (Incremental Fit Index)
## GFI = 0.969 (Goodness-of-Fit Index)
## AGFI = 0.536 (Adjusted Goodness-of-Fit Index)
## RMSEA = 0.256, 90% CI [0.246, 0.266] (Root Mean Square Error of Approximation)
## SRMR = 0.068 (Standardized Root Mean Square Residual)
##
## Model Estimates (lavaan):
## ──────────────────────────────────────────────────────────────────────────
## Estimate S.E. z p LLCI ULCI Beta
## ──────────────────────────────────────────────────────────────────────────
## Regression Paths:
## Mp <- X (Xp) 0.159 (0.006) 26.242 <.001 *** 0.147 0.170 0.159
## Ms <- X (Xs) 0.134 (0.006) 22.105 <.001 *** 0.122 0.146 0.134
## Yi <- X (Xi) 0.042 (0.006) 7.106 <.001 *** 0.031 0.054 0.043
## Yi <- Mp (Yip) 0.121 (0.006) 20.498 <.001 *** 0.109 0.132 0.122
## Yi <- Ms (Yis) 0.245 (0.006) 41.681 <.001 *** 0.233 0.256 0.247
## Yt <- X (Xt) 0.063 (0.006) 10.485 <.001 *** 0.051 0.074 0.063
## Yt <- Mp (Ytp) 0.104 (0.006) 17.603 <.001 *** 0.093 0.116 0.105
## Yt <- Ms (Yts) 0.232 (0.006) 39.306 <.001 *** 0.220 0.243 0.233
## Defined Effects:
## XMdiff 0.025 (0.009) 2.862 .004 ** 0.008 0.041 0.025
## XYdiff -0.020 (0.008) -2.609 .009 ** -0.036 -0.005 -0.020
## YMidiff -0.124 (0.008) -14.898 <.001 *** -0.140 -0.108 -0.125
## YMtdiff -0.128 (0.008) -15.272 <.001 *** -0.144 -0.111 -0.128
## MedMpYi 0.019 (0.001) 16.154 <.001 *** 0.017 0.021 0.019
## MedMpYt 0.017 (0.001) 14.619 <.001 *** 0.014 0.019 0.017
## MedMsYi 0.033 (0.002) 19.529 <.001 *** 0.030 0.036 0.033
## MedMsYt 0.031 (0.002) 19.267 <.001 *** 0.028 0.034 0.031
## MdifYi -0.014 (0.002) -6.640 <.001 *** -0.018 -0.010 -0.014
## MdifYt -0.015 (0.002) -7.390 <.001 *** -0.018 -0.011 -0.015
## ──────────────────────────────────────────────────────────────────────────
## Note. Raw (Standard) Confidence Interval (CI) and SE.
lavaanPlot(model = IV.F, coefs = T, sig = 0.05)
COMPARE MS ON X
IV <- gsub("Mp ~ Xp*X", "Mp ~ Xps*X", ModelOnly, fixed = TRUE)
IV <- gsub("Ms ~ Xs*X", "Ms ~ Xps*X", IV, fixed = TRUE)
IV.MX <- sem(IV,sample.cov = P,sample.nobs = Nhar)
COMPARE YI ON MS
IV <- gsub("Yi ~ Xi*X + Yip*Mp + Yis*Ms", "Yi ~ Xi*X + Yips*Mp + Yips*Ms", ModelOnly, fixed = TRUE)
IV.YiM <- sem(IV,sample.cov = P,sample.nobs = Nhar)
COMPARE YT ON MS
IV <- gsub("Yt ~ Xt*X + Ytp*Mp + Yts*Ms", "Yt ~ Xt*X + Ytps*Mp + Ytps*Ms", ModelOnly, fixed = TRUE)
IV.YtM <- sem(IV,sample.cov = P,sample.nobs = Nhar)
FIT
SUMMARY
model_list <- list(IV.F, IV.MX, IV.YiM, IV.YtM)
result <- SEM.FitCombine(model_list, Mplus = F,title = "")
#names(result)
print_table(result[, .(Model,ChiSqM_Value,ChiSqM_DF, ChiSqM_PValue, CFI,SRMR,ChiSq_Diff,DF_Diff,ChiSq_p)])
## ──────────────────────────────────────────────────────────────────────────────────────
## Model ChiSqM_Value ChiSqM_DF ChiSqM_PValue CFI SRMR ChiSq_Diff DF_Diff ChiSq_p
## ──────────────────────────────────────────────────────────────────────────────────────
## 1 Model 1 1752.614 1.000 0.000 0.796 0.068
## 2 Model 2 1760.806 2.000 0.000 0.795 0.068 8.192 1.000 0.004
## 3 Model 3 1918.091 2.000 0.000 0.777 0.070 165.477 1.000 0.000
## 4 Model 4 1926.479 2.000 0.000 0.776 0.070 173.865 1.000 0.000
## ──────────────────────────────────────────────────────────────────────────────────────