I am trying to estimate a growth curve model, however, despite numerous attempts I have not been able to optimise the model. I keep getting the following warnings:
1: There were 6349 divergent transitions after warmup. See
https://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
to find out why this is a problem and how to eliminate them.
2: Examine the pairs() plot to diagnose sampling problems
3: Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess
data {
int<lower=1> N; // Number of respondents
int<lower=1> T; // Number of time periods
matrix[N, T] Y; // Outcome variable matrix
matrix[N, T] M; // Mediator variable matrix
real<lower=0> time[N, T]; // Time values
vector[N] W; // Moderator variable vector
}
parameters {
vector[N] alpha_raw; // Raw intercept for each individual
vector[N] beta_raw; // Raw slope for each individual
real beta_mediator; // Coefficient for mediator variable
real<lower=0> sigma; // Residual standard deviation
real<lower=0> sigma_alpha; // Prior std for alpha
real<lower=0> sigma_beta; // Prior std for beta
real<lower=0> sigma_med; // Prior std for mediator
real<lower=0> sigma_growth; // Prior std for growth parameters
real growth; // Growth parameter
}
transformed parameters {
vector[N] alpha; // Transformed intercept for each individual
vector[N] beta; // Transformed slope for each individual
alpha = alpha_raw * sigma_alpha;
beta = beta_raw * sigma_beta;
}
model {
// Priors
alpha_raw ~ normal(0, 1); // Prior for raw intercept
beta_raw ~ normal(0, 1); // Prior for raw slope
beta_mediator ~ normal(0, sigma_med); // Prior for mediator coefficient
sigma ~ cauchy(0, 2.5); // Prior for residual standard deviation
growth ~ normal(0, sigma_growth); // Prior for growth parameter
// Likelihood
for (n in 1:N) {
for (t in 1:T) {
real mu;
mu = alpha[n] + beta[n] * time[n, t] + beta_mediator * M[n, t] + growth * time[n, t] + W[n];
Y[n, t] ~ normal(mu, sigma);
}
}
}
generated quantities {
// Extracting the log-likelihood for diagnostics
vector[N * T] log_lik;
int idx = 1;
for (n in 1:N) {
for (t in 1:T) {
log_lik[idx] = normal_lpdf(Y[n, t] | alpha[n] + beta[n] * time[n, t] + beta_mediator * M[n, t] + growth * time[n, t] + W[n], sigma);
idx += 1;
}
}
}
I appreciate any and all help with this. Thanks in advance!