Skip to content

Commit afd307b

Browse files
committed
add 17.2 models and changed naming of 17.1 models
1 parent d036390 commit afd307b

9 files changed

+181
-11
lines changed
File renamed without changes.
File renamed without changes.
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+
real<lower=0> sigma_a;
11+
real<lower=0> sigma_b;
12+
real g_a_0;
13+
real g_a_1;
14+
real g_b_0;
15+
real g_b_1;
16+
real<lower=-1,upper=1> rho;
17+
matrix[J,2] B;
18+
}
19+
model {
20+
vector[N] y_hat;
21+
vector[J] a;
22+
vector[J] b;
23+
matrix[J,2] B_hat;
24+
matrix[2,2] Sigma_b;
25+
26+
g_a_0 ~ normal(0, 100);
27+
g_a_1 ~ normal(0, 100);
28+
g_b_0 ~ normal(0, 100);
29+
g_b_1 ~ normal(0, 100);
30+
rho ~ uniform(-1, 1);
31+
32+
Sigma_b[1,1] <- pow(sigma_a, 2);
33+
Sigma_b[2,2] <- pow(sigma_b, 2);
34+
Sigma_b[1,2] <- rho * sigma_a * sigma_b;
35+
Sigma_b[2,1] <- Sigma_b[1,2];
36+
37+
for (j in 1:J) {
38+
B_hat[j,1] <- g_a_0 + g_a_1 * u[j];
39+
B_hat[j,2] <- g_b_0 + g_b_1 * u[j];
40+
B[j,1:2] ~ multi_normal(B_hat[j,],Sigma_b);
41+
}
42+
43+
for (j in 1:J) {
44+
a[j] <- B[j,1];
45+
b[j] <- B[j,2];
46+
}
47+
48+
for (i in 1:N)
49+
y_hat[i] <- a[county[i]] + b[county[i]] * x[i]
50+
51+
y ~ normal(y_hat, sigma);
52+
}
Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
data {
22
int<lower=0> N;
33
int<lower=0> J;
4+
int<lower=0> L;
45
vector[N] y;
6+
vector[L] U;
57
int<lower=0,upper=1> x[N];
68
int county[N];
79
}
@@ -13,40 +15,48 @@ parameters {
1315
matrix[J,K] B_raw;
1416
matrix[K,K] W;
1517
matrix[K,K] Tau_b_raw;
16-
matrix[N,K] X_0;
17-
vector[K] b_0;
18+
matrix[K,L] G_raw;
1819
}
1920
model {
2021
vector[N] y_hat;
2122
matrix[J,K] B;
2223
matrix[K,K] rho_b;
2324
matrix[K,K] Sigma_b_raw;
2425
vector[K] mu_raw;
26+
matrix[K,L] G;
2527

26-
mu_raw ~ normal(0, 100);
2728
xi ~ uniform(0, 100);
28-
b_0 ~ normal(0, 100);
29-
30-
mu <- xi .* mu_raw;
3129

3230
Tau_b_raw ~ wishart(W, K+1);
3331
Sigma_b_raw <- inverse(Tau_b_raw);
3432

35-
for (j in 1:J) {
36-
for (k in 1:K)
33+
for (k in 1:K)
34+
for (j in 1:J)
3735
B[j,k] <- xi[k] * B_raw[j,k];
38-
B_raw[j,] ~ multi_normal(mu_raw, Sigma_b_raw);
36+
37+
for (k in 1:K){
38+
for (l in 1:L){
39+
G_raw[k,l] ~ normal(0, 100);
40+
G[k,l] <- xi[k] + G_raw[k,l];
41+
}
3942
}
4043

44+
for (j in 1:J)
45+
for (k in 1:K)
46+
B_raw_hat[j,k] <- dot_product(G_raw[k,],U[j,]);
47+
48+
for (j in 1:J)
49+
B_raw[j,] ~ multi_normal(B_raw_hat[j,], Sigma_b_raw);
50+
4151
for (k in 1:K) {
52+
sigma_b[k] <- abs(xi[k]) * sqrt(Sigma_b_raw[k,k]);
4253
for (k_prime in 1:K)
4354
rho_b[k,k_prime] <- Sigma_b_raw[k,k_prime]
4455
/ 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]);
4656
}
4757

4858
for (i in 1:N)
49-
y_hat[i] <- dot_product(b_0,X_0[i,]) + dot_product(B[county[i],],X[i,]);
59+
y_hat[i] <- dot_product(B[county[i],],X[i,]);
5060

5161
y ~ normal(y_hat, sigma);
5262
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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 g_a_0;
13+
real g_a_1;
14+
real g_b_0;
15+
real g_b_1;
16+
vector[J] a;
17+
vector[J] b;
18+
vector[J] a_hat;
19+
vector[J] b_hat;
20+
real mu_a;
21+
real mu_b;
22+
}
23+
transformed parameters {
24+
vector[N] y_hat;
25+
26+
for (i in 1:N)
27+
y_hat[i] <- a[county[i]] + b[county[i]] * x[i]
28+
}
29+
model {
30+
mu_a ~ normal(0, 100);
31+
mu_b ~ normal(0, 100);
32+
33+
a ~ normal(mu_a, sigma_a);
34+
b ~ normal(mu_b, sigma_b);
35+
36+
g_a_0 ~ normal(0, 100);
37+
g_a_1 ~ normal(0, 100);
38+
g_b_0 ~ normal(0, 100);
39+
g_b_1 ~ normal(0, 100);
40+
41+
a_hat <- g_a_0 + g_a_1 * u;
42+
b_hat <- g_b_0 + g_b_1 * u;
43+
44+
y ~ normal(y_hat, sigma);
45+
}

ARM/Ch.17/17.2_radon_wishart.stan

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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+
}
21+
model {
22+
vector[N] y_hat;
23+
vector[J] a;
24+
vector[J] b;
25+
matrix[J,2] B_raw_hat;
26+
matrix[J,2] B_raw;
27+
matrix[2,2] Sigma_b_raw;
28+
real g_a_0;
29+
real g_a_1;
30+
real g_b_0;
31+
real g_b_1;
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+
39+
g_a_0 <- xi_a * mu_a_raw;
40+
g_a_1 <- xi_a * mu_a_raw;
41+
g_b_0 <- xi_b * mu_b_raw;
42+
g_b_1 <- xi_b * mu_b_raw;
43+
44+
Tau_b_raw ~ wishart(W, 3);
45+
Sigma_b_raw <- inverse(Tau_b_raw);
46+
47+
sigma_a <- xi_a * sqrt(Sigma_b_raw[1,1]);
48+
sigma_b <- xi_b * sqrt(Sigma_b_raw[2,2]):
49+
rho <- Sigma_b_raw[1,2] / sqrt(Sigma_b_raw[1,1] * Sigma_b_raw[2,2]);
50+
51+
for (j in 1:J) {
52+
B_raw_hat[j,1] <- g_a_0 + g_a_1 * u[j];
53+
B_raw_hat[j,2] <- g_b_0 + g_b_1 * u[j];
54+
B_raw[j,1:2] ~ multi_normal(B_raw_hat[j,], Sigma_b_raw);
55+
a[j] <- xi_a * B_raw[j,1];
56+
b[j] <- xi_b * B_raw[j,2];
57+
}
58+
59+
for (i in 1:N)
60+
y_hat[i] <- a[county[i]] + b[county[i]] * x[i]
61+
62+
y ~ normal(y_hat, sigma);
63+
}

0 commit comments

Comments
 (0)