假设我想在两个级别建模随机效果,即我有两个嵌套级别:父组中的个体和祖父组中的父组.我知道如何编写一个基本的模型从类似的例子一个随机效应(下)这些,但我不知道怎么写相当于
lmer(resp ~ (1|a/b), data = DAT)
Run Code Online (Sandbox Code Playgroud)
在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);
}
"
Run Code Online (Sandbox Code Playgroud)
我不确定 lmer 中的 a/b 表示法是什么,但如果您想要多层深度的嵌套级别,那么使用预测器很容易。假设您有一个 IRT 模型,其中学生(1:J 中的 j)嵌套在学校(1:S 中的 school[j])中,学校嵌套在城市(1:C 中的 city[s])中。
[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);
Run Code Online (Sandbox Code Playgroud)
你可以有
theta ~ normal(alpha[school], sigma_theta);
alpha ~ normal(beta[city], sigma_alpha);
beta ~ normal(0, 5);
Run Code Online (Sandbox Code Playgroud)