R语言基于协方差的SEM结构方程模型中的拟合指数

2021年09月15日 阅读数:4
这篇文章主要向大家介绍R语言基于协方差的SEM结构方程模型中的拟合指数,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

原文连接:http://tecdat.cn/?p=10165

 


 

在实践中, 因子负载较低(或测量质量较差)的模型的拟合指数要好于因子负载较高的模型。例如,若是两个模型具备相同的错误指定级别,而且因子负载为.9的模型的RMSEA可能高于.2,而因子负载为.4的模型的RMSEA可能小于.05。本文包含一些图表,能够很是清楚地传达这些结果。html

 

AFIs 是拟合指数的近似优度,其中包括RMSEA和SRMR等绝对拟合指数,以及CFI等相对拟合指数。编程

使用全局拟合指数的替代方法

MAH编写的拟合指数是全局拟合指数(如下称为GFI),它们检测全部类型的模型规格不正确。可是,正如MAH指出的那样,并不是全部模型规格不正确都是有问题的。考虑顺序效应,两个项目可能具备独立于其共享因子的相关偏差,这仅仅是由于一个项目跟随另外一个项目(序列相关)。CFA(缺省值)中不存在此相关偏差将对任何全局拟合指数产生负面影响。此外,全局拟合指数不会告诉你模型错误规格是什么。ruby

 SSV提出了一种调查模型规格不正确的方法,该方法涉及使用修改指数(MI),预期参数变化(EPC),理论和功率分析。EPC是约束关系若是能够由模型自由估计的值,则约束关系将从零变化。我相信研究人员熟悉MI,并常常使用它们来修复模型错误规格,以期得到其审稿人能够接受的GFI。MI和EPC之间的关系是:框架

M I = (E P C / σ )2MI=(EPC/σ)2dom

σσide

SSV建议使用如下框架:post

  • (δ )(δ)
    • 对于因子载荷,绝对值> .4
    • 对于相关偏差,绝对值> .1
  • n c p = (δ / σ )2ncp=(δ/σ)2
  • Ñ Ç pncpχ 2χ2δδ

 

 

 遵循如下决策规则:测试

R语言基于协方差的SEM结构方程模型中的拟合指数_编程开发

 全部这些 在R中实现。 spa

library(lavaan)

为此,我假设 数据 9个问题,受访者依次回答了x1至x9。code

data("HolzingerSwineford1939")
# model syntax for HolzingerSwineford1939 dataset
(syntax <- paste(
  paste("f1 =~", paste0("x", 1:3, collapse = " + ")),
  paste("f2 =~", paste0("x", 4:6, collapse = " + ")),
  paste("f3 =~", paste0("x", 7:9, collapse = " + ")),
  sep = "\n"))

[1] "f1 =~ x1 + x2 + x3\nf2 =~ x4 + x5 + x6\nf3 =~ x7 + x8 + x9"

运行模型,标准化潜在变量,并报告标准化结果:



