SEM'i uygulamaya çalıştığım bir veri kümesi ile ilgili çok fazla sorunum var.
5 göstergeli A, B, C, D, E gizli faktörlerinin varlığını varsayalım. A1 - A5 (sıralı faktörler), B1 - B3 (kantitatif), C1, D1, E1 (son üç sıralı faktörün tümü, yalnızca E1 için 2 seviye ile) Tüm faktörler arasındaki kovaryanslarla ilgileniyoruz.
Bunu OpenMx
yapmak için kullanmaya çalıştım . İşte bazı denemelerim:
İlk önce tüm sıralı faktörler için eşik matrisleri kullanmaya çalıştım, ancak yakınsama başarısız oldu.
hetcor
Kütüphanedeki fonksiyonla ham veri yerine polikrik / polisiyal korelasyonları kullanmaya karar verdimpolycor
(güven aralıklarını elde etmek için örneği önyüklemeyi planladım). Ayrıca yakınsama!Tam veriye sahip bireylerle kısıtlamaya çalıştım, o da başarısız oluyor!
İlk sorum şu: Bu hataları yorumlamanın doğal bir yolu var mı?
İkinci sorum: ne yapmalıyım ???
Düzenleme: aynı sorunla karşılaşacak gelecekteki okuyucular için, içinde fonksiyonların kodunu geçtikten sonra polycor
... çözüm sadece hetcor()
seçeneği ile kullanmaktır std.err=FALSE
. Bu, StasK'nin verdiklerine çok benzer tahminler verir. Burada neler olduğunu daha iyi anlamak için zamanım yok! Aşağıdaki sorular StasK tarafından oldukça iyi yanıtlanmıştır.
Başka sorularım var, ama her şeyden önce, L1
sadece tam verileri içeren bir veri çerçevesi içeren bir RData dosyası ile bir url : data_sem.RData
Burada hata kodunu gösteren birkaç kod satırı 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
Ama yine de sıralı faktörlerimi niceliksel değişkenler olarak kabul ederek bir korelasyonu veya kovaryans matrisini çok kirli bir şekilde hesaplayabilirim:
> Cor0 <- cor(data.frame(lapply(L1, as.numeric)))
İşte bir OpenMx
sonraki sorumla birlikte bir kod parçası : Aşağıdaki model doğru mu? Çok fazla serbest parametre yok mu?
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])
);
Ve son bir soru. Bu modelle (bir an için korelasyon matrisinin hesaplandığı uygunsuz yolu unutalım), OpenMx'i çalıştırıyorum:
> mxRun(model1) -> fit1
Running untitled1
> summary(fit1)
özet arasında, bu:
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
Çok sayıda parametreye rağmen uyum çok kötü görünüyor. Bu ne anlama geliyor? Bu, manifesto değişkenleri arasına kovaryans eklememiz gerektiği anlamına mı geliyor?
Tüm cevaplarınız için şimdiden çok teşekkürler, yavaş yavaş deliriyorum ...