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


10

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 

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

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

답변:


10

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 모델과 동일합니다.


이것을 시도해 주셔서 감사합니다! 그래서 : R에서 이러한 상관 관계를 계산하기 위해 제안 할 대안이 있습니까?
Elvis

그 요인에 관해, 나는 저음에 숨어있는 무언가를 의식하고 있었지만 아직 완전히 이해하지 못했습니다. 필자가 쓴 내용에는 과 같은 관계가 있습니다. 단,이 는 실제로이 다항식입니다. 비록 서수는 아니지만 정량적 인 경우에도 상관 관계 (공분산조차는 아님) 만 제공하므로 의 척도를 검색 하는 방법을 알 수 없습니다. 의 분산 뿐만 아니라 의 값도 의미합니다 . 그러나 그것을 고정하면 착용감이 악화됩니다! 원시 데이터에 맞으면 더 잘 이해하지만 불행히도 실패합니다 ...A i A i ϵ α i나는=α나는+ϵ나는나는ϵα나는
Elvis

단일 지표가있는 요인의 경우 상황이 최악입니다 ...! 실제로 C1, D1, E1은 여러 변수의 합입니다. 그들은 데이터를 제공 받았을 때 이와 같았으며, 바람직하다고 생각한 전체 데이터 세트를 요청했지만 어느 시점에서 아무것도 잘 작동하지 않아 합계로 다시 전환했습니다 ... 계산 방법을 찾을 수 있다면 RI와의 이러한 상관 관계는 전체 데이터 세트를 사용합니다.
Elvis

좋아, 이제는 나아 졌다고 생각합니다.
Elvis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.