如何获取简单lavaan模型整体显著性的p值(类似lm的F检验p值)
获取lavaan线性模型的整体显著性p值(对应lm的F检验p值)
要得到和lm()中F统计量对应的整体模型显著性p值,本质是检验你的模型是否显著优于仅包含截距的零模型,下面提供两种适配你现有lavaan模型设置的方法:
方法1:模型比较法(卡方检验)
通过比较目标模型与零模型的拟合差异,得到的p值和lm的F检验逻辑完全一致。步骤如下:
library(lavaan) # 加载样本数据 data <- structure(list(predictor1 = c(1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, NA, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, NA, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, NA, 1, 1, 0, 1, 1, NA, 1, 0, 1, 1, 1, 1, 0, 1), predictor2 = c(23.09, 26.19, 22.77, 19.56, 21.38, NA, 22.55, 21.06, 22.13, 24.05, 21.06, 23.94, 22.78, 21.38, 20.74, 23.52, 23.41, 21.16, 22.34, 23.94, 22.45, 21.06, 21.16, 20.2, 20.52, 23.19, 26.4, 22.34, 25.12, 23.09, 22.34, 23.3, 23.19, 29.07, 23.19, 25.12, 22.66, 23.19, 22.77, 26.19, 21.27, 23.3, 21.48, 23.73, 23.3, 21.48, 21.81, 24.16, 23.19, 22.34, 21.59, 21.27, 25.23, 22.66, 24.05, 26.29, 23.19, 22.77, 23.84, 23.19), criterion = c(1.97, 1.15, 0, -1.18, -0.15, 1.42, 0, 2.19, 2.5, 1.08, 2.15, 0.27, 0.49, -0.15, 0.7, -6.93, 0.13, 1.94, 2.09, -0.26, 0.9, 1.94, 2.26, 0.77, -1.02, 0.48, 0, 0.28, 1.41, 1.17, 0, 0, 2.59, 4.78, 2.59, 1.16, 1.1, 1.07, -1.62, 1.1, 0, 0, 0.35, 1.07, 0.33, -0.29, 2.12, -1.4, 0.9, 0, 5.28, -0.94, -1.2, 0.67, 0.72, 0, 3.13, 0, 0.62, 0.84)), row.names = c(NA, 60L), class = "data.frame") # 拟合目标模型 model <- sem('criterion ~ predictor1 + predictor2', data = data, missing = "FIML", fixed.x = FALSE, se = "BOOTSTRAP", bootstrap = 5000) # 拟合零模型(仅包含截距项) null_model <- sem('criterion ~ 1', data = data, missing = "FIML", fixed.x = FALSE, se = "BOOTSTRAP", bootstrap = 5000) # 比较两个模型,输出整体显著性p值 anova(model, null_model)
运行后,结果中的Pr(>Chisq)就是你需要的整体模型显著性p值,和lm()的F检验p值逻辑等价。
方法2:直接提取F检验统计量
对于普通线性回归形式的lavaan模型,可以直接用lavTestF()函数获取F统计量和对应的p值,结果和lm()输出的F检验完全匹配:
# 获取标准F检验的p值 lavTestF(model) # 如果需要基于bootstrap的p值(适配你模型的bootstrap设置) lavTestF(model, bootstrap = TRUE)
注意事项
- 因为你使用了
FIML处理缺失值,这个p值和lm()默认用listwise删除缺失值得到的结果会有差异,但两者都是检验模型整体显著性的指标。 - 当使用bootstrap时,
lavTestF(model, bootstrap = TRUE)会给出基于bootstrap抽样的p值,更稳健。
内容的提问来源于stack exchange,提问作者Madamadam
相关产品推荐
相关产品推荐

