STAN中的嵌套模型?

时间:2015-03-31 21:34:13

标签: r stan

假设我想在两个级别建模随机效果,即我有两个级别的嵌套:父组中的个体和祖父组中的父组。我知道如何从像these这样的例子中为单个随机效果编写一个基本模型(下面),但我不知道如何编写等效的

lmer(resp ~ (1|a/b), data = DAT)

在lmer。

单个RE的STAN代码。问题是,如何将a嵌套在更高级别b中?

data{
  int<lower=0> N;
  int<lower=0> K;
  matrix[N,K] X;
  vector[N] price;
  int J;
  int<lower=1,upper=J> re[N];
}
parameters{
  vector[J] a;
  real mu_a;
  real tau;
  real<lower=0> sigma_a;
  real<lower=0> sigma;
  vector[K] beta;
}
transformed parameters{
  vector[N] mu_hat;
  for(i in 1:N)
    mu_hat[i] <- a[re[i]];
}
model {
  mu_a ~ normal(0,10);
  tau ~ cauchy(0,5);
  a ~ normal(mu_a,sigma_a);
  for(i in 1:N)
    price[i] ~ normal(X[i]*beta + mu_hat[i], sigma);
}
"

2 个答案:

答案 0 :(得分:4)

我不确定lmer中的a / b符号是什么,但如果你想要多层深层嵌套级别,那么使用预测器就很容易了。假设您有一个IRT模型,学生(j in 1:J)嵌套在学校(学校[j] in 1:S)和学校嵌套在城市(城市[s] in 1:C)。

[2017年4月14日更新]

您现在可以对所有内容进行矢量化。所以不是这样:

for (j in 1:J) 
  theta[j] ~ normal(alpha[school[j]], sigma_theta);
for (s in 1:S)
  alpha[s] ~ normal(beta[city[s]], sigma_alpha);
beta ~ normal(0, 5);

你可以

theta ~ normal(alpha[school], sigma_theta);
alpha ~ normal(beta[city], sigma_alpha);
beta ~ normal(0, 5);

答案 1 :(得分:0)

如果您的模型很简单,brms包值得一看。它将您的公式编译为stan并运行模型。它还有从lmer借用的富有表现力的语法。我喜欢的是你可以将模型编译为stan文件,如果你已经拥有lmer公式,那么可以在它上构建

当然,它有额外的好处(来自斯坦),围绕估计&#34;固定效应&#34; vs&#34;随机效应&#34;已经消失了,两者都被估计为后验分布的参数。