Hello Stan users,
I am following the recommendation in the Stan user’s guide to optimize a multivariate regression through Cholesky Factorization.
I’ve taken the code directly from the user’s guide (please see the code below) and was not expecting any error in the code. However, I am getting an error when I want to save the model in the following line. They syntax looks right. Any comments or suggestions will be appreciated. Thanks.
beta = u * gamma + (diag_pre_multiply(tau,L_Omega) * z)';
The error says ("Syntax error - from parser - no matches for row_vector[] * matrix).
Here is the code taken from the user’s guide:
data {
int<lower=0> N; // num individuals 11275
int<lower=1> K; // num ind predictors 4
int<lower=1> J; // num groups or M = 114
int<lower=1> L; // num group predictors 1 only constant
int<lower=1,upper=J> jj[N]; // group for individual
matrix[N, K] x; // individual predictors matrix
row_vector[L] u[J]; // group predictors 1
vector[N] y; // outcomes
}
parameters {
matrix[K, J] z;
cholesky_factor_corr[K] L_Omega;
vector<lower=0,upper=pi()/2>[K] tau_unif;
matrix[L, K] gamma; // group coeffs
real<lower=0> sigma; // prediction error scale
}
//transformed parameters {
//matrix[J, K] beta;
//vector<lower=0>[K] tau; // prior scale
//for (k in 1:K) tau[k] = 2.5 * tan(tau_unif[k]);
//beta = u * gamma + (diag_pre_multiply(tau,L_Omega) * z)';
// matrix[J, K] r_1 = (diag_pre_multiply(tau,L_Omega) * z)';}
transformed parameters {
matrix[J, K] beta;
vector<lower=0>[K] tau; // prior scale
for (k in 1:K) tau[k] = 2.5 * tan(tau_unif[k]);
beta = u * gamma + (diag_pre_multiply(tau,L_Omega) * z)';
}
model {
to_vector(z) ~ std_normal();
L_Omega ~ lkj_corr_cholesky(2);
to_vector(gamma) ~ normal(0, 5);
y ~ normal(rows_dot_product(beta[jj] , x), sigma);
}
}
Thanks,
Mauricio