ラヴァンの因子スコアを予測する方法


7

でCFAを実行するLavaan場合、元のデータで負の分散などのエラーが発生したため、共分散行列を入力として使用する必要がありました。

通常、predict()関数を使用して因子スコアを予測しますが、lavPredict関数は同じですが、共分散行列を使用しているため、これを直接実行することはできません。

CFAからの情報を使用して、それと同じ方法で因子スコアを計算する方法Lavaanはありますか?このpredict()関数は回帰の方法を使用して因子スコアを計算すると思います。

これは、生データを入力として使用して因子スコアを生成するサンプルコードです。この方法を使用すると、差異の1つでエラーが発生します。

library(lavaan)

model1 = '
Latent1 =~ X1 + X2
Latent2 =~ X3 + X4 + X5
Latent3 =~ X6 + X7
'

model1.fit = cfa(model1, data=mydata) #fit Lavaan model

predict(model1.fit) #Predict factor scores (method of regression)

これは、入力として共分散行列を使用して因子スコアを生成するコードです。ここにはエラーメッセージはありませんが、それらをリンクするデータがないため、因子スコアを生成できません。

cov = cor2cov(cor,std) #(using cor2cov function to create covariance matrix out of correlation table (cor) and standard deviations (std))

model2 = '
Latent1 =~ X1+ X2
Latent2 =~ X3 + X4 + X5
Latent3 =~ X6 + X7
'

model2.fit = cfa(model=model2, sample.cov=cov,sample.nobs=102,std.lv=FALSE)

ここから先に進み、LavaanのCFA分析の結果を使用して因子スコアを作成する方法は?


1
データでエラーが発生した場合は、共分散行列でエラーが発生するはずです(データが欠落しているか、ML以外のものを使用した場合を除く)。おそらくいくつかのコードが役立つでしょうか?
Jeremy Miles

1
ジェレミーこんにちは、必ずしもそうではありません。Lavaanの入力として共分散行列と標準偏差を使用しただけでは、いくつかのエラーは解消されます。事は、今、私が独立して回帰法は...私の現在のスキルセットを超えて使用して予測する()関数を使用し、因子得点を計算することができないということです
チャーリーGlez

画面の右側に、関連する質問がいくつか表示されます(例:stats.stackexchange.com/q/142285/3277)。それは役に立ちますか?
ttnphns

参考までに、生データの代わりに共分散テーブルを使用して、次のようなErin Buchanan CFA講義からより良いモデルを取得するというアイデアを思いつきました。youtube.com/… (6〜9分)
Charlie Glez

こんにちはttnphnsです。私はその答えを見ましたが、マトリックス応答は私の理解を超えています。もう1つは、「因子スコアはオブザーバブルの線形関数であるため、一度計算したら、lmを使用して、フィットスコアとオブザーバブル間の線形回帰を近似するだけです。」は、実際には適用されません。フィットしたスコアを計算できなかったので。
Charlie Glez

回答:


4

この質問は、最初に提起されて以来、多くの意見を得ていますが、回答はありません。この質問の将来の読者に役立つかもしれない解決策があります。

それが機能することを示すために、まずcfa()を使用してモデルを実行しHolzingerSwineford1939ます。モデルはlavaan チュートリアルページから取得されます

library(lavaan)
dat<-data.frame(HolzingerSwineford1939[,7:15])

mod<-'
visual=~x1+x2+x3
textual=~x4+x5+x6
speed=~x7+x8+x9
'

fit<-cfa(mod, data = dat)

これにより、次のソリューションが返されます。

> summary(fit)
lavaan (0.5-22) converged normally after  35 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|)
  visual =~                                           
    x1                1.000                           
    x2                0.554    0.100    5.554    0.000
    x3                0.729    0.109    6.685    0.000
  textual =~                                          
    x4                1.000                           
    x5                1.113    0.065   17.014    0.000
    x6                0.926    0.055   16.703    0.000
  speed =~                                            
    x7                1.000                           
    x8                1.180    0.165    7.152    0.000
    x9                1.082    0.151    7.155    0.000

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)
  visual ~~                                           
    textual           0.408    0.074    5.552    0.000
    speed             0.262    0.056    4.660    0.000
  textual ~~                                          
    speed             0.173    0.049    3.518    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .x1                0.549    0.114    4.833    0.000
   .x2                1.134    0.102   11.146    0.000
   .x3                0.844    0.091    9.317    0.000
   .x4                0.371    0.048    7.779    0.000
   .x5                0.446    0.058    7.642    0.000
   .x6                0.356    0.043    8.277    0.000
   .x7                0.799    0.081    9.823    0.000
   .x8                0.488    0.074    6.573    0.000
   .x9                0.566    0.071    8.003    0.000
    visual            0.809    0.145    5.564    0.000
    textual           0.979    0.112    8.737    0.000
    speed             0.384    0.086    4.451    0.000

入力のための生データを使用する場合lavPredict()predict()戻り、潜在変数の値を予測しました。

> head(lavPredict(fit))
          visual     textual       speed
[1,] -0.81767524 -0.13754501  0.06150726
[2,]  0.04951940 -1.01272402  0.62549360
[3,] -0.76139670 -1.87228634 -0.84057276
[4,]  0.41934153  0.01848569 -0.27133710
[5,] -0.41590481 -0.12225009  0.19432951
[6,]  0.02325632 -1.32981727  0.70885348

入力として共分散行列を使用して同じモデルを実行すると、同じ結果が返されますが、元のポスターノートでは、因子スコアを導出しようとするとエラーが発生します。

> COV<-cov(dat)
> fit1<-cfa(mod, sample.cov = COV, sample.nobs = 301, sample.mean = colMeans(dat))
> lavPredict(fit1)
Error in lavPredict(fit1) : 
  lavaan ERROR: sample statistics were used for fitting and newdata is empty

パッケージが必要とするのは、いわば「かみ砕く」ためのいくつかの生データなので、解決策はかなり単純です。ここで、元のデータセットを予測関数の生データ入力として識別するようにコードを修正します(lavPredict(fit1, newdata = dat))。これにより、次のものが返されます(これは、溶岩にフィットした同じモデルですが、入力として共分散行列を使用していることを覚えています)。

> head(lavPredict(fit1, newdata = dat))
          visual     textual       speed
[1,] -0.81767524 -0.13754501  0.06150726
[2,]  0.04951940 -1.01272402  0.62549360
[3,] -0.76139670 -1.87228634 -0.84057276
[4,]  0.41934153  0.01848569 -0.27133710
[5,] -0.41590481 -0.12225009  0.19432951
[6,]  0.02325632 -1.32981727  0.70885348

ご覧のとおり、結果は同じです。


ありがとう、マット。ただし、元の生データファイルなしでcovマトリックスのみを使用するとどうなりますか。
MehmetTüregün博士

あなたは共分散行列とすでにフィットした溶岩オブジェクト(および/またはモデル)を持っていると言っていますか?共分散またはモデルを生成する生データがないだけですか?
Matt Barstead、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.