Skip to content

Commit d9157c2

Browse files
committed
updated rest of Ch17 ARM models with R files
1 parent 346b846 commit d9157c2

File tree

6 files changed

+91
-35
lines changed

6 files changed

+91
-35
lines changed

ARM/Ch.17/17.4_multilevel_logistic.stan

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ data {
99
int<lower=0, upper=1> black[N];
1010
int<lower=0, upper=n_age> age[N];
1111
int<lower=0, upper=n_edu> edu[N];
12-
int<lower=0, upper=n_state> region[N];
12+
int<lower=0, upper=n_state> region[n_state];
1313
int<lower=0, upper=n_state> state[N];
1414
int<lower=0, upper=1> y[N];
15+
vector[n_state] v_prev;
1516
}
1617
parameters {
1718
real<lower=0> sigma;
@@ -48,8 +49,10 @@ model {
4849
b_edu ~ normal(0, sigma_edu);
4950
b_region ~ normal(0, sigma_region);
5051

51-
for (j in 1:n_age)
52-
b_age_edu[j,] ~ normal(0, sigma_age_edu);
52+
for (j in 1:n_age) {
53+
for (i in 1:n_edu)
54+
b_age_edu[j,i] ~ normal(0, sigma_age_edu);
55+
}
5356

5457
b_v_prev ~ normal(0, 100);
5558

@@ -59,10 +62,10 @@ model {
5962
b_hat ~ normal(b_state_hat, sigma_state);
6063

6164
for (i in 1:N)
62-
p[i] <- max(0, min(1, inv_logit(b_0 + b_female*female[i]
65+
p[i] <- fmax(0, fmin(1, inv_logit(b_0 + b_female*female[i]
6366
+ b_black*black[i] + b_female_black*female[i]*black[i] +
6467
b_age[age[i]] + b_edu[edu[i]] + b_age_edu[age[i],edu[i]] +
65-
b_state[state[i]])));
68+
b_hat[state[i]])));
6669

67-
y ~ binomial(1, p);
70+
y ~ bernoulli(p);
6871
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
library(rstan)
2+
3+
polls.subset <- read.table ("polls.subset.dat")
4+
attach (polls.subset)
5+
6+
# Load in data for region indicators
7+
# Use "state", an R data file (type ?state from the R command window for info)
8+
#
9+
# Regions: 1=northeast, 2=south, 3=north central, 4=west, 5=d.c.
10+
# We have to insert d.c. (it is the 9th "state" in alphabetical order)
11+
12+
data (state) # "state" is an R data file
13+
state.abbr <- c (state.abb[1:8], "DC", state.abb[9:50])
14+
dc <- 9
15+
not.dc <- c(1:8,10:51)
16+
region <- c(3,4,4,3,4,4,1,1,5,3,3,4,4,2,2,2,2,3,3,1,1,1,2,2,3,2,4,2,4,1,1,4,1,3,2,2,3,4,1,1,3,2,3,3,4,1,3,4,1,2,4)
17+
18+
# define other data summaries
19+
20+
y <- bush # 1 if support bush, 0 if support dukakis
21+
n <- length(y) # of survey respondents
22+
n.age <- max(age) # of age categories
23+
n.edu <- max(edu) # of education categories
24+
n.state <- max(state) # of states
25+
n.region <- max(region) # of regions
26+
27+
# also include a measure of previous vote as a state-level predictor
28+
29+
library (foreign)
30+
presvote <- read.dta ("presvote.dta")
31+
attach (presvote)
32+
v.prev <- presvote$g76_84pr
33+
age.edu <- n.edu*(age-1) + edu
34+
35+
ok <- !is.na(female+black+age+edu+state+y)
36+
# election model
37+
dataList.1 <- list(N=length(y[ok]), n_age=n.age, n_edu=n.edu, n_region=n.region, n_state=n.state,
38+
female=female[ok], black=black[ok],age=age[ok], edu=edu[ok],
39+
region=region, state=state[ok],y=y[ok],v_prev=v.prev)
40+
multilevel_logistic.sf1 <- stan(file='17.4_multilevel_logistic.stan', data=dataList.1,
41+
iter=1000, chains=4)
42+
print(multilevel_logistic.sf1)
43+

ARM/Ch.17/17.5_multilevel_poisson.stan

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ data {
55

66
int<lower=0, upper=n_precint> precint[N];
77
int<lower=0, upper=n_eth> eth[N];
8-
vector offeset[N];
9-
vector stops[N];
8+
vector[N] offeset;
9+
int<lower=0> stops[N];
1010
}
1111
parameters {
1212
real mu;
@@ -22,6 +22,7 @@ model {
2222
real mu_adj;
2323
vector[n_eth] b_eth_adj;
2424
vector[n_precint] b_precint_adj;
25+
vector[N] lambda;
2526

2627
mu ~ normal(0, 100);
2728
mu_adj <- mu + mean(b_eth) + mean(b_precint);

ARM/Ch.17/17.6_multilevel_ordered_categorical.stan

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ data {
44
int<lower=0> n_player;
55

66
int<lower=0, upper=n_player> player[N];
7-
vector y[N];
7+
int<lower=0, upper=n_cut> y[N];
8+
vector[N] x;
89
}
910
parameters {
1011
vector[n_cut] mu_c;
@@ -41,6 +42,6 @@ model {
4142
}
4243

4344
for (i in 1:N)
44-
y[i] ~ categorical(P[i,]);
45+
y[i] ~ categorical(transpose(row(P,i)));
4546

4647
}

ARM/Ch.17/17.7_latent_glm.stan

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ data {
99
int<lower=0, upper=1> black[N];
1010
int<lower=0, upper=n_age> age[N];
1111
int<lower=0, upper=n_edu> edu[N];
12-
int<lower=0, upper=n_state> region[N];
12+
int<lower=0, upper=n_state> region[n_state];
1313
int<lower=0, upper=n_state> state[N];
1414
int<lower=0, upper=1> y[N];
15-
vector z[N]
15+
vector[n_state] v_prev;
16+
vector[N] z;
1617
}
1718
parameters {
1819
real<lower=0> sigma;
@@ -51,8 +52,10 @@ model {
5152
b_edu ~ normal(0, sigma_edu);
5253
b_region ~ normal(0, sigma_region);
5354

54-
for (j in 1:n_age)
55-
b_age_edu[j,] ~ normal(0, sigma_age_edu);
55+
for (j in 1:n_age) {
56+
for (i in 1:n_edu)
57+
b_age_edu[j,i] ~ normal(0, sigma_age_edu);
58+
}
5659

5760
b_v_prev ~ normal(0, 100);
5861

@@ -61,18 +64,19 @@ model {
6164

6265
b_state ~ normal(b_state_hat, sigma_state);
6366

64-
for (i in 1:N)
67+
for (i in 1:N) {
6568
Xbeta[i] <- b_0 + b_female*female[i]
6669
+ b_black*black[i] + b_female_black*female[i]*black[i] +
6770
b_age[age[i]] + b_edu[edu[i]] + b_age_edu[age[i],edu[i]] +
68-
b_state[state[i]]
69-
p[i] <- max(0, min(1, inv_logit(Xbeta[i])));
70-
71-
y ~ binomial(1, p);
71+
b_state[state[i]];
72+
p[i] <- fmax(0, fmin(1, inv_logit(Xbeta[i])));
73+
}
74+
75+
y ~ bernoulli(p);
7276

7377
for (i in 1:N) {
74-
z_lo[i] <- 100 * equals(y[i],0);
75-
z_hi[i] <- 100 * equals(y[i],1);
78+
z_lo[i] <- 100 * (y[i] == 0);
79+
z_hi[i] <- 100 * (y[i] == 1);
7680
z[i] ~ logistic(Xbeta[i],1) T[z_lo[i],z_hi[i]];
7781
}
7882

ARM/Ch.17/17.7_robit.stan

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ data {
99
int<lower=0, upper=1> black[N];
1010
int<lower=0, upper=n_age> age[N];
1111
int<lower=0, upper=n_edu> edu[N];
12-
int<lower=0, upper=n_state> region[N];
12+
int<lower=0, upper=n_state> region[n_state];
1313
int<lower=0, upper=n_state> state[N];
1414
int<lower=0, upper=1> y[N];
15-
vector z[N]
15+
vector[N] z;
16+
vector[N] v_prev;
1617
}
1718
parameters {
1819
real<lower=0> sigma_age;
@@ -27,9 +28,7 @@ parameters {
2728
real b_female_black;
2829

2930
real b_v_prev;
30-
real df_inv;
31-
real df;
32-
real<lower=0> sigma_z;
31+
real<lower=0> df_inv;
3332
vector[n_age] b_age;
3433
vector[n_edu] b_edu;
3534
vector[n_region] b_region;
@@ -42,6 +41,8 @@ model {
4241
vector[N] z_hi;
4342
vector[N] Xbeta;
4443
vector[n_state] b_state_hat;
44+
real df;
45+
real sigma_z;
4546

4647
b_0 ~ normal(0, 100);
4748
b_female ~ normal(0, 100);
@@ -52,8 +53,10 @@ model {
5253
b_edu ~ normal(0, sigma_edu);
5354
b_region ~ normal(0, sigma_region);
5455

55-
for (j in 1:n_age)
56-
b_age_edu[j,] ~ normal(0, sigma_age_edu);
56+
for (j in 1:n_age) {
57+
for(i in 1:n_edu)
58+
b_age_edu[j,i] ~ normal(0, sigma_age_edu);
59+
}
5760

5861
b_v_prev ~ normal(0, 100);
5962

@@ -62,23 +65,24 @@ model {
6265

6366
b_state ~ normal(b_state_hat, sigma_state);
6467

65-
for (i in 1:N)
68+
for (i in 1:N) {
6669
Xbeta[i] <- b_0 + b_female*female[i]
6770
+ b_black*black[i] + b_female_black*female[i]*black[i] +
6871
b_age[age[i]] + b_edu[edu[i]] + b_age_edu[age[i],edu[i]] +
69-
b_state[state[i]]
70-
p[i] <- max(0, min(1, inv_logit(Xbeta[i])));
72+
b_state[state[i]];
73+
p[i] <- fmax(0, fmin(1, inv_logit(Xbeta[i])));
74+
}
7175

72-
y ~ binomial(1, p);
76+
y ~ bernoulli(p);
7377

7478
df_inv ~ uniform(0, 0.5);
7579
df <- 1 / df_inv;
7680
sigma_z <- sqrt((df-2)/df);
7781

7882
for (i in 1:N) {
79-
z_lo[i] <- 100 * equals(y[i],0);
80-
z_hi[i] <- 100 * equals(y[i],1);
81-
z[i] ~ t(df,Xbeta[i],sigma_z) T[z_lo[i],z_hi[i]];
83+
z_lo[i] <- 100 * (y[i] == 0);
84+
z_hi[i] <- 100 * (y[i] == 1);
85+
z[i] ~ student_t(df,Xbeta[i],sigma_z) T[z_lo[i],z_hi[i]];
8286
}
8387

8488
}

0 commit comments

Comments
 (0)