You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。

后续分析建议

  1. 无需用anova比较模型:两个模型是等价模型,似然比检验(LRT)不适用,直接查看结构模型中回归系数的显著性即可(summary()输出的参数估计表包含p值)。
  2. 构建嵌套模型用于比较:若要做模型比较,需创建嵌套模型,比如在结构模型中约束部分回归系数为0,再与无约束的结构模型对比。
  3. 明确模型关系:测量模型和添加回归路径的结构模型并非嵌套关系,而是参数化不同的等价模型,不存在拟合优度的差异。

内容的提问来源于stack exchange,提问作者Dan Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:06:42