I hope this is a simple question. I want to explore multilevel modeling in a finance context. I have T dates, and at each date there are G different “groups” of returns. We assume that each of these groups have a linear relationship to some market return, with no intercept. This design matrix in R is achieved via:
X = model.matrix(r ~ mkt:factor(group_var) - 1, data = dat)
I would like to compute the no-pooling model in Stan, where each group_var has its beta and its own variance. Below is my failed attempt:
data {
int<lower=1> T; // number of time periods
int<lower=1> G; // number of groups
vector[TG] r; // returns
matrix[TG, G] X; // design matrix
}
parameters {
vector[G] beta;
vector<lower=0>[G] sigma_g;
}
model {
beta ~ normal(1,1);
eps_q_t ~ normal(0, 1);
for(i in 1:T) {
r[(G*(i-1) + 1): (G*i)] ~ normal(X * beta, sigma_g);
}
}
This yields the error Exception: normal_lpdf: Random variable has dimension = 17, expecting dimension = 3349,
where in my data G = 17 and T = 3349/G = 197. Somehow the implication is that r[(G*(i-1) + 1): (G*i)] has dimension 3349, but this would be strange because the slice has index-length G. What’s the best practice here? I have been reading the documentation but have not found an example similar to the above.