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
膨大な数のパラメーターにもかかわらず、適合は非常に悪いようです。どういう意味ですか?つまり、マニフェスト変数の間に共分散を追加する必要があるということですか?
あなたのすべての答えを事前に感謝します、私はゆっくりと気が狂っています...