Ho un sacco di problemi con un set di dati a cui sto cercando di applicare SEM.
Supponiamo che esistano 5 fattori latenti A, B, C, D, E, con indicatori resp. Da A1 a A5 (fattori ordinati), da B1 a B3 (quantitativo), C1, D1, E1 (tutti gli ultimi tre fattori ordinati, con solo 2 livelli per E1. Siamo interessati alle covarianze tra tutti i fattori.
Ho provato a usare OpenMx
per farlo. Ecco alcuni dei miei tentativi:
Prima ho provato a usare le matrici delle soglie per tutti i fattori ordinati, ma la convergenza non è riuscita.
Ho deciso di utilizzare le correlazioni policorico / poliseriale anziché i dati non elaborati , con la funzione
hetcor
della libreriapolycor
(avevo pianificato di avviare il campione per ottenere intervalli di confidenza). Inoltre non riesce a convergere!Ho cercato di limitarmi a persone con dati completi, fallisce anche!
La mia prima domanda è: esiste un modo naturale per interpretare questi fallimenti?
La mia seconda domanda è: cosa devo fare ???
Modifica: per i futuri lettori che potrebbero riscontrare lo stesso problema , dopo aver esaminato il codice delle funzioni in polycor
... la soluzione è semplicemente quella di utilizzare hetcor()
con l'opzione std.err=FALSE
. Ciò fornisce stime molto simili a quelle fornite da StasK. Non ho tempo per capire meglio cosa sta succedendo qui! StasK ha risposto abbastanza bene alle domande che seguono.
Ho altre domande, ma prima di tutto, ecco un URL con un file RData contenente un frame di dati L1
contenente solo i dati completi: data_sem.RData
Ecco alcune righe di codice che mostrano il fallimento di 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
Ma posso ancora calcolare una correlazione o una matrice di covarianza in modo molto sporco, considerando i miei fattori ordinati come variabili quantitative:
> Cor0 <- cor(data.frame(lapply(L1, as.numeric)))
Ecco un pezzo di OpenMx
codice insieme alla mia prossima domanda: il seguente modello è corretto? Non ci sono troppi parametri gratuiti?
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])
);
E un'ultima domanda. Con questo modello (dimentichiamo per un momento il modo inappropriato in cui viene calcolata la matrice di correlazione), eseguo OpenMx:
> mxRun(model1) -> fit1
Running untitled1
> summary(fit1)
tra i riassunti, questo:
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
La vestibilità sembra molto male, nonostante l'enorme numero di parametri. Cosa significa? Ciò significa che dovremmo aggiungere covarianze tra variabili manifest?
Molte grazie in anticipo per tutte le tue risposte, sto lentamente diventando pazzo ...