如何使用BUGS / JAGS / STAN为比例建模?


10

我正在尝试建立一个模型,其中回应是一个比例(实际上是政党在选区中获得的选票份额)。它的分布不正常,因此我决定使用beta分布对其进行建模。我也有几个预测指标。

但是,我不知道如何用BUGS / JAGS / STAN编写它(JAGS是我最好的选择,但这并不重要)。我的问题是我通过预测变量对参数求和,但是该怎么办呢?

代码将是这样的(使用JAGS语法),但是我不知道如何“链接” y_haty参数。

for (i in 1:n) {
 y[i] ~ dbeta(alpha, beta)

 y_hat[i] <- a + b * x[i]
}

y_hat只是参数和预测变量的乘积,因此是确定性关系。a并且b是我试图估计的系数,x作为预测变量)。

感谢您的建议!


什么是a,b,y_hat?您应该明确定义模型。顺便说一下,BUGS语法接近于数学语法。因此,如果您知道如何用数学语言编写模型,那么几乎所有工作都会完成。
斯蒂芬·洛朗

斯特凡,谢谢。我编辑了问题以定义a,b,y_hat。我不知道答案无论是数学,否则,答案确实是很容易;-)
乔尔

我怀疑我可以建立在E(y)= alpha /(alpha + beta)的事实基础上,但是我真的无法弄清楚到底有多精确。
约尔(Joël)2012年

Answers:


19

μϕμα=μ×ϕβ=(1μ)×ϕμϕ

可能是这样的:

for(i in 1:n) {
  y[i] ~ dbeta(alpha[i], beta[i])
  alpha[i] <- mu[i] * phi
  beta[i]  <- (1-mu[i]) * phi
  logit(mu[i]) <- a + b*x[i]
}
phi ~ dgamma(.1,.1)
a ~ dnorm(0,.001)
b ~ dnorm(0,.001)

谢谢,这是非常有帮助的!我正在努力为您的建议提供模型。
2012年

但是,当我运行模型时,出现以下错误:“节点y [6283]父值无效”。知道这里发生了什么吗?
2012年

@Joël,y [6283]的值是多少?您确定将Alpha和Beta的值限制为合法值吗?我希望某些值可能会变为0或以下,从而产生错误。
格雷格·斯诺

不,我检查了一下,我所有的y值都严格大于0(小于1)。也许我的先验与经验y值在某个时候发生冲突?但是我不知道该如何检查,我的先验似乎很明智-至少对我而言!
约尔(Joël)2012年

1
@colin,我对JAGS不太了解,因此最好在专门针对JAGS的论坛上提出。或尝试使用其他工具,这些天我发现我喜欢Stan for Bayes。
格雷格·斯诺

18

格雷格·斯诺(Greg Snow)给出了一个很好的答案。为了完整起见,这与Stan语法等效。虽然斯坦有一个Beta分布,你可以使用,这是更快地制定出测试密度的对数,因为自己的常量log(y)log(1-y)可一旦在一开始(而不是每一个时间计算y ~ beta(alpha,beta)将被称为)。通过增加保留lp__变量(见下文),您可以将样本中观测值的beta密度的对数求和。我在线性预测变量的参数向量中使用标签“ gamma”。

data {
  int<lower=1> N;
  int<lower=1> K;
  real<lower=0,upper=1> y[N];
  matrix[N,K] X;
}
transformed data {
  real log_y[N];
  real log_1my[N];
  for (i in 1:N) {
    log_y[i] <- log(y[i]);
    log_1my[i] <- log1m(y[i]);
  }
}
parameters {
  vector[K] gamma;
  real<lower=0> phi;
}
model {
  vector[N] Xgamma;
  real mu;
  real alpha_m1;
  real beta_m1;
  Xgamma <- X * gamma;
  for (i in 1:N) {
    mu <- inv_logit(Xgamma[i]);
    alpha_m1 <- mu * phi - 1.0;
    beta_m1 <- (1.0 - mu) * phi - 1.0;
    lp__ <- lp__ - lbeta(alpha,beta) + alpha_m1 * log_y[i] + 
                                        beta_m1 * log_1my[i];
  }
  // optional priors on gamma and phi here
}

谢谢本!也具有Stan语法非常有用。
2012年

Stan v2有一个“ beta_proportion”采样语句,我相信它消除了直接操纵“ lp__”的需要
THK
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.