Hi,
I am running the following model, where nobs is defined as a vector of the dimension 698 participants, such as (3, 3, …, 2, …) indicating the number of observations per individual.
I do not know if there is something wrong with the data, or the initial values, or if the problem belongs to the code.
The Rhat goes beyond 1, especially for the sigma parameters. What could be causing this?
functions {
real[] sldecay(real t, real[] y, real[] theta, real[] x_r, int[] x_i) {
real dydt[3];
dydt[1] = -theta[1]*y[1];
dydt[2] = -theta[2]*y[2];
dydt[3] = theta[1]*y[1] + theta[2]*y[2] - theta[3]*y[3];
return dydt;
}
}
data {
int<lower=1> N;
int<lower=1> nsubjects;
int<lower=1> subj_ids[N];
real <lower=0> y[N];
int <lower=1> ntimes;
int <lower=1> nobs[nsubjects];
real ts[ntimes];
real t0;
}
transformed data {
real x_r[0];
int x_i[0];
}
parameters {
real logps;
real logpl;
real logmuab;
real sigmalogmuab;
real logAB0;
real sigmalogAB0;
real logps0;
real logpl0;
real <lower = 0> sigma;
vector[2] r[nsubjects];
}
model{
real mu[ntimes, 3];
real inits[3];
real theta[3];
real new_mu[ntimes, 3];
vector[nsubjects] rAB0;
vector[nsubjects] rmuab;
// transformed parameters
real ps = exp(logps);
real pl = exp(logpl);
real muab = exp(logmuab);
real sigma_muab = exp(sigmalogmuab);
real AB0 = exp(logAB0);
real sigma_AB0 = exp(sigmalogAB0);
real ps0 = exp(logps0);
real pl0 = exp(logpl0);
// defining the correlation
vector[2] mean_vec;
matrix[2,2] Sigma;
mean_vec[1] = -pow(sigma_AB0, 2.0)/2;
mean_vec[2] = -pow(sigma_muab, 2.0)/2;
Sigma[1,1] = pow(sigma_AB0, 2.0);
Sigma[2,2] = pow(sigma_muab, 2.0);
Sigma[1,2] = 0;
Sigma[2,1] = 0;
//prior distributions
logps ~ normal(0, 1);
logpl ~ normal(0, 1);
logmuab ~ normal(0, 10);
sigmalogmuab ~ normal(0, 1);
logAB0 ~ uniform(5, 10);
sigmalogAB0 ~ normal(0, 1);
logps0 ~ normal(0, 1);
logpl0 ~ normal(0, 1);
sigma ~ normal(1, 10);
for (j in 1:nsubjects) {
r[j] ~ multi_normal(mean_vec, Sigma);
rAB0[j] = r[j,1];
rmuab[j] = r[j,2];
//defining the initial conditions
inits[3] = AB0*exp(rAB0[j]);
inits[1] = inits[3]/ps0;
inits[2] = inits[3]/pl0;
//defining the parameters
theta[1] = ps;
theta[2] = pl;
theta[3] = muab*exp(rmuab[j]);
// ode solver
mu[1:nobs[j]] = integrate_ode_rk45(sldecay, inits, t0, ts[1:nobs[j]], theta, x_r, x_i);}
for (t in 1:nobs[nsubjects]){
new_mu[t,1] = mu[t,1];
new_mu[t,2] = mu[t,2];
new_mu[t,3] = log(mu[t,3]) - pow(sigma, 2.0)/2;
y[t] ~ lognormal(new_mu[t], sigma);
}
}