井出草平の研究ノート

lavaanでポリコリック、ポリシリアル相関係数を計算する[R]

Rではpolycorパッケージで計算ができる。

ides.hatenablog.com

Stataでも現在は標準で計算機能が実装されている。 ides.hatenablog.com

ポリコリック相関係数などは以前のエントリーを参照のこと。

lavCor

www.rdocumentation.org

下記のものは、パッケージのマニュアルに例として挙がっているものである。

library(lavaan)
# Holzinger and Swineford (1939) example
HS9 <- HolzingerSwineford1939[,c("x1","x2","x3","x4","x5",
       "x6","x7","x8","x9")]

ピアソンの相関係数

lavCor(HS9)

結果。

   x1     x2     x3     x4     x5     x6     x7     x8     x9    
x1  1.000                                                        
x2  0.297  1.000                                                 
x3  0.441  0.340  1.000                                          
x4  0.373  0.153  0.159  1.000                                   
x5  0.293  0.139  0.077  0.733  1.000                            
x6  0.357  0.193  0.198  0.704  0.720  1.000                     
x7  0.067 -0.076  0.072  0.174  0.102  0.121  1.000              
x8  0.224  0.092  0.186  0.107  0.139  0.150  0.487  1.000       
x9  0.390  0.206  0.329  0.208  0.227  0.214  0.341  0.449  1.000

順序尺度の作成、3カテゴリ

HS9ord <- as.data.frame( lapply(HS9, cut, 3, labels = FALSE) )

ポリコリック相関係数、2段階推定

lavCor(HS9ord, ordered=names(HS9ord))

結果。

   x1     x2     x3     x4     x5     x6     x7     x8     x9    
x1  1.000                                                        
x2  0.317  1.000                                                 
x3  0.508  0.304  1.000                                          
x4  0.373  0.273  0.136  1.000                                   
x5  0.308  0.226  0.125  0.801  1.000                            
x6  0.319  0.274  0.215  0.683  0.783  1.000                     
x7  0.113 -0.097  0.058  0.169  0.136  0.071  1.000              
x8  0.147  0.094  0.091  0.112  0.160  0.185  0.552  1.000       
x9  0.459  0.204  0.286  0.258  0.265  0.255  0.365  0.454  1.000 

閾値のみ

lavCor(HS9ord, ordered=names(HS9ord), output = "th")

結果。

 x1|t1  x1|t2  x2|t1  x2|t2  x3|t1  x3|t2  x4|t1  x4|t2  x5|t1  x5|t2  x6|t1  x6|t2  x7|t1  x7|t2  x8|t1  x8|t2  x9|t1  x9|t2 
-1.363  0.844 -1.556  0.741 -0.353  0.626 -0.797  0.956 -0.820  0.527  0.188  1.529 -0.820  1.024 -0.129  1.882 -0.425  1.835 

ポリコリック相関、標準誤差つき

lavCor(HS9ord, ordered=names(HS9ord), se = "standard", output = "est")

結果。

   lhs  op rhs est.std    se       z pvalue ci.lower ci.upper
1   x1  ~~  x1   1.000 0.000      NA     NA    1.000    1.000
2   x2  ~~  x2   1.000 0.000      NA     NA    1.000    1.000
3   x3  ~~  x3   1.000 0.000      NA     NA    1.000    1.000
4   x4  ~~  x4   1.000 0.000      NA     NA    1.000    1.000
5   x5  ~~  x5   1.000 0.000      NA     NA    1.000    1.000
6   x6  ~~  x6   1.000 0.000      NA     NA    1.000    1.000
7   x7  ~~  x7   1.000 0.000      NA     NA    1.000    1.000
8   x8  ~~  x8   1.000 0.000      NA     NA    1.000    1.000
9   x9  ~~  x9   1.000 0.000      NA     NA    1.000    1.000
10  x1  ~~  x2   0.317 0.070   4.534  0.000    0.180    0.455
11  x1  ~~  x3   0.508 0.060   8.484  0.000    0.391    0.625
12  x1  ~~  x4   0.373 0.060   6.181  0.000    0.255    0.491
13  x1  ~~  x5   0.308 0.068   4.549  0.000    0.175    0.441

ポリコリック相関、すべての結果

fit.un <- lavCor(HS9ord, ordered=names(HS9ord), se = "standard",
                 output = "fit")
summary(fit.un)