-
Notifications
You must be signed in to change notification settings - Fork 0
/
gerard11_rubin.stan
105 lines (88 loc) · 2.27 KB
/
gerard11_rubin.stan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#./gerard11 sample num_warmup=5000 num_samples=5000 data file=data.R init=init11.R output file=output11.csv refresh=1000
data {
int D; // Number of supernovae
int N_mags;
int N_EWs;
vector[N_mags] mag_obs[D];
vector[N_EWs] EW_obs[D];
matrix[N_mags, N_mags] mag_cov[D];
matrix[N_EWs, N_EWs] EW_cov[D];
vector[D] sivel_obs;
vector[D] sivel_err;
}
parameters {
vector[5] c_raw;
vector[5] alpha_raw;
vector[5] beta_raw;
# vector<lower=0.0>[N_mags] L_sigma_raw;
vector[5] eta_raw;
real<lower=0> gamma01;
real gamma02;
real gamma03;
real gamma04;
real gamma05;
real<upper=0> rho11;
real rho12;
real rho13;
real rho14;
real rho15;
real <lower=0> Delta_scale;
# cholesky_factor_corr[N_mags] L_Omega;
vector[2] EW[D];
vector[D] sivel;
# vector[N_mags] mag_int_raw[D];
simplex[D] Delta_unit;
simplex[D] k_unit;
simplex[D] R_unit;
}
transformed parameters {
vector[5] c;
vector[5] alpha;
vector[5] beta;
vector[5] eta;
# vector[N_mags] L_sigma;
vector[D] Delta;
vector[D] k;
vector[D] R;
vector[5] gamma;
vector[5] rho1;
vector[N_mags] mag_int[D];
c = c_raw/1e2;
alpha = alpha_raw/5e2;
beta = beta_raw/2e2;
eta = eta_raw/6e2;
# L_sigma = L_sigma_raw/100.;
Delta = 4.*Delta_scale*(Delta_unit-1./D);
k=(k_unit-1./D);
R=(R_unit-1./D);
gamma[1] = gamma01;
gamma[2] = gamma02;
gamma[3] = gamma03;
gamma[4] = gamma04;
gamma[5] = gamma05;
gamma = gamma*5;
rho1[1] = rho11;
rho1[3] = rho13;
rho1[4] = rho14;
rho1[5] = rho15;
rho1[2] = rho12;
rho1 = rho1*5;
# non-centered parameterization
{
matrix[5,5] L_Sigma;
# L_Sigma = diag_pre_multiply(L_sigma, L_Omega);
for (d in 1:D) {
mag_int[d] = Delta[d] + c+ alpha*EW[d,1] + beta*EW[d,2] + eta*sivel[d];
}
}
}
model {
# target += cauchy_lpdf(L_sigma | 0.1,0.1);
# target += lkj_corr_cholesky_lpdf(L_Omega | 4.);
for (d in 1:D) {
# target += normal_lpdf(mag_int_raw[d]| 0, 1);
target += multi_normal_lpdf(mag_obs[d] | mag_int[d]+gamma*k[d] + rho1*R[d], mag_cov[d]);
target += multi_normal_lpdf(EW_obs[d] | EW[d], EW_cov[d]);
}
target += (normal_lpdf(sivel_obs | sivel,sivel_err));
}