Trợ giúp với mô hình SEM (OpenMx, polycor)


10

Tôi có rất nhiều vấn đề với một bộ dữ liệu mà tôi đang cố gắng áp dụng SEM.

Chúng tôi cho rằng sự tồn tại của 5 yếu tố tiềm ẩn A, B, C, D, E, với các chỉ số tương ứng. A1 đến A5 (các yếu tố theo thứ tự), B1 đến B3 (định lượng), C1, D1, E1 (tất cả ba yếu tố được đặt hàng cuối cùng, chỉ có 2 cấp độ cho E1. Chúng tôi quan tâm đến hiệp phương sai giữa tất cả các yếu tố.

Tôi đã cố gắng sử dụng OpenMxđể làm như vậy. Dưới đây là một vài nỗ lực của tôi:

  • Trước tiên tôi đã thử sử dụng ma trận ngưỡng cho tất cả các yếu tố được đặt hàng, nhưng sự hội tụ không thành công.

  • Tôi đã quyết định sử dụng các tương quan đa âm / đa hình thay vì dữ liệu thô, với chức năng hetcortừ thư viện polycor(tôi dự định khởi động lại mẫu để có được khoảng tin cậy). Nó cũng không hội tụ!

  • Tôi đã cố gắng hạn chế cho các cá nhân có dữ liệu đầy đủ, nó cũng thất bại!

Câu hỏi đầu tiên của tôi là: có cách nào tự nhiên để diễn giải những thất bại này không?

Câu hỏi thứ hai của tôi là: tôi nên làm gì ???

Chỉnh sửa: đối với những độc giả tương lai có thể gặp phải vấn đề tương tự , sau khi xem qua mã của các hàm trong polycor... giải pháp chỉ đơn giản là sử dụng hetcor()với tùy chọn std.err=FALSE. Điều này đưa ra ước tính rất giống với những StasK đã đưa ra. Bây giờ tôi thiếu thời gian để hiểu rõ hơn những gì đang diễn ra ở đây! Các câu hỏi dưới đây đã được StasK trả lời khá tốt.

Tôi có các câu hỏi khác, nhưng trước đây, đây là một url với tệp RData chứa khung dữ liệu L1chỉ chứa dữ liệu đầy đủ: data_sem.RData

Dưới đây là một vài dòng mã cho thấy sự thất bại của 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

Nhưng tôi vẫn có thể tính toán một mối tương quan hoặc ma trận hiệp phương sai theo cách rất bẩn, coi các yếu tố được sắp xếp của tôi là các biến định lượng:

> Cor0 <- cor(data.frame(lapply(L1, as.numeric)))

Đây là một đoạn OpenMxmã cùng với câu hỏi tiếp theo của tôi: mô hình sau có đúng không? Không có quá nhiều thông số miễn phí?

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])
       );

Và một câu hỏi cuối cùng. Với mô hình này (hãy quên một chút cách tính ma trận tương quan không phù hợp), tôi chạy OpenMx:

> mxRun(model1) -> fit1
Running untitled1 
> summary(fit1)

Trong số các bản tóm tắt, điều này:

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 

Sự phù hợp có vẻ rất xấu, mặc dù số lượng lớn các tham số. Điều đó nghĩa là gì? Điều đó có nghĩa là chúng ta nên thêm hiệp phương sai giữa các biến số?

Rất cám ơn trước tất cả các câu trả lời của bạn, tôi đang dần trở nên điên rồ ...

Câu trả lời:


10

Bạn phải phát hiện ra một lỗi trong polycorđó, mà bạn muốn báo cáo với John Fox. Mọi thứ chạy tốt trong Stata bằng polychoricgói của tôi :

    . 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

Đối với các biến tiềm ẩn được đo bằng một chỉ số duy nhất ( C, D, E), bạn cần phải sửa chữa phương sai của các chỉ số trong phiên bản liên tục của nó, vì nếu không quy mô của các biến tiềm ẩn không được xác định. Cho rằng với các phản hồi nhị phân / thứ tự, dù sao nó cũng được sửa thành 1 với các liên kết loại probit (thứ tự), điều đó có thể có nghĩa là bạn sẽ phải đưa ra giả thuyết rằng độ trễ của bạn tương đương với chỉ báo được quan sát hoặc bạn phải đặt ra mức tải chuẩn hóa . Điều này về cơ bản làm cho mô hình của bạn tương đương với mô hình CFA nơi bạn có các yếu tố tiềm ẩn A và B được đo tương ứng với {A1-A5, C1, D1, E1} và {B1-B3, C1, D1, E1}.


Rất cám ơn đã dành thời gian để thử điều này! Vì vậy: có ai có một giải pháp thay thế để đề xuất tính toán các mối tương quan này trong R không?
Elvis

Về các yếu tố, tôi đã ý thức được một cái gì đó đang ẩn giấu trong đó - nhưng tôi không chắc là tôi hoàn toàn hiểu được. Trong những gì tôi đã viết, tôi có các mối quan hệ như - ngoại trừ việc này thực tế là một polytomy của điều này. Ngay cả khi nó không phải là thứ tự, nhưng định lượng, vì tôi chỉ đưa ra các mối tương quan (thậm chí không phải là hiệp phương sai) Tôi không hiểu làm thế nào có thể lấy được thang đo của . Ý tôi không chỉ là phương sai của , mà còn là giá trị của . Tuy nhiên, sửa chữa nó làm cho phù hợp tồi tệ hơn! Tôi hiểu mọi thứ tốt hơn khi chúng tôi phù hợp với dữ liệu thô, nhưng tiếc là điều này không thành công ...Ai=αiA+ϵAiAiϵαi
Elvis

Đối với các yếu tố với một chỉ báo duy nhất, mọi thứ chỉ là tồi tệ nhất ...! Trong thực tế C1, D1, E1 là tổng của một số biến; chúng giống như thế này khi tôi được cung cấp dữ liệu, tôi yêu cầu toàn bộ dữ liệu vì tôi nghĩ nó tốt hơn nhưng đến một lúc nào đó tôi lại quay trở lại các khoản tiền vì không có gì hoạt động tốt ... Nếu tôi có thể tìm cách tính toán những tương quan này với R Tôi sẽ sử dụng bộ dữ liệu đầy đủ.
Elvis

Được rồi, bây giờ tôi nghĩ nó tốt hơn tôi nghĩ rằng tôi nhận được nó.
Elvis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.