SEM modelleme konusunda yardım (OpenMx, polycor)


10

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 OpenMxyapmak 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.

  • hetcorKütüphanedeki fonksiyonla ham veri yerine polikrik / polisiyal korelasyonları kullanmaya karar verdim polycor(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, L1sadece 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 OpenMxsonraki 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 ...

Yanıtlar:


10

polycorJohn Fox'a bildirmek istediğiniz bir hatayı ortaya çıkarmış olmalısınız . Her şey benim polychoricpaketi kullanarak Stata iyi çalışır :

    . polychoric *

    Polychoric correlation matrix

               A1          A2          A3          A4          A5          B1          B2          B3          C1          D1          E1
   A1           1
   A2   .34544812           1
   A3   .39920225   .19641726           1
   A4   .09468652   .04343741   .31995685           1
   A5   .30728339   -.0600463   .24367634   .18099061           1
   B1   .01998441  -.29765985   .13740987   .21810968   .14069473           1
   B2  -.19808738   .17745687  -.29049459  -.21054867   .02824307  -.57600551          1
   B3   .17807109  -.18042045   .44605383   .40447746   .18369998   .49883132  -.50906364           1
   C1  -.35973454  -.33099295  -.19920454  -.14631621  -.36058235   .00066762  -.05129489  -.11907687           1
   D1   -.3934594  -.21234022  -.39764587  -.30230591  -.04982743  -.09899428   .14494953   -.5400759   .05427906           1
   E1  -.13284936   .17703745  -.30631236  -.23069382  -.49212315  -.26670382   .24678619  -.47247566    .2956692   .28645516           1

Tek göstergeli ölçülür gizli değişkenler için ( C, D, E), aksi takdirde gizli değişkenin ölçeği tespit edilemezse, ondan sürekli sürümünde göstergenin varyansını düzeltmek gerekir. İkili / sıralı yanıtlarla, yine de (sıralı) probit tipi bağlantılar ile 1'e sabitlendiğinden, muhtemelen latentinizin gözlenen göstergeye eşdeğer olduğunu varsaymanız veya standartlaştırılmış yüklemeyi varsaymanız gerektiği anlamına gelir. . Bu esas olarak modelinizi, sırasıyla {A1-A5, C1, D1, E1} ve {B1-B3, C1, D1, E1} ile ölçülen gizli faktörler A ve B'ye sahip olduğunuz bir CFA modeline eşdeğer hale getirir.


Bunu denemek için zaman ayırdığınız için çok teşekkürler! Öyleyse: R'de bu korelasyonları hesaplamak için önerilecek bir alternatif var mı?
Elvis

Ai=αiA+ϵAiAiϵαi
Elvis

Tek bir göstergeye sahip faktörler için işler sadece en kötü ...! Aslında C1, D1, E1 çeşitli değişkenlerin toplamıdır; veri sağlandığım zaman böyleydiler, tercih edildiğini düşündüğüm gibi tüm veri setini istedim ama hiçbir şey iyi çalışmadığı için bir noktada toplamlara geri döndüm ... Eğer hesaplamanın bir yolunu bulabilirsem R ile bu korelasyonları tam veri setini kullanacağım.
Elvis

Tamam, şimdi daha iyi olduğunu düşündüğüm için anladım.
Elvis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.