//Joint LC/RH model for fertility and surival
data {
int<lower=1> Nm; // number of mortality observation
int<lower=1> Nf; // number of fertility observation
int<lower=1> T; // years
int<lower=1> Am; // ages for mortality
int<lower=1> Af; // ages for fertility
int<lower=1> Cm; // cohort index for mortality
int<lower=1> Cf; // cohort index for fertility
array[Nm] int<lower=1,upper=Am> am; // age index for mortality
array[Nf] int<lower=1,upper=Af> af; // age index for fertility
array[Nm] int<lower=1,upper=T> ti; // time index
array[Nm] int<lower=1,upper=Cm> cm; // cohort index for mortality
array[Nf] int<lower=1,upper=Cf> cf; // cohort index for fertility
vector[Nm] ym; // mortality rates
vector[Nf] yf; // fertility rates
}
parameters {
vector[Am] alpha_m; // age-specific intercept
vector[Af] alpha_f;
simplex[Am] beta_m; // coefficient for temporal effect
simplex[Af] beta_f;
simplex[Am] beta_m_g; // coefficient for cohort effect
simplex[Af] beta_f_g;
array[T] vector[2] kappa; // temporal factor
vector[Cm] gamma_m; // cohort effect
vector[Cf] gamma_f;
real<lower=0> sigma_m; // variances
real<lower=0> sigma_f;
real<lower=0> sigma_alpha_m;
real<lower=0> sigma_alpha_f;
real<lower=0> sigma_gamma_m;
real<lower=0> sigma_gamma_f;
vector[2] phi0; // VAR(1) intercept
matrix[2,2] phi; // vAR(1) coefficient matrix
vector<lower=0>[2] sigma_k; // variance
cholesky_factor_corr[2] Lcorr_k; // corrrelation
}
transformed parameters {
matrix[2,2] L_sigma_k = diag_pre_multiply(sigma_k, Lcorr_k);
}
model {
// variances
target += student_t_lpdf(sigma_m|5,0,1);
target += student_t_lpdf(sigma_f|5,0,1);
target += student_t_lpdf(sigma_alpha_m|5,0,1);
target += student_t_lpdf(sigma_alpha_f|5,0,1);
target += student_t_lpdf(sigma_gamma_m|5,0,1);
target += student_t_lpdf(sigma_gamma_f|5,0,1);
// VAR(1) parameters
target += normal_lpdf(phi0|0,1);
target += normal_lpdf(to_vector(phi)|0,0.5);
target += student_t_lpdf(sigma_k|5,0,1);
target += lkj_corr_cholesky_lpdf(Lcorr_k|2);
// Dirichlet prior for beta
target += dirichlet_lpdf(beta_m|rep_vector(1, Am));
target += dirichlet_lpdf(beta_f|rep_vector(1, Af));
target += dirichlet_lpdf(beta_m_g|rep_vector(1, Am));
target += dirichlet_lpdf(beta_f_g|rep_vector(1, Af));
// age effect
target += normal_lpdf(alpha_m[1:2]|0, sigma_alpha_m);
for(a in 3:Am){
target += normal_lpdf(alpha_m[a]|2alpha_m[a-1]-alpha_m[a-2], sigma_alpha_m);
}
target += normal_lpdf(alpha_f[1:2]|0,sigma_alpha_f);
for(a in 3:Af){
target += normal_lpdf(alpha_f[a]|2alpha_f[a-1]-alpha_f[a-2], sigma_alpha_f);
}
// cohort effect
target += normal_lpdf(gamma_m|0, sigma_gamma_m);
target += normal_lpdf(gamma_f|0, sigma_gamma_f);
// VAR(1) temporal effect
target += multi_normal_cholesky_lpdf(kappa[1]|phi0, L_sigma_k);
for(t in 2:T){
target += multi_normal_cholesky_lpdf(kappa[t]|phi0+phi*kappa[t-1], L_sigma_k);
}
// soft sum-zero constraints
sum(gamma_m) ~ normal(0, 0.001Cm);
sum(gamma_f) ~ normal(0, 0.001Cf);
sum(kappa[,1]) ~ normal(0, 0.001T);
sum(kappa[,2]) ~ normal(0, 0.001T);
// likelihood
for(n in 1:Nm){
real eta = alpha_m[am[n]] + beta_m[am[n]] * kappa[ti[n]][1] + beta_m_g[am[n]]*gamma_m[cm[n]];
target += normal_lpdf(ym[n]|eta, sigma_m);
}
for(n in 1:Nf){
real eta = alpha_f[af[n]] + beta_f[af[n]] * kappa[ti[n]][2] + beta_f_g[af[n]]*gamma_f[cf[n]];
target += normal_lpdf(yf[n]|eta, sigma_f);
}
}
I am trying fit this model but I am getting convergence issues. especially parameters for kappa and gamma are showing high rhat and low ess.