Hi all,
I have the following centered ordered logit model
data {
int J; // number of categories
int<lower=0> N;
int<lower=1> K; // number of predictors
matrix[N, K] X; // covariates
array[N] int<lower=1, upper=J> y;
}
transformed data {
int i = 3; // number of spacings between cutoffs {s1, s2, s3}
}
parameters {
corr_matrix[K] Omega;
vector<lower=0>[i] s; // spacings between cutoff thresholds
vector<lower=0>[K] sigma;
vector[K] beta;
vector[K] mu;
}
transformed parameters {
ordered[J - 1] c; // cut off thresholds
c[4] = s[1];
c[5] = s[1] + s[2];
c[6] = s[1] + s[2] + s[3];
c[1] = -c[6];
c[2] = -c[5];
c[3] = -c[4];
vector[N] lambda = X * beta;
}
model {
// priors
Omega ~ lkj_corr(2.0);
mu ~ normal(0, 5);
sigma ~ normal(0, 2.5);
s ~ std_normal();
// likelihood
beta ~ multi_normal(mu, quad_form_diag(Omega, sigma));
y ~ ordered_logistic(lambda, c);
}
A lot of divergences occur when running the model. Therefore, I would like to check whether the model benefits from non-centered parameterization.
I introduce delta
and rewrite the code as follows:
data {
int J; // number of categories
int<lower=0> N;
int<lower=1> K; // number of predictors
matrix[N, K] X; // covariates
array[N] int<lower=1, upper=J> y;
}
transformed data {
int i = 3; // number of spacings between cutoffs {s1, s2, s3}
}
parameters {
corr_matrix[K] Omega;
vector<lower=0>[i] s; // spacings between cutoff thresholds
vector<lower=0>[K] sigma;
vector[K] mu;
vector<lower=0>[K] delta;
}
transformed parameters {
ordered[J - 1] c; // cut off thresholds
c[4] = s[1];
c[5] = s[1] + s[2];
c[6] = s[1] + s[2] + s[3];
c[1] = -c[6];
c[2] = -c[5];
c[3] = -c[4];
vector<lower=0>[K] beta = mu + delta * quad_form_diag(Omega, sigma);
vector[N] lambda = X * beta;
}
model {
// priors
Omega ~ lkj_corr(2.0);
mu ~ normal(0, 5);
sigma ~ normal(0, 2.5);
s ~ std_normal();
delta ~ std_normal();
// likelihood
y ~ ordered_logistic(lambda, c);
}
Running this model results in an error on this line
vector<lower=0>[K] beta = mu + delta * quad_form_diag(Omega, sigma);
as the datatypes are not compatible.
Please show me how its written correctly.
Thanks in advance!