Wie man Faktorwerte in Lavaan vorhersagt

7

Bei einem CFA in Lavaanmusste ich die Kovarianzmatrix als Eingabe verwenden, da ich einige Fehler mit den Originaldaten bekam, z. B. negative Varianzen.

Normalerweise hätte ich Faktorwerte mit der predict()Funktion vorhergesagt , lavPredictfunktioniert genauso, aber jetzt, wo ich die Kovarianzmatrix verwende, ist es nicht möglich, dies direkt zu tun.

Gibt es eine Möglichkeit, die Informationen aus dem CFA zu verwenden, um die Faktorwerte auf dieselbe Weise zu berechnen wie dies der LavaanFall ist? Ich glaube, die predict()Funktion verwendet die Regressionsmethode, um die Faktorwerte zu berechnen.

Dies ist ein Beispielcode zur Erzeugung von Faktorwerten mit Rohdaten als Eingabe. Mit dieser Methode erhalte ich eine Fehlermeldung in einer meiner Abweichungen:

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)

Dies ist der Code zum Erzeugen von Faktorwerten mit einer Kovarianzmatrix als Eingabe. Hier gibt es keine Fehlermeldungen, aber ich kann keine Faktorwerte erstellen, da keine Daten vorhanden sind, mit denen sie verknüpft werden können:

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)

Wie gehe ich von hier aus vor, um anhand der Ergebnisse Lavaander CFA-Analyse Faktor-Scores zu erstellen ?

Charlie Glez
quelle
1
Wenn Sie Fehler mit den Daten haben, sollten Sie Fehler mit der Kovarianzmatrix erhalten (es sei denn, Sie hatten fehlende Daten oder haben etwas anderes als ML verwendet). Vielleicht würde ein Code helfen?
Jeremy Miles
1
Hallo Jeremy, nicht unbedingt. Einige Fehler verschwinden, wenn Sie nur die Kovarianzmatrix und Standardabweichungen als Eingabe für Lavaan verwenden. Die Sache ist, dass ich jetzt die Funktion "vorhersagen ()" nicht verwenden kann und die unabhängige Berechnung der Faktorwerte mithilfe der Regressionsmethode meine derzeitigen Fähigkeiten
übersteigt
Auf der rechten Seite des Bildschirms werden einige verwandte Fragen angezeigt , z . B. stats.stackexchange.com/q/142285/3277 . Kann das helfen?
ttnphns
Nur zur Information, ich habe die Idee, die Kovarianztabelle anstelle der Rohdaten zu verwenden, um bessere Modelle aus Erin Buchanan CFA-Vorlesungen zu erhalten, wie diese: youtube.com/… (min 6 bis 9)
Charlie Glez
Hi ttnphns, nicht wirklich. Ich habe diese Antwort gesehen, aber die Matrixantwort ist jenseits meines Verständnisses. und die andere "Da die Faktorwerte eine lineare Funktion der Observablen sind, können Sie nach einmaliger Berechnung einfach lm verwenden, um eine lineare Regression zwischen den angepassten Werten und den Observablen anzupassen.", trifft nicht wirklich zu da ich keine angepassten Scores berechnen konnte.
Charlie Glez

Antworten:

4

Diese Frage hat seit ihrer ersten Beantwortung eine Reihe von Ansichten erhalten, aber keine Antworten. Hier ist eine Lösung, die für zukünftige Leser dieser Frage nützlich sein kann.

Um zu demonstrieren, dass es funktioniert, werde ich zuerst ein cfa()Modell mit dem ausführen HolzingerSwineford1939. Das Modell stammt aus der lavaan Tutorial-Seite .

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)

Dies gibt die folgende Lösung zurück:

> 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

Die , wenn Rohdaten für die Eingabe verwendet lavPredict()und predict()Rückkehr vorhergesagten Werte für die latenten Variablen.

> 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

Wenn Sie dasselbe Modell mit der Kovarianzmatrix als Eingabe ausführen, werden dieselben Ergebnisse zurückgegeben. Die ursprünglichen Poster-Notizen führen jedoch zu einem Fehler, wenn Sie versuchen, die Faktorwerte abzuleiten.

> 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

Die Lösung ist ziemlich einfach, da das Paket einige Rohdaten benötigt, um sozusagen "zu kauen". Hier ändern Sie den Code, um den Originaldatensatz als Rohdateneingabe für die Vorhersagefunktion ( lavPredict(fit1, newdata = dat)) zu identifizieren . Dies gibt Folgendes zurück (wobei das gleiche Modell wie in Lavaan verwendet wird, jedoch die Kovarianzmatrix als Eingabe verwendet wird).

> 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

Wie Sie sehen können, sind die Ergebnisse identisch.

Matt Barstead
quelle
Danke, Matt. Was passiert jedoch, wenn Sie nur die cov-Matrix ohne die ursprüngliche Rohdatendatei haben?
Mehmet Türegün Ph.D.
Wollen Sie damit sagen, dass Sie die Kovarianzmatrix und ein bereits angepasstes Lavaan-Objekt (und / oder Modell) haben? Sie haben einfach nicht die Rohdaten, die die Kovarianz oder das Modell erzeugen?
Matt Barstead