-
Notifications
You must be signed in to change notification settings - Fork 0
/
gerard10.stan
82 lines (69 loc) · 1.99 KB
/
gerard10.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
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[2] EW[D];
vector[D] sivel;
vector[N_mags] mag_int_raw[D];
real <lower = 0> Delta_scale;
real <lower = 0> k_scale;
vector[5] c;
vector[5] alpha;
vector[5] beta;
vector[5] eta;
real gamma01;
real gamma03;
real gamma04;
real gamma05;
cholesky_factor_corr[N_mags] L_Omega;
vector<lower=0.0, upper=0.12>[N_mags] L_sigma;
simplex[D] Delta_unit;
simplex[D] k_unit;
}
transformed parameters {
vector[D] Delta;
vector[5] gamma;
vector[D] k;
vector[N_mags] mag_int[D];
gamma[1] = gamma01;
gamma[2] = gamma03+1;
gamma[3] = gamma03;
gamma[4] = gamma04;
gamma[5] = gamma05;
Delta = Delta_scale*(Delta_unit - 1./D);
k = k_scale*(k_unit - 1./D);
# 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] + L_Sigma * mag_int_raw[d];
}
}
}
model {
# Centered parameterization
# vector[5] means[D];
# matrix[5,5] L_Sigma;
# for (d in 1:D) {
# means[d] = Delta[d] + c+ alpha*EW[d,1] + beta*EW[d,2] + eta*sivel[d];
# }
# L_Sigma = diag_pre_multiply(L_sigma, L_Omega);
target += (cauchy_lpdf(L_sigma | 0.1,0.1));
target += (lkj_corr_cholesky_lpdf(L_Omega | 2.));
for (d in 1:D) {
# target += (multi_normal_cholesky_lpdf(mag_int[d] | means[d], L_Sigma));
target += normal_lpdf(mag_int_raw[d] | 0, 1); # non-centered parameterization
target += (multi_normal_lpdf(mag_obs[d] | mag_int[d]+gamma*k[d], mag_cov[d]));
target += (multi_normal_lpdf(EW_obs[d] | EW[d], EW_cov[d]));
}
target += (normal_lpdf(sivel_obs | sivel,sivel_err));
}