-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspline.stan
54 lines (44 loc) · 942 Bytes
/
spline.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
data{
int<lower=0> nb;
int<lower=0> ns;
int<lower=0> ny;
matrix[ny, ns] Y;
matrix[ny, nb] B;
}
parameters{
matrix[nb, ns] alpha;
real<lower=0> sigma[ns];
real log_sigma_alpha[ns];
real mu_sigma;
real<lower=0> tau;
}
transformed parameters{
matrix[ny, ns] mu;
mu = B*alpha;
}
model{
//likelihood
for(i in 1:ns) {
for (j in 1:ny) {
Y[j, i] ~ normal(mu[j, i], sigma[i]);
}
}
//priors
for (i in 1:ns) {
alpha[1, i] ~ normal(0, exp(log_sigma_alpha[i]));
alpha[2, i] ~ normal(0, exp(log_sigma_alpha[i]));
alpha[3:nb, i] ~ normal(2*alpha[2:(nb-1), i] - alpha[1:(nb-2), i], exp(log_sigma_alpha[i]));
}
log_sigma_alpha ~ normal(mu_sigma, tau);
mu_sigma ~ normal(0, 1);
tau ~ normal(0, 1);
sigma ~ normal(0, 1);
}
generated quantities{
matrix[ny, ns] Y_rep;
for (i in 1:ns) {
for(j in 1:ny) {
Y_rep[j, i]= normal_rng(mu[j, i], sigma[i]);
}
}
}