Довідка з моделювання SEM (OpenMx, polycor)


10

У мене багато проблем з одним набором даних, до якого я намагаюся застосувати SEM.

Ми припускаємо існування 5 прихованих факторів A, B, C, D, E з показниками, відповідно. Від А1 до А5 (упорядковані фактори), від B1 до B3 (кількісні), C1, D1, E1 (всі три останні впорядковані фактори, лише 2 рівня для E1. Нас цікавлять коваріації між усіма чинниками.

Я намагався використати OpenMxдля цього. Ось кілька моїх спроб:

  • Я спершу спробував використати порогові матриці для всіх упорядкованих факторів, але конвергенція не вдалася.

  • Я вирішив використовувати поліхорні / полісеріальні кореляції замість необроблених даних з функцією hetcorбібліотеки polycor(я планував завантажувати зразок, щоб отримати інтервали довіри). Він також не вдається конвергувати!

  • Я намагався обмежити людей повними даними, це теж не вдається!

Перше моє запитання: чи існує природний спосіб інтерпретувати ці невдачі?

Друге моє запитання: що мені робити ???

Редагувати: для майбутніх читачів, які можуть зіткнутися з тією ж проблемою , переглянувши код функцій в polycor... рішення просто використовувати hetcor()з опцією std.err=FALSE. Це дає оцінки, дуже схожі на ті, що дав Стаск. Зараз мені не вистачає часу, щоб краще зрозуміти, що тут відбувається! На запитання нижче відповів 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 

Підгонка здається дуже поганою, незважаючи на величезну кількість параметрів. Що це означає? Чи означає це, що нам слід додати коваріації між маніфестовими змінними?

Заздалегідь дякую за всі ваші відповіді, я повільно стаю божевільним ...

Відповіді:


10

Ви, мабуть, виявили помилку polycor, про яку хочете повідомити Джона Фокса. У Stata все працює нормально, використовуючи мій polychoricпакет:

    . 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

Для прихованих змінних, які вимірюються за допомогою одного індикатора ( C, D, E), необхідно зафіксувати відхилення індикатора в безперервній версії цього, оскільки в іншому випадку масштаб прихованої змінної не визначено. Зважаючи на те, що з двійковими / порядковими відповідями це все одно закріплено на 1 з (порядковими) посиланнями типу пробіта, це, ймовірно, означає, що вам доведеться постулювати, що ваш латентний еквівалент спостережуваному показнику, або ви повинні постулювати стандартизоване завантаження . Це по суті робить вашу модель еквівалентною моделі CFA, де у вас є приховані коефіцієнти A і B, виміряні відповідно {A1-A5, C1, D1, E1} і {B1-B3, C1, D1, E1}.


Велике спасибі, що знайшли час, щоб спробувати це! Отже: чи має хто-небудь альтернативну пропозицію для обчислення цих кореляцій в R?
Елвіс

Ai=αiA+ϵAiAiϵαi
Елвіс

Для факторів, що мають єдиний показник, справи є найгіршими ...! Насправді C1, D1, E1 - це сума кількох змінних; вони були такими, коли мені були дані, я попросив весь набір даних, оскільки вважав, що це краще, але в якийсь момент я перейшов до сум, оскільки нічого не працює добре ... Якщо я можу знайти спосіб обчислити ці кореляції з R Я буду використовувати повний набір даних.
Елвіс

Гаразд, тепер, коли я думаю про це краще, я думаю, що я це отримаю.
Елвіс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.