Ich habe viele Probleme mit einem Datensatz, auf den ich SEM anwenden möchte.
Wir nehmen die Existenz von 5 latenten Faktoren A, B, C, D, E mit Indikatoren bzw. A1 bis A5 (geordnete Faktoren), B1 bis B3 (quantitativ), C1, D1, E1 (alle letzten drei geordneten Faktoren mit nur 2 Ebenen für E1. Wir sind an Kovarianzen zwischen allen Faktoren interessiert.
Ich habe versucht, dies OpenMx
zu tun. Hier sind einige meiner Versuche:
Ich habe zuerst versucht, Schwellenwertmatrizen für alle geordneten Faktoren zu verwenden, aber die Konvergenz ist fehlgeschlagen.
Ich entschied mich, polychrone / polyserielle Korrelationen anstelle von Rohdaten mit der Funktion
hetcor
aus der Bibliothek zu verwendenpolycor
(ich plante, das Beispiel zu booten , um Konfidenzintervalle zu erhalten). Es konvergiert auch nicht!Ich habe versucht, mich auf Personen mit vollständigen Daten zu beschränken, es schlägt auch fehl!
Meine erste Frage lautet: Gibt es eine natürliche Möglichkeit, diese Fehler zu interpretieren?
Meine zweite Frage ist: Was soll ich tun ???
Bearbeiten: Für zukünftige Leser, die möglicherweise auf dasselbe Problem stoßen , nachdem sie den Code der Funktionen in polycor
... durchgearbeitet haben, besteht die Lösung einfach darin, sie hetcor()
mit der Option zu verwenden std.err=FALSE
. Dies ergibt Schätzungen, die denen von StasK sehr ähnlich sind. Mir fehlt jetzt die Zeit, besser zu verstehen, was hier los ist! Die folgenden Fragen wurden von StasK ziemlich gut beantwortet.
Ich habe andere Fragen, aber vor allem ist hier eine URL mit einer RData-Datei, die einen Datenrahmen enthält L1
, der nur die vollständigen Daten enthält: data_sem.RData
Hier einige Codezeilen, die den Ausfall von anzeigen hetcor
.
> require("OpenMx")
> require("polycor")
> load("data_sem.RData")
> hetcor(L1)
Erreur dans cut.default(scale(x), c(-Inf, row.cuts, Inf)) :
'breaks' are not unique
De plus : Il y a eu 11 avis (utilisez warnings() pour les visionner)
> head(L1)
A1 A2 A3 A4 A5 B1 B2 B3 C1 D1 E1
1 4 5 4 5 7 -0.82759 0.01884 -3.34641 4 6 1
4 7 5 0 4 6 -0.18103 0.14364 0.35730 0 1 0
7 7 5 7 6 9 -0.61207 -0.18914 0.13943 0 0 0
10 5 5 10 7 3 -1.47414 0.10204 0.13943 2 0 0
11 7 5 8 9 9 -0.61207 0.06044 -0.73203 0 2 0
12 5 5 9 10 5 0.25000 -0.52192 1.44662 0 0 0
Aber ich kann immer noch eine Korrelation oder eine Kovarianzmatrix auf sehr schmutzige Weise berechnen, wenn ich meine geordneten Faktoren als quantitative Variablen betrachte:
> Cor0 <- cor(data.frame(lapply(L1, as.numeric)))
Hier ist ein Teil des OpenMx
Codes zusammen mit meiner nächsten Frage: Ist das folgende Modell korrekt? Nicht zu viele freie Parameter?
manif <- c("A1","A2","A3","A4","A5", "B1","B2","B3", "C1", "D1", "E1");
model1 <- mxModel(type="RAM",
manifestVars=manif, latentVars=c("A","B","C","D","E"),
# factor variance
mxPath(from=c("A","B","C","D","E"), arrows=2, free=FALSE, values = 1),
# factor covariance
mxPath(from="A", to="B", arrows=2, values=0.5),
mxPath(from="A", to="C", arrows=2, values=0.5),
mxPath(from="A", to="D", arrows=2, values=0.5),
mxPath(from="A", to="E", arrows=2, values=0.5),
mxPath(from="B", to="C", arrows=2, values=0.5),
mxPath(from="B", to="D", arrows=2, values=0.5),
mxPath(from="B", to="E", arrows=2, values=0.5),
mxPath(from="C", to="D", arrows=2, values=0.5),
mxPath(from="C", to="E", arrows=2, values=0.5),
mxPath(from="D", to="E", arrows=2, values=0.5),
# factors → manifest vars
mxPath(from="A", to=c("A1","A2","A3","A4","A5"), free=TRUE, values=1),
mxPath(from="B", to=c("B1","B2","B3"), free=TRUE, values=1),
mxPath(from="C", to=c("C1"), free=TRUE, values=1),
mxPath(from="D", to=c("D1"), free=TRUE, values=1),
mxPath(from="E", to=c("E1"), free=TRUE, values=1),
# error terms
mxPath(from=manif, arrows=2, values=1, free=TRUE),
# data
mxData(Cor0, type="cor",numObs=dim(L1)[1])
);
Und noch eine letzte Frage. Mit diesem Modell (vergessen wir für einen Moment die unangemessene Art und Weise, wie die Korrelationsmatrix berechnet wird) führe ich OpenMx aus:
> mxRun(model1) -> fit1
Running untitled1
> summary(fit1)
in der Zusammenfassung ist dies:
observed statistics: 55
estimated parameters: 32
degrees of freedom: 23
-2 log likelihood: 543.5287
saturated -2 log likelihood: 476.945
number of observations: 62
chi-square: 66.58374
p: 4.048787e-06
Die Passform scheint trotz der Vielzahl von Parametern sehr schlecht zu sein. Was bedeutet das? Bedeutet das, dass wir Kovarianzen zwischen Manifestvariablen hinzufügen sollten?
Vielen Dank im Voraus für all Ihre Antworten, ich werde langsam verrückt ...
quelle