Skip to content

Commit d036390

Browse files
committed
added preliminary 17.1 stan model code
1 parent 77f1f38 commit d036390

File tree

5 files changed

+241
-0
lines changed

5 files changed

+241
-0
lines changed

ARM/Ch.17/radon_correlation.stan

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
data {
2+
int<lower=0> N;
3+
int<lower=0> J;
4+
vector[N] y;
5+
int<lower=0,upper=1> x[N];
6+
int county[N];
7+
}
8+
parameters {
9+
real<lower=0> sigma;
10+
real<lower=0> sigma_a;
11+
real<lower=0> sigma_b;
12+
real mu_a;
13+
real mu_b;
14+
real<lower=-1,upper=1> rho;
15+
matrix[J,2] B;
16+
}
17+
model {
18+
vector[N] y_hat;
19+
vector[J] a;
20+
vector[J] b;
21+
matrix[J,2] B_hat;
22+
matrix[2,2] Sigma_b;
23+
24+
mu_a ~ normal(0, 100);
25+
mu_b ~ normal(0, 100);
26+
rho ~ uniform(-1, 1);
27+
28+
Sigma_b[1,1] <- pow(sigma_a, 2);
29+
Sigma_b[2,2] <- pow(sigma_b, 2);
30+
Sigma_b[1,2] <- rho * sigma_a * sigma_b;
31+
Sigma_b[2,1] <- Sigma_b[1,2];
32+
33+
for (j in 1:J) {
34+
B_hat[j,1] <- mu_a;
35+
B_hat[j,2] <- mu_b;
36+
B[j,1:2] ~ multi_normal(B_hat[j,],Sigma_b);
37+
}
38+
39+
for (j in 1:J) {
40+
a[j] <- B[j,1];
41+
b[j] <- B[j,2];
42+
}
43+
44+
for (i in 1:N)
45+
y_hat[i] <- a[county[i]] + b[county[i]] * x[i]
46+
47+
y ~ normal(y_hat, sigma);
48+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
data {
2+
int<lower=0> N;
3+
int<lower=0> J;
4+
vector[N] y;
5+
int<lower=0,upper=1> x[N];
6+
int county[N];
7+
}
8+
parameters {
9+
real<lower=0> sigma;
10+
vector<lower=0>[K] sigma_b;
11+
vector[K] mu_raw;
12+
vector[K] xi;
13+
matrix[J,K] B_raw;
14+
matrix[K,K] W;
15+
matrix[K,K] Tau_b_raw;
16+
}
17+
model {
18+
vector[N] y_hat;
19+
matrix[J,K] B;
20+
matrix[K,K] rho_b;
21+
matrix[K,K] Sigma_b_raw;
22+
vector[K] mu_raw;
23+
24+
mu_raw ~ normal(0, 100);
25+
xi ~ uniform(0, 100);
26+
27+
mu <- xi .* mu_raw;
28+
29+
Tau_b_raw ~ wishart(W, K+1);
30+
Sigma_b_raw <- inverse(Tau_b_raw);
31+
32+
for (j in 1:J) {
33+
for (k in 1:K)
34+
B[j,k] <- xi[k] * B_raw[j,k];
35+
B_raw[j,] ~ multi_normal(mu_raw, Sigma_b_raw);
36+
}
37+
38+
for (k in 1:K) {
39+
for (k_prime in 1:K)
40+
rho_b[k,k_prime] <- Sigma_b_raw[k,k_prime]
41+
/ sqrt(Sigma_b_raw[k,k] * Sigma_b_raw[k_prime,k_prime]);
42+
sigma_b[k] <- abs(xi[k]) * sqrt(Sigma_b_raw[k,k]);
43+
}
44+
45+
for (i in 1:N)
46+
y_hat[i] <- dot_product(B[county[i],],X[i,]);
47+
48+
y ~ normal(y_hat, sigma);
49+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
data {
2+
int<lower=0> N;
3+
int<lower=0> J;
4+
vector[N] y;
5+
int<lower=0,upper=1> x[N];
6+
int county[N];
7+
}
8+
parameters {
9+
real<lower=0> sigma;
10+
vector<lower=0>[K] sigma_b;
11+
vector[K] mu_raw;
12+
vector[K] xi;
13+
matrix[J,K] B_raw;
14+
matrix[K,K] W;
15+
matrix[K,K] Tau_b_raw;
16+
matrix[N,K] X_0;
17+
vector[K] b_0;
18+
}
19+
model {
20+
vector[N] y_hat;
21+
matrix[J,K] B;
22+
matrix[K,K] rho_b;
23+
matrix[K,K] Sigma_b_raw;
24+
vector[K] mu_raw;
25+
26+
mu_raw ~ normal(0, 100);
27+
xi ~ uniform(0, 100);
28+
b_0 ~ normal(0, 100);
29+
30+
mu <- xi .* mu_raw;
31+
32+
Tau_b_raw ~ wishart(W, K+1);
33+
Sigma_b_raw <- inverse(Tau_b_raw);
34+
35+
for (j in 1:J) {
36+
for (k in 1:K)
37+
B[j,k] <- xi[k] * B_raw[j,k];
38+
B_raw[j,] ~ multi_normal(mu_raw, Sigma_b_raw);
39+
}
40+
41+
for (k in 1:K) {
42+
for (k_prime in 1:K)
43+
rho_b[k,k_prime] <- Sigma_b_raw[k,k_prime]
44+
/ sqrt(Sigma_b_raw[k,k] * Sigma_b_raw[k_prime,k_prime]);
45+
sigma_b[k] <- abs(xi[k]) * sqrt(Sigma_b_raw[k,k]);
46+
}
47+
48+
for (i in 1:N)
49+
y_hat[i] <- dot_product(b_0,X_0[i,]) + dot_product(B[county[i],],X[i,]);
50+
51+
y ~ normal(y_hat, sigma);
52+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
data {
2+
int<lower=0> N;
3+
int<lower=0> J;
4+
vector[N] y;
5+
int<lower=0,upper=1> x[N];
6+
int county[N];
7+
}
8+
parameters {
9+
real<lower=0> sigma;
10+
real<lower=0> sigma_a;
11+
real<lower=0> sigma_b;
12+
vector[J] a;
13+
vector[J] b;
14+
real mu_a;
15+
real mu_b;
16+
}
17+
transformed parameters {
18+
vector[N] y_hat;
19+
20+
for (i in 1:N)
21+
y_hat[i] <- a[county[i]] + b[county[i]] * x[i]
22+
}
23+
model {
24+
mu_a ~ normal(0, 100);
25+
mu_b ~ normal(0, 100);
26+
27+
a ~ normal(mu_a, sigma_a);
28+
b ~ normal(mu_b, sigma_b);
29+
y ~ normal(y_hat, sigma);
30+
}

ARM/Ch.17/radon_wishart2.stan

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
data {
2+
int<lower=0> N;
3+
int<lower=0> J;
4+
vector[N] y;
5+
int<lower=0,upper=1> x[N];
6+
int county[N];
7+
}
8+
parameters {
9+
real<lower=0> sigma;
10+
real<lower=0> sigma_a;
11+
real<lower=0> sigma_b;
12+
real mu_a_raw;
13+
real mu_b_raw;
14+
real xi_a;
15+
real xi_b;
16+
real<lower=-1,upper=1> rho;
17+
matrix[J,2] B_raw;
18+
matrix[2,2] W;
19+
matrix[2,2] Tau_b_raw;
20+
vector[K] b_0;
21+
matrix[N,K] X_0;
22+
}
23+
model {
24+
vector[N] y_hat;
25+
vector[J] a;
26+
vector[J] b;
27+
matrix[J,2] B_raw_hat;
28+
matrix[J,2] B_raw;
29+
matrix[2,2] Sigma_b_raw;
30+
real mu_a;
31+
real mu_b;
32+
33+
mu_a_raw ~ normal(0, 100);
34+
mu_b_raw ~ normal(0, 100);
35+
xi_a ~ uniform(0, 100);
36+
xi_b ~ uniform(0, 100);
37+
rho ~ uniform(-1, 1);
38+
b_0 ~ normal(0, 100);
39+
40+
mu_a <- xi_a * mu_a_raw;
41+
mu_b <- xi_b * mu_b_raw;
42+
43+
Tau_b_raw ~ wishart(W, 3);
44+
Sigma_b_raw <- inverse(Tau_b_raw);
45+
46+
sigma_a <- xi_a * sqrt(Sigma_b_raw[1,1]);
47+
sigma_b <- xi_b * sqrt(Sigma_b_raw[2,2]):
48+
rho <- Sigma_b_raw[1,2] / sqrt(Sigma_b_raw[1,1] * Sigma_b_raw[2,2]);
49+
50+
for (j in 1:J) {
51+
B_raw_hat[j,1] <- mu_a_raw;
52+
B_raw_hat[j,2] <- mu_b_raw;
53+
B_raw[j,1:2] ~ multi_normal(B_raw_hat[j,], Sigma_b_raw);
54+
a[j] <- xi_a * B_raw[j,1];
55+
b[j] <- xi_b * B_raw[j,2];
56+
}
57+
58+
for (i in 1:N)
59+
y_hat[i] <- dot_product(b_0,X_0[i,]) + a[county[i]] + b[county[i]] * x[i]
60+
61+
y ~ normal(y_hat, sigma);
62+
}

0 commit comments

Comments
 (0)