SEM 모델링 관련 도움말 (OpenMx, polycor)

SEM을 적용하려는 하나의 데이터 세트에 많은 문제가 있습니다.

우리는 지표가 각각 5 가지 잠재 요인 A, B, C, D, E의 존재를 가정합니다. A1-A5 (순서 계수), B1-B3 (정량적), C1, D1, E1 (E1에 대해 2 단계 만 포함 된 마지막 세 가지 요인 모두) 모든 요소 사이의 공분산에 관심이 있습니다.

나는 OpenMx그렇게 하려고 노력했다 . 몇 가지 시도는 다음과 같습니다.

  • 먼저 모든 정렬 된 요소에 임계 값 행렬을 사용하려고했지만 수렴에 실패했습니다.

  • hetcor라이브러리 의 함수 를 사용하여 원시 데이터 대신 다항식 / 다항식 상관 관계를 사용하기로 결정했습니다 polycor(신뢰 구간을 얻기 위해 샘플을 부트 스트랩하려고 계획했습니다). 또한 수렴하지 않습니다!

  • 완전한 데이터를 가진 개인으로 제한하려고 시도했지만 실패했습니다!

첫 번째 질문은 : 이러한 실패를 해석하는 자연스러운 방법이 있습니까?

두 번째 질문은 어떻게해야합니까?

편집 : 함수의 코드를 거친 후 동일한 문제가 발생할 수있는 미래 독자를 위해polycor … 솔루션은 hetcor()옵션과 함께 사용 하는 것 std.err=FALSE입니다. 이것은 StasK가 제공 한 것과 매우 유사한 추정치를 제공합니다. 나는 지금 무슨 일이 일어나고 있는지 더 잘 이해할 시간이 없다! 아래 질문들은 StasK에 의해 꽤 잘 대답되었습니다.

다른 질문이 있지만 여기 L1에 완전한 데이터 만 포함 된 데이터 프레임이 포함 된 RData 파일이있는 URL이 있습니다 : 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 

많은 수의 매개 변수에도 불구하고 적합이 매우 나빠 보입니다. 그게 무슨 뜻이야? 이것이 매니페스트 변수 사이에 공분산을 추가해야한다는 것을 의미합니까?

모든 답변에 미리 감사드립니다. 천천히 미치게되고 있습니다 …



답변

polycor에서 John Fox에보고하려는 버그를 발견 했어야합니다 . 내 polychoric패키지를 사용하여 Stata에서 모든 것이 잘 실행됩니다 .

    . 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로 고정된다는 것을 의미합니다. 잠재 성이 관찰 된 지표와 동일하다고 가정해야하거나 표준화 된 하중을 가정해야합니다 . 이는 본질적으로 모델이 {A1-A5, C1, D1, E1} 및 {B1-B3, C1, D1, E1}으로 각각 측정 된 잠재 요인 A 및 B가있는 CFA 모델과 동일합니다.