Tengo muchos problemas con un conjunto de datos al que estoy tratando de aplicar SEM.
Suponemos la existencia de 5 factores latentes A, B, C, D, E, con indicadores resp. A1 a A5 (factores ordenados), B1 a B3 (cuantitativo), C1, D1, E1 (los tres últimos factores ordenados, con solo 2 niveles para E1. Estamos interesados en las covarianzas entre todos los factores.
Traté de usar OpenMx
para hacerlo. Estos son algunos de mis intentos:
Primero intenté usar matrices de umbrales para todos los factores ordenados, pero la convergencia falló.
Decidí usar correlaciones policóricas / poliséricas en lugar de datos sin procesar, con la función
hetcor
de la bibliotecapolycor
( planeé arrancar la muestra para obtener intervalos de confianza). ¡Tampoco converge!Traté de restringir a las personas con datos completos, ¡también falla!
Mi primera pregunta es: ¿hay una forma natural de interpretar estos fracasos?
Mi segunda pregunta es: ¿qué debo hacer?
Editar: para futuros lectores que puedan encontrar el mismo problema , después de revisar el código de las funciones en polycor
... la solución es simplemente usar hetcor()
con la opción std.err=FALSE
. Esto da estimaciones muy similares a las que dio StasK. ¡Ahora me falta tiempo para comprender mejor lo que está sucediendo aquí! StasK ha respondido bastante bien a las siguientes preguntas.
Tengo otras preguntas, pero antes que nada, aquí hay una url con un archivo RData que contiene un marco de datos que L1
contiene solo los datos completos: data_sem.RData
Aquí algunas líneas de códigos que muestran la falla de 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
Pero aún puedo calcular una correlación o una matriz de covarianza de una manera muy sucia, considerando mis factores ordenados como variables cuantitativas:
> Cor0 <- cor(data.frame(lapply(L1, as.numeric)))
Aquí hay un OpenMx
código junto con mi siguiente pregunta: ¿es correcto el siguiente modelo? ¿No hay demasiados parámetros libres?
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])
);
Y una última pregunta. Con este modelo (olvidemos por un momento la forma inapropiada en que se calcula la matriz de correlación), ejecuto OpenMx:
> mxRun(model1) -> fit1
Running untitled1
> summary(fit1)
entre el resumen, esto:
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
El ajuste parece muy malo, a pesar de la gran cantidad de parámetros. Qué significa eso? ¿Eso significa que deberíamos agregar covarianzas entre variables manifiestas?
Muchas gracias de antemano por todas sus respuestas, poco a poco me estoy volviendo loco ...
fuente