节点与JAGS模型中的父节点不一致(R)

问题描述 投票:2回答:2

我是JAGS的新手,我正在尝试进行简单的逻辑回归。我的数据文件非常简单:响应是二进制的,我使用的一个预测器有三个级别。像这样:

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

虚拟编码

col2的水平是HLL, 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 I get

Error in jags.model(file = "model.txt", data = antPenList, n.chains = 3,  : 
Error in node y[1]
Node inconsistent with parents
r logistic-regression bayesian jags
2个回答
7
投票

dbern分布期望{0,1}而不是{1,2}的响应,因为它似乎已对其进行编码,因此您需要从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)设置一些与数据模糊一致的/ b / c / d的初始值(可能是使用R中的glm()拟合得到的)


-1
投票

我用它解决了

mu[i] <- 1/(1.000001+exp(-(a + b*HLL[i] + c*LHL[i] + d*LLL[i])))
© www.soinside.com 2019 - 2024. All rights reserved.