Lavaan中CFA未自动设置因子载荷为1的原因咨询
问题:Lavaan执行CFA未自动固定因子载荷为1的原因
首次使用R语言的Lavaan包做验证性因子分析(CFA),程序能正常运行,但没看到每个因子自动设置一个因子载荷为1,想知道原因。
使用的代码:
model1 <- 'comm=~relimport+relthink+relhurt Ind=~attend+prayer+relread relimport~~relthink' fit1 <- cfa(model1, data=SIM1, std.lv=TRUE) summary(fit1, ci=T, standardized=T, fit.measures=T ) modindices(fit1, minimum.value=10, sort=TRUE) lavaanPlot(model=fit1, node_options=list(shape="box", fontname= "Helvetica"), edge_options=list(color="grey"), coefs=TRUE, stand=TRUE)
输出结果:
lavaan 0.6.13 ended normally after 30 iterations Estimator ML Optimization method NLMINB Number of model parameters 14 Used Total Number of observations 796 1769 Model Test User Model: Test statistic 2.707 Degrees of freedom 7 P-value (Chi-square) 0.911 Model Test Baseline Model: Test statistic 1394.558 Degrees of freedom 15 P-value 0.000 User Model versus Baseline Model: Comparative Fit Index (CFI) 1.000 Tucker-Lewis Index (TLI) 1.007 Loglikelihood and Information Criteria: Loglikelihood user model (H0) -7374.779 Loglikelihood unrestricted model (H1) -7373.425 Akaike (AIC) 14777.558 Bayesian (BIC) 14843.072 Sample-size adjusted Bayesian (SABIC) 14798.615 Root Mean Square Error of Approximation: RMSEA 0.000 90 Percent confidence interval - lower 0.000 90 Percent confidence interval - upper 0.017 P-value H_0: RMSEA <= 0.050 1.000 P-value H_0: RMSEA >= 0.080 0.000 Standardized Root Mean Square Residual: SRMR 0.008 Parameter Estimates: Standard errors Standard Information Expected Information saturated (h1) model Structured Latent Variables: Estimate Std.Err z-value P(>|z|) ci.lower ci.upper Std.lv comm =~ relimport 0.796 0.050 15.875 0.000 0.698 0.894 0.796 relthink 0.735 0.062 11.784 0.000 0.613 0.857 0.735 relhurt 0.660 0.061 10.827 0.000 0.540 0.779 0.660 Ind =~ attend 0.685 0.048 14.408 0.000 0.591 0.778 0.685 prayer 1.605 0.065 24.794 0.000 1.478 1.732 1.605 relread 1.134 0.052 21.960 0.000 1.033 1.235 1.134 Std.all 0.926 0.672 0.455 0.523 0.844 0.757 Covariances: Estimate Std.Err z-value P(>|z|) ci.lower ci.upper Std.lv .relimport ~~ .relthink -0.007 0.069 -0.104 0.917 -0.143 0.129 -0.007 comm ~~ Ind 0.609 0.043 14.108 0.000 0.525 0.694 0.609 Std.all -0.027 0.609 Variances: Estimate Std.Err z-value P(>|z|) ci.lower ci.upper Std.lv .relimport 0.106 0.071 1.489 0.137 -0.033 0.245 0.106 .relthink 0.658 0.084 7.874 0.000 0.494 0.822 0.658 .relhurt 1.668 0.097 17.268 0.000 1.479 1.857 1.668 .attend 1.242 0.068 18.253 0.000 1.109 1.376 1.242 .prayer 1.040 0.125 8.286 0.000 0.794 1.286 1.040 .relread 0.955 0.075 12.676 0.000 0.807 1.103 0.955 comm 1.000 1.000 1.000 1.000 Ind 1.000 1.000 1.000 1.000 Std.all 0.143 0.549 0.793 0.726 0.288 0.426
回答
出现这个情况是因为你在cfa()函数里设置了std.lv=TRUE参数,这是Lavaan中模型识别的两种不同策略导致的:
默认策略(不设置std.lv):Lavaan会自动把每个潜变量的第一个观测变量的因子载荷固定为1,以此确定潜变量的度量尺度,这时潜变量的方差是自由估计的。
使用std.lv=TRUE时的策略:这个参数会让Lavaan把每个潜变量的方差固定为1来确定度量尺度,此时所有因子载荷都变成自由估计的参数,所以你看不到任何一个载荷被固定为1。
看你的输出结果里的「Variances」部分,comm和Ind这两个潜变量的方差都显示为1.000,且没有标准误和置信区间(因为是固定值),这就是std.lv=TRUE直接作用的结果。
如果想要回到你预期的「每个因子自动固定一个载荷为1」的状态,只需要去掉cfa()函数里的std.lv=TRUE参数,用默认设置即可。
内容的提问来源于stack exchange,提问作者RKollar
相关产品推荐
相关产品推荐

