Lavaan中回归路径估计:自由度与检验统计量异常问题
问题描述
使用R语言lavaan包比较结构方程模型(SEM),模型包含4个潜变量:3个由8个观测变量测量,1个由2个观测变量测量。出现以下异常情况:
- 测量模型自由度为293,参数数为58;添加3条回归路径后的结构模型,其自由度、参数数、卡方值、AIC/BIC等拟合指标与测量模型完全一致
- 调用
anova(fitMeasTM1, fitFactTM1)比较模型时,因自由度无差异触发警告:
Warning message: In lavTestLRT(object = object, ..., model.names = NAMES) : lavaan WARNING: some models have the same degrees of freedom
- semPaths可视化和参数估计结果显示回归系数已被成功估计,但拟合指标完全相同,已确认未选错模型,无法定位原因。
代码示例
# Pre-Post Measurement Model 1 - (TM) MeasTM1 <- ' posttransp8 =~ post_Understand_Successful_Work + post_Purpose_Assignment + post_Assignment_Objectives_Course + post_Instructor_Identified_Goal + post_Steps_Required + post_Assignment_Instructions + post_Detailed_Directions + post_Knew_How_Evaluated preskills8 =~ pre_Express_Ideas_Write + pre_Express_Ideas_Speak + pre_Collaborate_Academic + pre_Analyz + pre_Synthesize + pre_Apply_New_Contexts + pre_Consider_Ethics + pre_Capable_Self_Learn postskills8 =~ post_Express_Ideas_Write + post_Express_Ideas_Speak + post_Collaborate_Academic + post_Analyz + post_Synthesize + post_Apply_New_Contexts + post_Consider_Ethics + post_Capable_Self_Learn postbelong2 =~ post_Belong_School_Commty + post_Helped_Belong_School_Commty ' fitMeasTM1 <- sem(MeasTM1, data=TILTSEM) summary(fitMeasTM1, standardized=TRUE, fit.measures=TRUE) semPaths(fitMeasTM1, whatLabels = "std", layout = "tree") # Pre-Post Factor Model 1 - (TM) #Testing regression on Pre-Post Skills FactTM1 <- ' #latent factors posttransp8 =~ post_Understand_Successful_Work + post_Purpose_Assignment + post_Assignment_Objectives_Course + post_Instructor_Identified_Goal + post_Steps_Required + post_Assignment_Instructions + post_Detailed_Directions + post_Knew_How_Evaluated preskills8 =~ pre_Express_Ideas_Write + pre_Express_Ideas_Speak + pre_Collaborate_Academic + pre_Analyz + pre_Synthesize + pre_Apply_New_Contexts + pre_Consider_Ethics + pre_Capable_Self_Learn postskills8 =~ post_Express_Ideas_Write + post_Express_Ideas_Speak + post_Collaborate_Academic + post_Analyz + post_Synthesize + post_Apply_New_Contexts + post_Consider_Ethics + post_Capable_Self_Learn postbelong2 =~ post_Belong_School_Commty + post_Helped_Belong_School_Commty #regressions postskills8 ~ preskills8 + postbelong2 + posttransp8 ' fitFactTM1 <- sem(FactTM1, data=TILTSEM) summary(fitFactTM1, standardized=TRUE, fit.measures=TRUE) semPaths(fitFactTM1, whatLabels = "std", layout = "tree") anova(fitMeasTM1,fitFactTM1)
模型输出
测量模型输出
Estimator ML Optimization method NLMINB Number of model parameters 58 Used Total Number of observations 521 591 Model Test User Model: Test statistic 1139.937 Degrees of freedom 293 P-value (Chi-square) 0.000 Model Test Baseline Model: Test statistic 4720.060 Degrees of freedom 325 P-value 0.000 User Model versus Baseline Model: Comparative Fit Index (CFI) 0.807 Tucker-Lewis Index (TLI) 0.786 Loglikelihood and Information Criteria: Loglikelihood user model (H0) -13335.136 Loglikelihood unrestricted model (H1) -12765.167 Akaike (AIC) 26786.271 Bayesian (BIC) 27033.105 Sample-size adjusted Bayesian (BIC) 26849.000 Root Mean Square Error of Approximation: RMSEA 0.074 90 Percent confidence interval - lower 0.070 90 Percent confidence interval - upper 0.079 P-value RMSEA <= 0.05 0.000 Standardized Root Mean Square Residual: SRMR 0.068
结构模型输出
Estimator ML Optimization method NLMINB Number of model parameters 58 Used Total Number of observations 521 591 Model Test User Model: Test statistic 1139.937 Degrees of freedom 293 P-value (Chi-square) 0.000 Model Test Baseline Model: Test statistic 4720.060 Degrees of freedom 325 P-value 0.000 User Model versus Baseline Model: Comparative Fit Index (CFI) 0.807 Tucker-Lewis Index (TLI) 0.786 Loglikelihood and Information Criteria: Loglikelihood user model (H0) -13335.136 Loglikelihood unrestricted model (H1) -12765.167 Akaike (AIC) 26786.271 Bayesian (BIC) 27033.105 Sample-size adjusted Bayesian (BIC) 26849.000 Root Mean Square Error of Approximation: RMSEA 0.074 90 Percent confidence interval - lower 0.070 90 Percent confidence interval - upper 0.079 P-value RMSEA <= 0.05 0.000 Standardized Root Mean Square Residual: SRMR 0.068
问题原因与解决思路
核心原因:等价模型的参数化替换
lavaan默认会在测量模型中自动估计所有潜变量之间的协方差。你的测量模型有4个潜变量,默认估计4*(4-1)/2=6个协方差参数;而结构模型中添加的postskills8 ~ preskills8 + postbelong2 + posttransp8这3条回归路径,本质是用回归系数替换了postskills8与另外3个潜变量的协方差参数——总参数数保持58不变,自由度(=观测变量协方差矩阵元素数-参数数)也因此完全一致。
两个模型属于等价模型:参数化方式不同,但对数据的拟合能力完全相同,所以卡方值、AIC/BIC、loglikelihood等所有拟合指标都会完全一致。
验证方法
通过inspect()函数查看两个模型的参数明细,可直观看到参数替换的过程:
# 查看测量模型的参数列表 inspect(fitMeasTM1, "parameters") # 查看结构模型的参数列表 inspect(fitFactTM1, "parameters")
对比会发现,测量模型中存在postskills8与preskills8、postbelong2、posttransp8的协方差参数,而结构模型中这些协方差被替换成了回归系数,总参数数始终为58。
后续分析建议
- 无需用anova比较模型:两个模型是等价模型,似然比检验(LRT)不适用,直接查看结构模型中回归系数的显著性即可(
summary()输出的参数估计表包含p值)。 - 构建嵌套模型用于比较:若要做模型比较,需创建嵌套模型,比如在结构模型中约束部分回归系数为0,再与无约束的结构模型对比。
- 明确模型关系:测量模型和添加回归路径的结构模型并非嵌套关系,而是参数化不同的等价模型,不存在拟合优度的差异。
内容的提问来源于stack exchange,提问作者Dan Richard
相关产品推荐
相关产品推荐

