data { int N; //Num obs int P; //Num contracts matrix[N, P] y; // yields for each tau by date vector[P] tau; // list of tau's } parameters { real sigma; // nelson siegel terms real lambda; vector[N] beta0; vector[N] beta1; real beta2[N]; // AR(1) updating terms real beta0_coef; real sigma_beta0; real beta1_coef; real sigma_beta1; real beta2_coef; real sigma_beta2; } model { real mu; // priors sigma ~ inv_gamma(.1,.1); sigma_beta0 ~ inv_gamma(.1,.1); sigma_beta1 ~ inv_gamma(.1,.1); sigma_beta2 ~ inv_gamma(.1,.1); beta0_coef ~ normal(0,.1); beta1_coef ~ normal(0,.5); beta2_coef ~ normal(0,.5); lambda ~ inv_gamma(0.1,0.1); // ar(1) terms beta0[1] ~ normal(0, sigma_beta0); beta1[1] ~ normal(0, sigma_beta1); beta2[1] ~ normal(0, sigma_beta2); for (k in 2:N){ beta0[k] ~ normal(0 + beta0_coef*beta0[k-1], sigma_beta0); beta1[k] ~ normal(0 + beta1_coef*beta1[k-1], sigma_beta1); beta2[k] ~ normal(0 + beta2_coef*beta2[k-1], sigma_beta2); } // model for (i in 1:N){ for (j in 1:P){ mu = beta0[i] + beta1[i]*((1-exp(-lambda*tau[j]))/(lambda*tau[j])) + beta2[i]*(((1-exp(-lambda*tau[j]))/(lambda*tau[j])) - exp(-lambda*tau[j])); y[i,j] ~ normal(mu, sigma); } } }