lavaan (0.5-23.1097) converged normally after  22 iterations

  Number of observations                           301

  Estimator                                         ML
  Minimum Function Test Statistic               85.306
  Degrees of freedom                                24
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Information                                 Expected
  Standard Errors                             Standard

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  f1 =~                                                                 
    x1                0.900    0.081   11.127    0.000    0.900    0.772
    x2                0.498    0.077    6.429    0.000    0.498    0.424
    x3                0.656    0.074    8.817    0.000    0.656    0.581
  f2 =~                                                                 
    x4                0.990    0.057   17.474    0.000    0.990    0.852
    x5                1.102    0.063   17.576    0.000    1.102    0.855
    x6                0.917    0.054   17.082    0.000    0.917    0.838
  f3 =~                                                                 
    x7                0.619    0.070    8.903    0.000    0.619    0.570
    x8                0.731    0.066   11.090    0.000    0.731    0.723
    x9                0.670    0.065   10.305    0.000    0.670    0.665

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  f1 ~~                                                                 
    f2                0.459    0.064    7.189    0.000    0.459    0.459
    f3                0.471    0.073    6.461    0.000    0.471    0.471
  f2 ~~                                                                 
    f3                0.283    0.069    4.117    0.000    0.283    0.283

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .x1                0.549    0.114    4.833    0.000    0.549    0.404
   .x2                1.134    0.102   11.146    0.000    1.134    0.821
   .x3                0.844    0.091    9.317    0.000    0.844    0.662
   .x4                0.371    0.048    7.778    0.000    0.371    0.275
   .x5                0.446    0.058    7.642    0.000    0.446    0.269
   .x6                0.356    0.043    8.277    0.000    0.356    0.298
   .x7                0.799    0.081    9.823    0.000    0.799    0.676
   .x8                0.488    0.074    6.573    0.000    0.488    0.477
   .x9                0.566    0.071    8.003    0.000    0.566    0.558
    f1                1.000                               1.000    1.000
    f2                1.000                               1.000    1.000
    f3                1.000                               1.000    1.000

卡方统计意义重大

请求修改索引。从高到低对它们进行排序。经过请求power = TRUE并设置增量来应用SSV方法。delta = .4,因子加载的标准意味着若是模型中缺乏因子加载而且因子加载大于.4。默认状况下,delta = .1。根据SSV的建议,这足以解决相关错误。所以,我仅使用选择相关错误做为输出。



lhs op rhs        mi    epc sepc.all delta   ncp power decision
30  f1 =~  x9 36.411  0.519    0.515   0.1 1.351 0.213  **(m)**
76  x7 ~~  x8 34.145  0.536    0.488   0.1 1.187 0.193  **(m)**
28  f1 =~  x7 18.631 -0.380   -0.349   0.1 1.294 0.206  **(m)**
78  x8 ~~  x9 14.946 -0.423   -0.415   0.1 0.835 0.150  **(m)**
33  f2 =~  x3  9.151 -0.269   -0.238   0.1 1.266 0.203  **(m)**
55  x2 ~~  x7  8.918 -0.183   -0.143   0.1 2.671 0.373  **(m)**
31  f2 =~  x1  8.903  0.347    0.297   0.1 0.741 0.138  **(m)**
51  x2 ~~  x3  8.532  0.218    0.164   0.1 1.791 0.268  **(m)**
59  x3 ~~  x5  7.858 -0.130   -0.089   0.1 4.643 0.577  **(m)**
26  f1 =~  x5  7.441 -0.189   -0.147   0.1 2.087 0.303  **(m)**
50  x1 ~~  x9  7.335  0.138    0.117   0.1 3.858 0.502  **(m)**
65  x4 ~~  x6  6.221 -0.235   -0.185   0.1 1.128 0.186  **(m)**
66  x4 ~~  x7  5.920  0.098    0.078   0.1 6.141 0.698  **(m)**
48  x1 ~~  x7  5.420 -0.129   -0.102   0.1 3.251 0.438  **(m)**
77  x7 ~~  x9  5.183 -0.187   -0.170   0.1 1.487 0.230  **(m)**
36  f2 =~  x9  4.796  0.137    0.136   0.1 2.557 0.359  **(m)**
29  f1 =~  x8  4.295 -0.189   -0.187   0.1 1.199 0.195  **(m)**
63  x3 ~~  x9  4.126  0.102    0.089   0.1 3.993 0.515  **(m)**
67  x4 ~~  x8  3.805 -0.069   -0.059   0.1 7.975 0.806     (nm)
43  x1 ~~  x2  3.606 -0.184   -0.134   0.1 1.068 0.178      (i)
45  x1 ~~  x4  3.554  0.078    0.058   0.1 5.797 0.673      (i)
35  f2 =~  x8  3.359 -0.120   -0.118   0.1 2.351 0.335      (i)

检查决策列。x7和x8被称为错误指定,由于功效低至.193,但MI具备统计学意义。

