如何在具有多重回归的Winbugs中获得多项式概率



在Winbugs中,我指定具有多项式可能性函数的模型,并且我需要确保多项式概率全部在0到1之间,并在1中和1.

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1。

这是指定可能性的代码的一部分:

e[k,i,1:9] ~ dmulti(P[k,i,1:9],n[i,k]) 

在这里,阵列p []指定了多项式分布的概率。

这些概率应从我的数据(矩阵E [](中估算出对一系列固定和随机效应的多个线性回归。例如,这是用于预测p []元素之一的多个线性回归:

P[k,1,2] <- intercept[1,2]  +  Slope1[1,2]*Covariate1[k]  +
Slope2[1,2]*Covariate2[k]  +  Slope3[1,2]*Covariate3[k]  
+ Slope4[1,2]*Covariate4[k] +  RandomEffect1[group[k]]  +  
RandomEffect2[k]

编译时,模型会产生错误:

elements of proportion vector of multinomial e[1,1,1] must be between zero and one

如果我正确理解这一点,这意味着向量p [k,i,1:9]的元素(上面多项式函数的概率向量(可能非常大(或小(数字。实际上,它们都需要在0到1之间,然后总和到1。

我是Winbugs的新手,但是从围绕它的阅读中,似乎以某种方式使用Beta回归而不是多个线性回归可能是前进的道路。但是,尽管这将使每个元素都在0到1之间,但似乎并没有达到问题的核心,也就是说,P [K,I,1:9]的所有元素都必须是正面的,并且总和到1。

可能是响应变量可以非常简单地转换为一个比例。我试图将每个元素除以p [k,i,1:9]的总和,但没有成功。

任何提示都会非常感谢!

(我提供了模型的有问题的部分;整个过程相当长。(

这样做的通常方法是使用logit链接的多项式等效物将转换后的概率限制为间隔(0,1(。例如(对于单个预测变量,但对于您需要的许多预测指标,它是相同的原理(:

Response[i, 1:Categories] ~ dmulti(prob[i, 1:Categories], Trials[i])
phi[i,1] <- 1
prob[i,1] <- 1 / sum(phi[i, 1:Categories])
for(c in 2:Categories){
    log(phi[i,c]) <- intercept[c] + slope1[c] * Covariate1[i]
    prob[i,c] <- phi[i,c] / sum(phi[i, 1:Categories])
}

为了识别性,PHI [1]的值设置为1,但截距和斜率1的其他值是独立估计的。当类别的数量等于2时,这会崩溃到通常的逻辑回归,但编码为多项式响应:

log(phi[i,2]) <- intercept[2] + slope1[2] * Covariate1[i]
prob[i,2] <- phi[i, 2] / (1 + phi[i, 2])
prob[i,1] <- 1 / (1 + phi[i, 2])

IE:

logit(prob[i,2]) <- intercept[2] + slope1[2] * Covariate1[i]
prob[i,1] <- 1 - prob[i,2]

在此模型中,我按类别索引了Slope1,这意味着结果的每个级别都与预测指标都有独立的关系。如果您有序数响应,并且想假设与协变量相关的优势比在响应的连续级别之间是一致的,那么您可以在Slope1上删除索引(并稍微重新加密代码,以便PHI累积(以获得一个比例赔率逻辑回归(POLR(。


编辑

这是我所教的课程中涵盖逻辑回归,多项式回归和polr的示例代码的链接:

http://runjags.sourceforge.net/examples/squirrels.r

请注意,它使用JAG(而不是Winbugs(,但据我所知,对于这些类型的模型,模型语法没有差异。如果您想快速开始使用Runjags&amp;来自Winbugs背景的JAGS,然后您可以关注此小插图:

http://runjags.sourceforge.net/quickjags.html

最新更新