我试图用jags写一个模型。问题是我对jags语言真的很陌生。我有一个数据集,基本上是一个调查,有6个问题和一个预测变量。所有都是分类的,其中一些有3个可能的答案,其他有2个,(预测有3个可能的答案)。为了使用锯齿创建贝叶斯模型,我决定使用分类分布来为Y(可能性)和Dirichlet(先验)建模。
因为我在X和Y中都有缺失值。在编写了一个模型来包含和计算这些值之后,R给了我一个致命的错误,我不能运行模型。我在网上找不到任何这样的案例/模型的来源来尝试和复制模型到我的案例中。无论如何,下面我有我的模型,所以请如果你发现有什么奇怪的,请告诉我,所以我修复的问题,如果一切都与模型似乎很好,你知道是什么原因导致的错误,我也很高兴听到这个。
产品规格:- 操作系统:MacOS Intel Core i5 - R StudioR 4.1.2 - rjags版本:4-13
Model :
model {
# Likelihood
for (i in 1:209) {
FIN[i] ~ dcat(p[i,1:3])
logit(p[i,1]) <- alpha[1] + beta[1]*AGE[i] + beta[2]*SEX[i] + beta[3]*INC[i] + beta[4]*POL[i] + beta[5]*AREA[i] + beta[6]*STAT[i]
logit(p[i,2]) <- alpha[2] + beta[1]*AGE[i] + beta[2]*SEX[i] + beta[3]*INC[i] + beta[4]*POL[i] + beta[5]*AREA[i] + beta[6]*STAT[i]
logit(p[i,3]) <- alpha[3] + beta[1]*AGE[i] + beta[2]*SEX[i] + beta[3]*INC[i] + beta[4]*POL[i] + beta[5]*AREA[i] + beta[6]*STAT[i]
# -- Add model for dependent variables --
AGE[i] ~ dcat(p_age)
SEX[i] ~ dbern(p_sex)
INC[i] ~ dcat(p_inc)
POL[i] ~ dcat(p_pol)
STAT[i]~ dbern(p_stat)
}
# Priors
for (j in 1:6) {
beta[j] ~ dnorm(0, 0.001) # Normal prior for beta
}
for (k in 1:3) {
alpha[k] ~ dnorm(0, 0.001) # Normal prior for alpha
}
# -- Priors for dependent variables --
p_age ~ ddirch(c(0.3444976,0.3157895,0.3349282))
p_inc ~ ddirch(c(0.2248804,0.3971292,0.2870813))
p_pol ~ ddirch(c(0.4019139,0.1913876,0.3732057 ))
p_sex ~ dbeta(2,1)
p_stat ~ dbeta(2,1)
如果模型中的任何修改可能适用于我的数据情况,请随意提出。
我的前10行数据如下:
AGE SEX INC POL AREA FIN STAT
1 3 0 2 2 1 2 1
2 2 0 3 3 1 3 1
3 1 0 2 NA 1 2 1
4 3 1 2 1 1 1 0
5 3 1 3 3 3 2 NA
6 1 0 2 1 3 3 NA
7 3 1 1 3 3 1 1
8 1 0 1 3 2 1 0
9 3 1 NA 3 3 2 0
10 1 0 NA 1 1 2 1
预测变量为FIN
,其余为响应变量。
1条答案
按热度按时间2uluyalo1#
看起来你的似然是多项式和有序似然的混合。在多项式似然中,你会为结果类别中的所有变量设置不同的系数,但参考组的所有系数都将设置为零。对于有序logit似然,你会像你在这里做的那样-所有系数都被限制为在结果类别中相同,除了截距。然而,截距被强制排序,并且从排序的截点计算的概率是累积的(而不是针对每个类别)。因为我不确定你的意图,让我们看看两者。首先,多项式似然:
注意,我们将
logit(p[i,k])
改为log(q[i,k])
,因为观察i在类别k中的概率为我们将第一类系数设置为零作为参考。
有序模型似然性如下所示:
这里,alpha参数是截断点-假设alpha 0 = -Inf且alpha 3 = Inf。重要的一点是alpha参数的大小必须增加。
让我们尝试运行两个模型:
多项式模型
型号总结:
诊断:
有序Logit模型
型号总结:
诊断:
创建于2023-04-09使用reprex v2.0.2
注意,在上面的代码中,我增加了系数的精度,以获得看起来接近收敛的结果,但如果你有很多数据,你应该能够在你的真实的模型中放松这些数据。