data { int<lower=0> N; // sample size int<lower=2> J; // number of categories int<lower=0> n_age; // number of age categories int<lower=0> n_race; // number of race categories int<lower=0> n_edu; // number of education catoegories int<lower=0> n_division; // number of Divisions int<lower=0> n_states; // number of States int<lower=0> n_party_id; // number of party-categories int<lower=0> n_waves; // number of Waves
int<lower=1,upper=n_age> age[N]; // age for each respondent int<lower=1,upper=n_race> race[N]; // race for each respondent int<lower=1,upper=n_edu> edu[N]; // education for each respondent vector<lower=0,upper=1>[N] female; // female for each respondent int<lower=1,upper=n_party_id> party_id[N]; // party id for each respondent
int<lower=0,upper=n_states> state[N]; // state for each respondent int<lower=0,upper=n_waves*2> wave_sex[N]; // wave_sex each respondent int<lower=0,upper=n_waves*n_age> wave_age[N]; // wave_age for each respondent int<lower=0,upper=n_waves*n_edu> wave_edu[N]; // wave_edu for each respondent int<lower=0,upper=n_waves*n_race> wave_race[N]; // wave_race for each respondent int<lower=0,upper=n_waves*n_party_id> wave_party_id[N]; // wave_party_id for each respondent
//state level effects int<lower=1,upper=n_division> division[n_states]; // division for each state real<lower=0,upper=100> vote_prev_state[n_states]; // 2012 vote at the state-level
int<lower=1,upper=J> y[N]; // vote-choice }parameters { real beta; // common intercept real sex; // female slope vector[n_age] a_age; // age random effects vector[n_edu] a_edu; // education random effects vector[n_race] a_race; // race random effects vector[n_party_id] a_party_id; // party random effects vector[n_waves*2] a_wave_sex; // change for female vector[n_waves*n_age] a_wave_age; // change for sex vector[n_waves*n_edu] a_wave_edu; // change for edu vector[n_waves*n_race] a_wave_race; // change for race vector[n_waves*n_party_id] a_wave_party_id; // change for party
//state level effects vector[n_division] a_division; // division random effects real gamma; // previous vote- slope vector [n_states] a_state; // state effects ordered[J-1] tau; // thresholds // sigmas real<lower=0,upper=100> sigma; // sd for base-line parameters real<lower=0,upper=100> sigma_change; // sd for dynamic parameters }
transformed parameters{ // state-level effects transformed real a_state_hat [n_states]; for (s in 1:n_states)a_state_hat[s]<-a_division[division[s]]+gamma*vote_prev_state[s];}
model { vector[J] theta;sigma ~ cauchy(0,2.5); // half-cauchy priors, p. 54 for referencesigma_change ~ cauchy(0,2.5);
a_age ~ normal (0, sigma); //base-line parametersa_edu ~ normal (0, sigma);a_race ~ normal (0, sigma);a_party_id ~ normal (0, sigma);beta ~ normal(0, sigma);sex ~ normal(0, sigma);
gamma ~ normal(0, sigma);a_division ~ normal (0, sigma);
a_wave_sex~ normal (0, sigma_change); //change parametersa_wave_age~ normal (0, sigma_change);a_wave_edu~ normal (0, sigma_change);a_wave_race~ normal (0, sigma_change);a_wave_party_id~ normal (0, sigma_change);
//#1st Levela_state~ normal(a_state_hat,sigma);
for (i in 1:N) { //Log Likelihoodreal y_hat;y_hat <- beta + sex * female[i]+a_state[state[i]]+a_party_id[party_id[i]] + a_age[age[i]]+a_edu[edu[i]] + a_race[race[i]]++a_wave_sex[wave_sex[i]]+a_wave_age[wave_age[i]]+a_wave_edu[wave_edu[i]]+a_wave_race[wave_race[i]]+a_wave_party_id[wave_party_id[i]];theta[1] <- 1 - Phi(y_hat - tau[1]);for (k in 2:(J-1))theta[k] <- Phi(y_hat - tau[k-1]) - Phi(y_hat - tau[k]);theta[J] <- Phi(y_hat - tau[J-1]);y[i] ~ categorical(theta);} }
--
You received this message because you are subscribed to the Google Groups "Stan users mailing list" group.
To unsubscribe from this group and stop receiving emails from it, send an email to stan-users+...@googlegroups.com.
To post to this group, send email to stan-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
<Ordered_dynamic.stan>
Thanks for the comment! In my mind, all random effects (so essentially every parameter in my model) would get in the way of the cut-points. I am surprised that fixing one of the J-1 cut-points (and getting rid of that constraint on the variance parameters, thanks for the hind!) does not take care of this. Is there an intuitive solution to this? The combination of cut points and random effects, I think, confuses me (and the model). Again, many many thanks for maintaining this wonderful group!
ordered[J-2] tau_raw; // thresholds// sigmasreal<lower=0> sigma; // sd for base-line parametersreal<lower=0> sigma_change; // sd for dynamic parameters
}transformed parameters{ // state-level effects transformedreal a_state_hat [n_states];
vector[J-1] tau;
for (s in 1:n_states)a_state_hat[s]<-a_division[division[s]]+gamma*vote_prev_state[s];
tau[1]<-0;
for (k in 2:(J-1))
tau[k] <- tau_raw[k-1];
data { int<lower=0> N; // sample wave_size //int<lower=2> J; // number of categories int<lower=0> n_age; // number of age categories int<lower=0> n_race; // number of race categories int<lower=0> n_edu; // number of education catoegories int<lower=0> n_division; // number of Divisions int<lower=0> n_states; // number of States int<lower=0> n_party_id; // number of party-categories int<lower=0> n_waves; // number of Waves int<lower=0,upper=n_states> state[N]; // state for each respondent int<lower=0,upper=1> gender[N]; // gender each respondent int<lower=0,upper=n_age> age[N]; // age for each respondent int<lower=0,upper=n_edu> edu[N]; // edu for each respondent int<lower=0,upper=n_race> race[N]; // race for each respondent int<lower=0,upper=n_party_id> party_id[N]; // party_id for each respondent //state level effects int<lower=1,upper=n_division> division[n_states]; // division for each state real<lower=0,upper=100> vote_prev_state[n_states]; // 2012 vote at the state-level int<lower=0,upper=1> y[N]; // vote-choice int<lower=0,upper=N> in_wave[N]; int<lower=0> wave_size[n_waves]; int<lower=0> wave_lims[n_waves,2];}parameters { real beta [n_waves]; // coefficient for female; wave vector[n_age] a_age [n_waves]; // coefficient for age; wave vector[n_edu] a_edu [n_waves]; // coefficient for edu; wave vector[n_race] a_race [n_waves]; // coefficient for race; wave vector[n_party_id] a_party_id [n_waves]; // coefficient for party_id; wave //state level effects vector[n_division] a_division; // division random effects real gamma; // previous vote- slope vector [n_states] a_state; // state effects // sigmas real<lower=0> sigma; // sd for base-line parameters real<lower=0> sigma_evolution; // "evolution" term for dynamic parameters }
transformed parameters{ // state-level effects transformed real a_state_hat [n_states]; for (s in 1:n_states) a_state_hat[s]<-a_division[division[s]]+gamma*vote_prev_state[s];}
model { sigma_evolution ~ cauchy(0,2.5); // half-cauchy priors, p. 54 for reference sigma ~ cauchy(0,2.5); //#1st Level a_state~ normal(a_state_hat,sigma); //evolution for (k in 2:n_waves) { beta[k] ~ normal(beta[k-1], sigma_evolution[k]); a_age[k] ~ normal(a_age[k-1], sigma_evolution); a_edu[k] ~ normal(a_edu[k-1], sigma_evolution); a_race[k] ~ normal(a_race[k-1], sigma_evolution); a_party_id[k] ~ normal(a_party_id[k-1], sigma_evolution);}//Likelihood for each i in each wavefor(s in 1:n_waves){ int obs_in_wave[wave_size[s]];
obs_in_wave<-segment(in_wave,wave_lims[s,1],wave_lims[s,2]) ; // find observations in each wave for (i in 1:wave_size[s]) {real y_hat; y_hat <- beta[s]*gender[obs_in_wave[i]] +a_age[s,age[obs_in_wave[i]]] +a_edu[s,edu[obs_in_wave[i]]] +a_party_id[s,party_id[obs_in_wave[i]]] +a_race[s,race[obs_in_wave[i]]] +a_state[state[obs_in_wave[i]]]; y[obs_in_wave[i]] ~ bernoulli_logit(y_hat); } } }beta[k] ~ normal(beta[k-1], sigma_evolution[k]); params_dem<-extract(fit)best_dem<-which.max(params_dem$lp__)
data { int<lower=0> N; // sample wave_size int<lower=0> n_age; // number of age categories int<lower=0> n_race; // number of race categories int<lower=0> n_edu; // number of education catoegories int<lower=0> n_division; // number of Divisions int<lower=0> n_states; // number of States int<lower=0> n_party_id; // number of party-categories int<lower=0> n_waves; // number of Waves int<lower=0,upper=n_division> division[N]; // Division for each respondent int<lower=0,upper=1> gender[N]; // Gender each respondent int<lower=0,upper=n_age> age[N]; // age for each respondent int<lower=0,upper=n_edu> edu[N]; // edu for each respondent int<lower=0,upper=n_race> race[N]; // race for each respondent int<lower=0,upper=n_party_id> party_id[N]; // party_id for each respondent real vote_prev_state[N]; // 2012 state-vote at the individual-level int<lower=0,upper=1> y[N]; // vote-choice int<lower=0,upper=N> in_wave[N]; // wave of respondents int<lower=0> wave_size[n_waves]; // N individuals per Wave int<lower=0> wave_lims[n_waves,2]; // first individual in wave and individuals per wave (5*2 matrix)}parameters { real beta [n_waves]; // coefficient-array for female; wave vector[n_age] a_age [n_waves]; // coefficient-array for age; wave vector[n_edu] a_edu [n_waves]; // coefficient-array for edu; wave vector[n_race] a_race [n_waves]; // coefficient-array for race; wave vector[n_party_id] a_party_id [n_waves]; // coefficient-array for party_id; wave vector [n_division] a_division[n_waves]; // coefficient-array for division; wave real gamma; // previous vote- slope}
model { gamma~cauchy(0,2.5); // embed 95% probability mass between 0.01% and 99.9% // (Gelman 2008) a_division[1]~ cauchy(0,0.425); // embed 95% probability mass between 70% and 30% beta[1]~cauchy(0,2.5); // embed 95% probability mass between 0.01% and 99.9% a_age[1]~cauchy(0,2.5); // embed 95% probability mass between 0.01% and 99.9% a_edu[1]~cauchy(0,2.5); // embed 95% probability mass between 0.01% and 99.9% a_race[1]~cauchy(0,2.5); // embed 95% probability mass between 0.01% and 99.9% a_party_id[1]~cauchy(0,2.5); // embed 95% probability mass between 0.01% and 99.9%
for (k in 2:n_waves) { beta[k] ~ normal(beta[k-1], 0.05); // assume 5% shift per demographic per wave covers // 95% of probability mass a_age[k] ~ normal(a_age[k-1], 0.05); // assume 5% shift per demographic per wave covers // 95% of probability mass a_edu[k] ~ normal(a_edu[k-1], 0.05); // assume 5% shift per demographic per wave covers // 95% of probability mass a_race[k] ~ normal(a_race[k-1], 0.05); // assume 5% shift per demographic per wave covers // 95% of probability mass a_party_id[k] ~ normal(a_party_id[k-1], 0.05); // assume 5% shift per demographic per wave covers // 95% of probability mass a_division[k] ~ normal(a_division[k-1], 0.05);
} //Likelihood for each i in each wavefor(s in 1:n_waves){ int obs_in_wave[wave_size[s]];
obs_in_wave<-segment(in_wave,wave_lims[s,1],wave_lims[s,2]) ; // find observations in each wave for (i in 1:wave_size[s]) {real y_hat; y_hat <- beta[s]*gender[obs_in_wave[i]] +a_age[s,age[obs_in_wave[i]]] +a_edu[s,edu[obs_in_wave[i]]] +a_party_id[s,party_id[obs_in_wave[i]]] +a_race[s,race[obs_in_wave[i]]]+gamma*vote_prev_state[i] +a_division[s,division[obs_in_wave[i]]];As far as I understand, assessing uncertainty by getting n.sim probability estimates in a logit model and then taking the 2.5%/97.5% is more valid? Or is this also too rigorous of an approach, and we would prefer 5/90 or something less restrictive even?best_dem<-which.max(params_dem$lp__)