Skip to content

Commit 2afe64e

Browse files
committed
correct stan model in description of analysis
1 parent 3e3c2e0 commit 2afe64e

File tree

1 file changed

+42
-24
lines changed

1 file changed

+42
-24
lines changed

AnalysisBIPW/Stan/bebi_logit_deltaAR_2SB.stan

Lines changed: 42 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,30 @@ functions {
33
}
44

55
data {
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

1617
transformed 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

3336
parameters {
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

4349
transformed 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

5059
model {
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

7182
generated 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

Comments
 (0)