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
Mp ~~ Ms
Yi ~~ Yt
# 间接效应
# 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
Mp ~~ Ms
Yi ~~ Yt
'
IV.F <- sem(model,sample.cov = P,sample.nobs = Nhar)
lavaan_summary(IV.F)
##
## Fit Measures (lavaan):
## χ²(0, N = 26688) = 0.000, p = 1.000
## χ²/df = Inf (saturated model)
## AIC = 291314.900 (Akaike Information Criterion)
## BIC = 291429.588 (Bayesian Information Criterion)
## CFI = 1.000 (Comparative Fit Index)
## TLI = 1.000 (Tucker-Lewis Index; Non-Normed Fit Index, NNFI)
## NFI = 1.000 (Normed Fit Index)
## IFI = 1.000 (Incremental Fit Index)
## GFI = 1.000 (Goodness-of-Fit Index)
## AGFI = 1.000 (Adjusted Goodness-of-Fit Index)
## RMSEA = 0.000, 90% CI [0.000, 0.000] (Root Mean Square Error of Approximation)
## SRMR = 0.000 (Standardized Root Mean Square Residual)
##
## Model Estimates (lavaan):
## ──────────────────────────────────────────────────────────────────────────
## Estimate S.E. z p LLCI ULCI Beta
## ──────────────────────────────────────────────────────────────────────────
## Regression Paths:
## Mp <- X (Xp) 0.188 (0.006) 31.253 <.001 *** 0.176 0.200 0.188
## Ms <- X (Xs) 0.158 (0.006) 26.157 <.001 *** 0.146 0.170 0.158
## Yi <- X (Xi) 0.033 (0.006) 5.684 <.001 *** 0.022 0.045 0.033
## Yi <- Mp (Yip) 0.137 (0.006) 22.603 <.001 *** 0.126 0.149 0.137
## Yi <- Ms (Yis) 0.285 (0.006) 47.115 <.001 *** 0.273 0.297 0.285
## Yt <- X (Xt) 0.070 (0.006) 11.797 <.001 *** 0.058 0.081 0.070
## Yt <- Mp (Ytp) 0.104 (0.006) 16.974 <.001 *** 0.092 0.116 0.104
## Yt <- Ms (Yts) 0.271 (0.006) 44.504 <.001 *** 0.260 0.283 0.271
## Defined Effects:
## XMdiff 0.030 (0.007) 4.162 <.001 *** 0.016 0.044 0.030
## XYdiff -0.036 (0.008) -4.734 <.001 *** -0.051 -0.021 -0.036
## YMidiff -0.148 (0.010) -15.118 <.001 *** -0.167 -0.128 -0.148
## YMtdiff -0.167 (0.010) -17.007 <.001 *** -0.187 -0.148 -0.167
## MedMpYi 0.026 (0.001) 18.315 <.001 *** 0.023 0.029 0.026
## MedMpYt 0.020 (0.001) 14.916 <.001 *** 0.017 0.022 0.020
## MedMsYi 0.045 (0.002) 22.869 <.001 *** 0.041 0.049 0.045
## MedMsYt 0.043 (0.002) 22.550 <.001 *** 0.039 0.047 0.043
## MdifYi -0.019 (0.002) -8.072 <.001 *** -0.024 -0.015 -0.019
## MdifYt -0.023 (0.002) -10.061 <.001 *** -0.028 -0.019 -0.023
## ──────────────────────────────────────────────────────────────────────────
## 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[[2]][, .(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 0.000 0.000 1.000 0.000
## 2 Model 2 17.318 1.000 0.000 0.999 0.006 17.318 1.000 0.000
## 3 Model 3 227.572 1.000 0.000 0.981 0.019 227.572 1.000 0.000
## 4 Model 4 287.686 1.000 0.000 0.975 0.021 287.686 1.000 0.000
## ──────────────────────────────────────────────────────────────────────────────────────