为什么在使用综合分数时路径分析会失败?
Why does Path Analysis fail when using a composite score?
我正在尝试使用 lavaan
到 运行 阅读评估数据(无潜在变量)的路径分析,但通常失败并出现以下错误:
In lav_model_estimate(lavmodel = lavmodel, lavpartable = lavpartable, :
lavaan WARNING: the optimizer warns that a solution has NOT been found
虽然数据比较大,但我看出问题的根源是模型的这一部分:reading ~ a + b + c
a
、b
和c
都是0-30的分数,基本上是3组不同的词。 'reading' 是基本综合分数(即,对于每个 child,'reading' 加在一起 a+b+c
)。
删除 a、b 或 c 中的任何一个都会产生 'successful' 结果,因此我相信模型中不知何故存在 太多 信息?
a、b 和 c 之间并没有特别不寻常的相关性 - 在 0.3 和 0.37 之间。
是否有任何原因导致路径分析会因为使用这样的综合分数而失败,即使分数内部存在差异?
经过一些评论,我想我明白你想要什么了。我的建议是假设阅读是一个潜在变量(在 literature 中很常见)一个 运行 多组验证性因素分析来测试组间的潜在差异。
model <- "reading =~ a + b + c"
semTools::measurementInvariance(model=model, data=df, group="variable of grouping")
如果测量不变性成立,则您的组在拟合方面没有差异。如果不是,您可以调查它失败的地方(使用 Δχ² 标准或 ΔCFI 标准或其他)。
示例:
HS.model <- ' visual =~ x1 + x2 + x3'
semTools::measurementInvariance(model=HS.model, data=HolzingerSwineford1939,group="school")
或者,对于 semTools,您可以使用 lavaan
函数:
library(lavaan)
fit <- cfa(model=model, data=HolzingerSwineford1939, group="school", group.equal=c("loadings")) #then if it holds, group.equal=c("loadings", "intercepts"))
如果您想针对特定参数专门比较两组:
model_free <- "visual =~ x1 + c(l1,l2)*x2 + x3"
fit_model_free <- cfa(model=model_free, data=HolzingerSwineford1939, group="school")
model_equal <- "visual =~ x1 + c(l3,l3)*x2 + x3"
fit_model_equal <- cfa(model=model_equal, data=HolzingerSwineford1939, group="school")
lavaan::anova(fit_model_free, fit_model_equal) #LRT test
如果模型不同,则意味着一组中的一个加载与另一组的加载在统计上存在显着差异。
在这个例子中,没有:
(¬_¬)lavaan::anova(fit_model_free, fit_model_equal)
Chi-Squared Difference Test
Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)
fit_model_free 0 2718.0 2784.8 0.0000
fit_model_equal 1 2716.2 2779.3 0.2078 0.20782 1 0.6485
我正在尝试使用 lavaan
到 运行 阅读评估数据(无潜在变量)的路径分析,但通常失败并出现以下错误:
In lav_model_estimate(lavmodel = lavmodel, lavpartable = lavpartable, :
lavaan WARNING: the optimizer warns that a solution has NOT been found
虽然数据比较大,但我看出问题的根源是模型的这一部分:reading ~ a + b + c
a
、b
和c
都是0-30的分数,基本上是3组不同的词。 'reading' 是基本综合分数(即,对于每个 child,'reading' 加在一起 a+b+c
)。
删除 a、b 或 c 中的任何一个都会产生 'successful' 结果,因此我相信模型中不知何故存在 太多 信息?
a、b 和 c 之间并没有特别不寻常的相关性 - 在 0.3 和 0.37 之间。
是否有任何原因导致路径分析会因为使用这样的综合分数而失败,即使分数内部存在差异?
经过一些评论,我想我明白你想要什么了。我的建议是假设阅读是一个潜在变量(在 literature 中很常见)一个 运行 多组验证性因素分析来测试组间的潜在差异。
model <- "reading =~ a + b + c"
semTools::measurementInvariance(model=model, data=df, group="variable of grouping")
如果测量不变性成立,则您的组在拟合方面没有差异。如果不是,您可以调查它失败的地方(使用 Δχ² 标准或 ΔCFI 标准或其他)。
示例:
HS.model <- ' visual =~ x1 + x2 + x3'
semTools::measurementInvariance(model=HS.model, data=HolzingerSwineford1939,group="school")
或者,对于 semTools,您可以使用 lavaan
函数:
library(lavaan)
fit <- cfa(model=model, data=HolzingerSwineford1939, group="school", group.equal=c("loadings")) #then if it holds, group.equal=c("loadings", "intercepts"))
如果您想针对特定参数专门比较两组:
model_free <- "visual =~ x1 + c(l1,l2)*x2 + x3"
fit_model_free <- cfa(model=model_free, data=HolzingerSwineford1939, group="school")
model_equal <- "visual =~ x1 + c(l3,l3)*x2 + x3"
fit_model_equal <- cfa(model=model_equal, data=HolzingerSwineford1939, group="school")
lavaan::anova(fit_model_free, fit_model_equal) #LRT test
如果模型不同,则意味着一组中的一个加载与另一组的加载在统计上存在显着差异。
在这个例子中,没有:
(¬_¬)lavaan::anova(fit_model_free, fit_model_equal)
Chi-Squared Difference Test
Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)
fit_model_free 0 2718.0 2784.8 0.0000
fit_model_equal 1 2716.2 2779.3 0.2078 0.20782 1 0.6485