ฉันมีปัญหามากมายกับชุดข้อมูลเดียวที่ฉันพยายามใช้ SEM
เราสมมติว่ามีปัจจัยแฝง 5 ตัวคือ A, B, C, D, E พร้อมด้วยตัวชี้วัด A1 ถึง A5 (ปัจจัยที่สั่ง), B1 ถึง B3 (เชิงปริมาณ), C1, D1, E1 (ทั้งหมดสามปัจจัยสุดท้ายที่สั่งโดยมีเพียง 2 ระดับสำหรับ E1 เรามีความสนใจในความแปรปรวนร่วมระหว่างปัจจัยทั้งหมด
ฉันพยายามที่จะใช้OpenMx
เพื่อทำเช่นนั้น นี่คือความพยายามของฉัน:
ฉันก่อนพยายามใช้การฝึกอบรมขีด จำกัด สำหรับปัจจัยที่สั่งทั้งหมด แต่การบรรจบล้มเหลว
ฉันตัดสินใจที่จะใช้ความสัมพันธ์แบบ polychoric / polyserial แทนข้อมูลดิบด้วยฟังก์ชั่น
hetcor
จากห้องสมุดpolycor
(ฉันวางแผนที่จะบูตตัวอย่างเพื่อรับช่วงความมั่นใจ) มันก็ล้มเหลวที่จะมาบรรจบกัน!ฉันพยายาม จำกัด เฉพาะบุคคลที่มีข้อมูลครบถ้วน แต่ก็ล้มเหลวด้วย!
คำถามแรกของฉันคือ: มีวิธีธรรมชาติในการตีความความล้มเหลวเหล่านี้?
คำถามที่สองของฉันคือฉันควรทำอย่างไร ???
แก้ไข: สำหรับผู้อ่านในอนาคตที่อาจพบปัญหาเดียวกันหลังจากที่ไปถึงรหัสของฟังก์ชั่นในการpolycor
... การแก้ปัญหาเป็นเพียงการใช้งานที่มีตัวเลือกhetcor()
std.err=FALSE
สิ่งนี้ให้การประมาณการที่คล้ายกันมากกับ StasK ที่ให้ไว้ ตอนนี้ฉันไม่มีเวลาพอที่จะเข้าใจสิ่งที่เกิดขึ้นที่นี่! คำถามด้านล่างได้รับคำตอบที่ค่อนข้างดีจาก StasK
ฉันมีคำถามอื่น ๆ แต่ก่อนหน้านี้นี่คือ URL ที่มีไฟล์ RData ที่มีกรอบข้อมูลL1
ที่มีเฉพาะข้อมูลที่ครบถ้วน: data_sem.RData
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
แต่ฉันยังสามารถคำนวณสหสัมพันธ์หรือเมทริกซ์ความแปรปรวนร่วมได้ในวิธีที่สกปรกมากโดยพิจารณาจากปัจจัยที่ฉันสั่งเป็นตัวแปรเชิงปริมาณ:
> Cor0 <- cor(data.frame(lapply(L1, as.numeric)))
นี่คือส่วนหนึ่งของOpenMx
รหัสพร้อมกับคำถามถัดไปของฉัน: รุ่นต่อไปนี้ถูกต้องหรือไม่ ไม่ใช่พารามิเตอร์ฟรีมากเกินไปใช่ไหม
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])
);
และหนึ่งคำถามสุดท้าย ด้วยโมเดลนี้ (ลองลืมช่วงเวลาที่วิธีที่ไม่เหมาะสมในการคำนวณเมทริกซ์ความสัมพันธ์) ฉันใช้ OpenMx:
> mxRun(model1) -> fit1
Running untitled1
> summary(fit1)
ในการสรุปนี้:
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
พอดีดูเหมือนไม่ดีมากแม้จะมีพารามิเตอร์จำนวนมาก นั่นหมายความว่าอย่างไร? นั่นหมายความว่าเราควรเพิ่มความแปรปรวนร่วมระหว่างตัวแปรรายการ?
ขอบคุณมากล่วงหน้าสำหรับคำตอบทั้งหมดของคุณฉันช้ากลายเป็นบ้า ...