Estou com muitos problemas com um conjunto de dados ao qual estou tentando aplicar o SEM.
Supomos a existência de 5 fatores latentes A, B, C, D, E, com indicadores resp. A1 a A5 (fatores ordenados), B1 a B3 (quantitativo), C1, D1, E1 (todos os três últimos fatores ordenados, com apenas 2 níveis para E1. Estamos interessados em covariâncias entre todos os fatores.
Eu tentei usar OpenMx
para fazer isso. Aqui estão algumas das minhas tentativas:
Tentei primeiro usar matrizes de limiares para todos os fatores ordenados, mas a convergência falhou.
Decidi usar correlações policóricas / polisseriais em vez de dados brutos, com a função
hetcor
da bibliotecapolycor
(planejei inicializar a amostra para obter intervalos de confiança). Também não converge!Tentei restringir a indivíduos com dados completos, mas também falhou!
Minha primeira pergunta é: existe uma maneira natural de interpretar essas falhas?
Minha segunda pergunta é: o que devo fazer ???
Edit: para futuros leitores que pode encontrar o mesmo problema , depois de passar pelo código das funções em polycor
... a solução é simplesmente para uso hetcor()
com a opção std.err=FALSE
. Isso fornece estimativas muito semelhantes às que o StasK forneceu. Agora não tenho tempo para entender melhor o que está acontecendo aqui! As perguntas abaixo foram muito bem respondidas pelo StasK.
Tenho outras perguntas, mas antes de qualquer coisa, aqui está um URL com um arquivo RData que contém um quadro de dados que L1
contém apenas os dados completos: data_sem.RData
Aqui estão algumas linhas de códigos mostrando a falha do 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
Mas ainda posso calcular uma matriz de correlação ou covariância de uma maneira muito suja, considerando meus fatores ordenados como variáveis quantitativas:
> Cor0 <- cor(data.frame(lapply(L1, as.numeric)))
Aqui está um trecho de OpenMx
código junto à minha próxima pergunta: o modelo a seguir está correto? Não há muitos parâmetros livres?
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 uma última pergunta. Com este modelo (vamos esquecer por um momento a maneira inadequada de calcular a matriz de correlação), eu corro o OpenMx:
> mxRun(model1) -> fit1
Running untitled1
> summary(fit1)
Entre o resumo, este:
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
O ajuste parece muito ruim, apesar do grande número de parâmetros. O que isso significa? Isso significa que devemos adicionar covariâncias entre variáveis manifestas?
Muito obrigado antecipadamente por todas as suas respostas, estou lentamente ficando louco ...
fonte