@@ -3,27 +3,30 @@ functions {
33}
44
55data {
6- int < lower =1 > N; // number of observations
7- int Y[N]; // response variable
8- int < lower =1 > K; // number of predictors
9- matrix [N, K] X; // design matrix
10- int < lower =1 > K_ipw; // number of population-level effects
11- int ipw_idx[N]; // weight index
6+ int < lower =1 > N; // number of observations
7+ int Y[N]; // response variable
8+ int < lower =1 > K; // number of predictors for AR model
9+ matrix [N, K] X; // design matrix
10+ int < lower =1 > K_raw; // number of predictors for raw model
11+ int < lower =1 > K_ipw; // number for IPW model
12+ int ipw_idx[N]; // weight index
1213 matrix [70 ,2000 ] ipw_weights;
1314 int id;
1415}
1516
1617transformed data {
1718 vector < lower =0 > [N] weights[1250 ];
18- # X0 and X1 later used to calculate average marignal effects
19- matrix [N,K_ipw] X0[K_ipw];
20- matrix [N,K_ipw] X1[K_ipw];
19+ matrix [N,K] X0[K_ipw];
20+ matrix [N,K] X1[K_ipw];
2121 matrix [N,K_ipw] X_ipw;
22+ matrix [N,K_raw] X_raw;
2223
2324 X_ipw = X[,1 : K_ipw];
25+ X_raw = X[,1 : K_raw];
26+
2427 for (k in 1 : K_ipw) {
25- X0[k] = X_ipw ;
26- X1[k] = X_ipw ;
28+ X0[k] = X ;
29+ X1[k] = X ;
2730 for (n in 1 : N) X0[k][n,k] = 0.0 ;
2831 for (n in 1 : N) X1[k][n,k] = 1.0 ;
2932 }
@@ -32,35 +35,43 @@ transformed data {
3235
3336parameters {
3437 vector [K_ipw] b_ipw;
35- vector [K_ipw] delta_b; # difference in regression weights for IPW and AR models
38+ vector [K_ipw] delta_ar;
39+ vector [K_raw] delta_raw;
3640 vector [K- K_ipw] b_ar_r;
3741 real < lower =0 , upper =1 > theta_ipw;
3842 real < lower =0 , upper =1 > theta_ar;
43+ real < lower =0 , upper =1 > theta_raw;
3944 real alpha_ipw;
4045 real alpha_ar;
46+ real alpha_raw;
4147}
4248
4349transformed parameters {
4450 vector [K] b_ar;
51+ vector [K_raw] b_raw;
4552 real < lower = 0 > phi_ipw = (1 - theta_ar)/ theta_ipw;
4653 real < lower = 0 > phi_ar = (1 - theta_ar)/ theta_ar;
47- b_ar = append_row( b_ipw + delta_b,b_ar_r);
54+ real < lower = 0 > phi_raw = (1 - theta_raw)/ theta_raw;
55+ b_ar = append_row( b_ipw + delta_ar,b_ar_r);
56+ b_raw = b_ipw[1 : K_raw] + delta_raw;
4857}
4958
5059model {
5160 b_ipw ~ normal (0 ,2 );
5261 b_ar ~ normal (0 ,2 );
62+ b_raw ~ normal (0 ,2 );
5363 alpha_ipw ~ normal (0 ,2 );
5464 alpha_ar ~ normal (0 ,2 );
65+ alpha_raw ~ normal (0 ,2 );
5566
5667 {
5768 vector [N] p_ar = inv_logit( X * b_ar + alpha_ar);
69+ vector [N] p_raw = inv_logit( X_raw * b_raw + alpha_raw);
5870 vector [N] p_ipw = inv_logit( X_ipw * b_ipw + alpha_ipw);
5971 vector [N] lp_ipw;
6072
61- # update log posterior for AR model
6273 target += beta_binomial_lpmf( Y | 22 , p_ar * phi_ar, (1 - p_ar) * phi_ar);
63- # update log posterior for IPW model
74+ target += beta_binomial_lpmf( Y | 22 , p_raw * phi_raw, ( 1 - p_raw) * phi_raw);
6475 for (n in 1 : N) {
6576 lp_ipw[n] = beta_binomial_lpmf( Y[n] | 22 , p_ipw[n] * phi_ipw, (1 - p_ipw[n]) * phi_ipw);
6677 }
@@ -69,16 +80,23 @@ model {
6980}
7081
7182generated quantities {
72- # average marginal effects for IPW and AR model (and their difference)
73- vector [K_ipw] me_ar;
74- vector [K_ipw] me_ipw;
75- vector [K_ipw] delta_me;
83+ vector [K_raw] me_ar;
84+ vector [K_raw] me_raw;
85+ vector [K_raw] me_ipw;
86+ vector [K_raw] delta_ipw_raw;
87+ vector [K_raw] delta_ipw_ar;
88+ vector [K_raw] delta_ar_raw;
7689
77- for (k in 1 : K_ipw) {
78- me_ipw[k] = mean(inv_logit( X0[k] * b_ipw + alpha_ipw) - inv_logit( X1[k] * b_ipw + alpha_ipw));
79- me_ar[k] = mean(inv_logit( X0[k] * b_ar[1 : K_ipw] + alpha_ar) - inv_logit( X1[k] * b_ar[1 : K_ipw] + alpha_ar));
90+ for (k in 1 : K_raw) {
91+ me_ipw[k] = mean(inv_logit( X0[k][,1 : K_ipw] * b_ipw + alpha_ipw) -
92+ inv_logit( X1[k][,1 : K_ipw] * b_ipw + alpha_ipw));
93+ me_raw[k] = mean(inv_logit( X0[k][,1 : K_raw] * b_raw + alpha_raw) -
94+ inv_logit( X1[k][,1 : K_raw] * b_raw + alpha_raw));
95+ me_ar[k] = mean(inv_logit( X0[k] * b_ar + alpha_ar) -
96+ inv_logit( X1[k] * b_ar+ alpha_ar));
8097 }
81- delta_me = me_ipw - me_ar;
82-
98+ delta_ipw_raw = me_ipw - me_raw;
99+ delta_ipw_ar = me_ipw - me_ar;
100+ delta_ar_raw = me_ar - me_raw;
83101}
84102
0 commit comments