SEMモデリングのサポート(OpenMx、polycor)


10

SEMを適用しようとしている1つのデータセットに多くの問題があります。

5つの潜在因子A、B、C、D、Eが存在し、指標がそれぞれ存在するとします。A1からA5(順序付けられた因子)、B1からB3(定量的)、C1、D1、E1(最後の3つの順序付けされた因子すべて、E1のレベルは2つのみ。すべての因子間の共分散に関心があります。

使用OpenMxしてみました。ここに私の試みのいくつかがあります:

  • 最初にすべての順序付けされた要素にしきい値行列を使用しようとしましたが、収束は失敗しました。

  • hetcorライブラリの関数を使用して、生データの代わりにポリコリック/ポリシリアル相関を使用することにしましたpolycor(信頼区間を得るためにサンプルをブートストラップすることを計画していました)。また、収束に失敗します!

  • 私は完全なデータを持つ個人に制限しようとしました、それも失敗します!

私の最初の質問は次のとおりです。これらの失敗を解釈する自然な方法はありますか?

私の2番目の質問は次のとおりです。どうすればよいですか???

編集:同じ問題遭遇する可能性のある将来の読者のために、関数のコードを調べた後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

polycorJohn 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

単一の指標で測定されている潜在変数のために(CDE)、あなたはそれ以外の場合は、潜在変数の規模が特定されないよう、それの連続バージョンの指標の分散を修正する必要があります。バイナリ/オーディナルレスポンスでは、とにかく(オーディナリ)プロビットタイプのリンクで1に固定されるため、潜在が観測されたインジケーターと同等であると仮定する必要があるか、標準化された負荷を仮定する必要があることを意味します。これにより、モデルは本質的にCFAモデルと同等になり、{A1-A5、C1、D1、E1}および{B1-B3、C1、D1、E1}でそれぞれ測定される潜在因子AおよびBがあります。


お時間を割いていただきありがとうございます。だから:Rでこれらの相関を計算するために提案する代替案はありますか?
Elvis

Ai=αiA+ϵAiAiϵαi
Elvis

指標が1つしかない要因は最悪です...!実際、C1、D1、E1はいくつかの変数の合計です。データが提供されたとき、彼らはこのようなものでした、私はそれが望ましいと思ったのでデータセット全体を求めましたが、何もうまく機能していなかったので、ある時点で合計に戻しました... Rとのこれらの相関関係完全なデータセットを使用します。
Elvis

さて、私はそれがより良いと思うので、私はそれを得ると思います。
Elvis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.