Appendix: Stan code HS model
data {
int <lower = 1> K;
int <lower = 1> N;
int <lower = 1> T;
int <lower = 1> S;
int <lower = 1> E;
int <lower = 1> Age[N];
int <lower = 1> Ship[N];
int <lower = 1> S2E[S];
matrix[T,K] B;
real mu_a_bar;
real mu_w_bar[K];
vector [N] Y;
}
parameters {
vector[S] a;
real a_bar[E];
vector[K] w[S];
vector[K] w_bar[E];
real<lower=0> s_a;
real<lower=0> s_w;
real<lower=0> s_a_bar;
real<lower=0> s_w_bar;
real<lower=0> s_Y;
}
transformed parameters {
vector [N] mu;
for (n in 1: N){
mu[n] = a[Ship[n]] + B[Age[n]] * w[Ship[n]];
}
}
model {
s_a ~ gamma(10,10);
s_w ~ gamma(10,10);
s_a_bar ~ exponential(1);
s_w_bar ~ exponential(1);
s_Y ~ exponential(1);
for (s in 1:S){
a[s] ~ normal(a_bar[S2E[s]], s_a);
w[s] ~ normal(w_bar[S2E[s]], s_w);
}
for (e in 1:E){
a_bar[e] ~ normal(mu_a_bar, s_a_bar);
w_bar[e] ~ normal(mu_w_bar,s_w_bar);
}
Y ~ normal(mu, s_Y);
}
generated quantities{
vector[N] log_likelihood;
for (i in 1:N) {
log_likelihood[i] = normal_lpdf(Y[i]|mu[i],
s_Y);
}
}