Saya punya banyak masalah dengan satu set data yang saya coba terapkan SEM.
Kami menduga keberadaan 5 faktor laten A, B, C, D, E, dengan indikator resp. A1 to A5 (faktor yang dipesan), B1 ke B3 (kuantitatif), C1, D1, E1 (semua tiga faktor terakhir, dengan hanya 2 level untuk E1. Kami tertarik pada kovarian antara semua faktor.
Saya mencoba menggunakannya OpenMx
untuk melakukannya. Inilah beberapa upaya saya:
Saya pertama kali mencoba menggunakan matriks ambang untuk semua faktor yang dipesan, tetapi konvergensi gagal.
Saya memutuskan untuk menggunakan korelasi polychoric / polyserial daripada data mentah, dengan fungsi
hetcor
dari perpustakaanpolycor
(saya berencana untuk bootstrap sampel untuk mendapatkan interval kepercayaan). Itu juga gagal untuk bertemu!Saya mencoba membatasi untuk individu dengan data lengkap, gagal juga!
Pertanyaan pertama saya adalah: adakah cara alami untuk menafsirkan kegagalan ini?
Pertanyaan kedua saya adalah: apa yang harus saya lakukan ???
Sunting: untuk pembaca masa depan yang mungkin mengalami masalah yang sama , setelah melalui kode fungsi di polycor
... solusinya adalah dengan menggunakan hetcor()
opsi tersebut std.err=FALSE
. Ini memberikan perkiraan yang sangat mirip dengan yang diberikan StasK. Saya tidak punya waktu sekarang untuk memahami lebih baik apa yang terjadi di sini! Pertanyaan-pertanyaan di bawah ini telah dijawab dengan cukup baik oleh StasK.
Saya punya pertanyaan lain, tetapi sebelum apa pun, berikut adalah url dengan file RData yang berisi bingkai data L1
yang hanya berisi data lengkap: data_sem.RData
Berikut beberapa baris kode yang menunjukkan kegagalan 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
Tapi saya masih bisa menghitung korelasi atau matriks kovarian dengan cara yang sangat kotor, mengingat faktor-faktor yang saya pesan sebagai variabel kuantitatif:
> Cor0 <- cor(data.frame(lapply(L1, as.numeric)))
Berikut adalah sepotong OpenMx
kode bersama dengan pertanyaan saya berikutnya: apakah model berikut ini benar? Tidak terlalu banyak parameter gratis?
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])
);
Dan satu pertanyaan terakhir. Dengan model ini (mari kita lupakan sejenak cara yang tidak tepat matriks korelasi dihitung), saya menjalankan OpenMx:
> mxRun(model1) -> fit1
Running untitled1
> summary(fit1)
di antara ringkasan, ini:
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
Kelihatannya sangat buruk, meskipun sejumlah besar parameter. Apa artinya? Apakah itu berarti bahwa kita harus menambahkan kovarian antara variabel manifes?
Terima kasih banyak sebelumnya atas semua jawaban Anda, saya perlahan menjadi gila ...
sumber