可是,考虑x2和x7(lhs 55),. 373的低功率,MI很大。是否有一些理论将这两个项目联系在一块儿?我能够解释建议的相关性吗?

考虑x4和x8(lhs 67),高功率为.806,但MI在统计上不显着,所以咱们能够得出结论,没有错误指定。

考虑x1和x4(lhs 45),. 673的低功率,而且MI在统计上不显着,所以这没有定论。

如今,对于因子加载:


lhs op rhs        mi    epc sepc.all delta    ncp power decision
30  f1 =~  x9 36.411  0.519    0.515   0.4 21.620 0.996  *epc:m*
28  f1 =~  x7 18.631 -0.380   -0.349   0.4 20.696 0.995   epc:nm
33  f2 =~  x3  9.151 -0.269   -0.238   0.4 20.258 0.994   epc:nm
31  f2 =~  x1  8.903  0.347    0.297   0.4 11.849 0.931   epc:nm
26  f1 =~  x5  7.441 -0.189   -0.147   0.4 33.388 1.000   epc:nm
36  f2 =~  x9  4.796  0.137    0.136   0.4 40.904 1.000   epc:nm
29  f1 =~  x8  4.295 -0.189   -0.187   0.4 19.178 0.992   epc:nm
35  f2 =~  x8  3.359 -0.120   -0.118   0.4 37.614 1.000     (nm)
27  f1 =~  x6  2.843  0.100    0.092   0.4 45.280 1.000     (nm)
38  f3 =~  x2  1.580 -0.123   -0.105   0.4 16.747 0.984     (nm)
25  f1 =~  x4  1.211  0.069    0.059   0.4 40.867 1.000     (nm)
39  f3 =~  x3  0.716  0.084    0.075   0.4 16.148 0.980     (nm)
42  f3 =~  x6  0.273  0.027    0.025   0.4 58.464 1.000     (nm)
41  f3 =~  x5  0.201 -0.027   -0.021   0.4 43.345 1.000     (nm)
34  f2 =~  x7  0.098 -0.021   -0.019   0.4 36.318 1.000     (nm)
32  f2 =~  x2  0.017 -0.011   -0.010   0.4 21.870 0.997     (nm)
37  f3 =~  x1  0.014  0.015    0.013   0.4  9.700 0.876     (nm)
40  f3 =~  x4  0.003 -0.003   -0.003   0.4 52.995 1.000     (nm)

参见第一行,建议我在f1上加载x9。功效高,MI显着且EPC高于.4,代表这是咱们应该注意的某种类型不当。

可是,下一行建议我在f1上加载x7。功效高,MI显着,但EPC为0.38,小于.4,这代表咱们认为这种错误指定的程度不足以保证须要修改模型。决定epc:nm的许多建议修改也是如此。

而后是最后一个具备较高功效的组,但MI并无统计学意义,所以咱们能够得出结论,没有错误指定。

SSV使用75%,这是lavaan的默认设置,但能够灵活使用。


请注意,一次只能对模型进行一次更改。EPC和MI在假设其余参数大体正确的状况下计算得出,所以,执行上述步骤的方法是进行一次更改。

我相信这是SSV建议的方法,遵循这种方法将令人们在使用MI时考虑该模型,同时考虑统计能力以检测错误指定。能够解决全部非不肯定性的关系(使用理论,修改等),并留下一个模型。


PS:潜在变量建模的另外一种方法是PLS路径建模。这是一种基于OLS回归的SEM方法。


  1. McNeish,D.,An,J.,&Hancock,GR(2017)。潜在变量模型中测量质量和拟合指数截止之间的棘手关系。“人格评估杂志”https://doi.org/10.1080/00223891.2017.1281286 
  2. Saris,WE,Satorra,A.,&van der Veld,WM(2009)。测试结构方程模型仍是检测错误规格?结构方程模型:多学科期刊,16(4),561–582。https://doi.org/10.1080/10705510903203433