1. ホーム
  2. r

[解決済み] JAGSモデルで親と矛盾するノード (R)

2022-02-17 19:54:53

質問事項

JAGSを初めて使うのですが、簡単なロジスティック回帰を実行しようと思っています。私のデータファイルは非常にシンプルで、応答はバイナリで、私が使用している1つの予測変数は3つのレベルを持っています。このような感じです。

col1: 1 2 2 2 1 1 1 2 1 2 ... 
col2: HLL, HLL, LHL, LLL, LHL, HLL ...

ダミーコーディング

のレベルは col2HLL, LHL, LLL . ダミーコーディングして、こんな感じのデータフレームを作りました。

(intercept) HLL LHL LLL
1           1   0   0   1
2           1   0   0   1
4           1   0   0   1
5           1   0   1   0
6           1   0   1   0
7           1   0   0   1

データ一覧

私のデータファイル( myList ) では、次のようになる。

List of 5
$ y  : num [1:107881] 2 2 2 2 2 2 2 2 2 2 ...
$ N  : num 500
$ HLL: num [1:107881] 0 0 0 0 0 0 0 0 0 0 ...
$ LHL: num [1:107881] 0 0 0 1 1 0 0 0 0 1 ...
$ LLL: num [1:107881] 1 1 1 0 0 1 1 1 1 0 ...

を使っています。 N=500 というのも、フルデータフレームが巨大なので、それをテストしたいだけなのです。

モデル

cat(

    "model {
        for( i in 1 : N ){

            y[i] ~ dbern(mu[i])
            mu[i] <- 1/(1+exp(-(a + b*HLL[i] + c*LHL[i] + d*LLL[i])))
            }

            a ~ dnorm(0, 1.0e-12)
            b ~ dnorm(0, 1.0e-12)
            c ~ dnorm(0, 1.0e-12)
            d ~ dnorm(0, 1.0e-12)

            }", file = "model.txt"

)

実行中のモデル+エラー

model = jags.model(file = "model.txt", 
    data = myList,
    n.chains = 3, n.adapt = 500)

表示されるエラー

Error in jags.model(file = "model.txt", data = antPenList, n.chains = 3,  : 
Error in node y[1]
Node inconsistent with parents

解決方法は?

dbern分布は、あなたがコード化したように{1,2}ではなく{0,1}での応答を期待します。したがって、あなたのyの値から1を引く必要があります。

dbern は通常、他の応答値に対してエラーを出さないので、このエラーが出るのは少し不思議です(基本的に <0 = 0 と >1 = 1 にします)。このエラーはおそらく、レスポンスがすべて同じ値にフィットしていることに起因していると思われますが、それでも直らない場合は、次のことを試してみてください。

1) a/b/c/d のプリオールの精度を少し上げてみる - 10^12 の分散はかなり大きいです。

2) その代わりに

mu[i] <- 1/(1+exp(-(a + b*HLL[i] + c*LHL[i] + d*LLL[i])))

書くことができる。

logit(mu[i]) <- -(a + b*HLL[i] + c*LHL[i] + d*LLL[i])

また、JAGSがこれをGLMとして認識し、適切なサンプラーを起動するのに役立つかもしれません - glmモジュールをロードすることを忘れないでください。

3) a/b/c/dに、データと漠然とした整合性のある初期値を設定する(おそらくRのglm()でフィットして得られたものである)。