11# # http://www.openbugs.info/Examples/Salm.html
22# # this matches the jags implementation
33data {
4- int < lower =0 > doses ;
5- int < lower =0 > plates ;
6- int < lower =0 > y[doses,plates ];
7- real x[doses ];
4+ int < lower =0 > Ndoses ;
5+ int < lower =0 > Nplates ;
6+ int < lower =0 > y[Ndoses,Nplates ];
7+ real x[Ndoses ];
88}
99transformed data {
10- real logx[doses ];
10+ real logx[Ndoses ];
1111 real mean_x;
1212 real mean_logx;
13- real centered_x[doses ];
14- real centered_logx[doses ];
13+ real centered_x[Ndoses ];
14+ real centered_logx[Ndoses ];
1515
1616 mean_x <- mean( x);
17- for (dose in 1 : doses )
17+ for (dose in 1 : Ndoses )
1818 centered_x[dose] <- x[dose] - mean_x;
1919
20- for (dose in 1 : doses )
20+ for (dose in 1 : Ndoses )
2121 logx[dose] <- log( x[dose] + 10 );
2222 mean_logx <- mean( logx);
23- for (dose in 1 : doses )
23+ for (dose in 1 : Ndoses )
2424 centered_logx[dose] <- logx[dose] - mean_logx;
2525}
2626parameters {
2727 real alpha_star;
2828 real beta;
2929 real gamma;
3030 real < lower =0 > tau;
31- real lambda[doses,plates ];
31+ vector [Nplates] lambda[Ndoses ];
3232}
3333transformed parameters {
3434 real < lower =0 > sigma;
@@ -37,18 +37,17 @@ transformed parameters {
3737 alpha <- alpha_star - beta * mean_logx - gamma * mean_x;
3838 sigma <- 1.0 / sqrt( tau);
3939}
40+
4041model {
4142 alpha_star ~ normal (0.0 ,1.0E3 );
4243 beta ~ normal (0.0 ,1000 );
4344 gamma ~ normal (0.0 ,1000 );
4445 tau ~ gamma (0.001 ,0.001 );
45- for (dose in 1 : doses) {
46- for (plate in 1 : plates) {
47- lambda[dose,plate] ~ normal (0.0 , sigma);
48- y[dose,plate] ~ poisson (exp( alpha_star
49- + beta * centered_logx[dose]
50- + gamma * centered_x[dose]
51- + lambda[dose,plate]) );
52- }
46+ for (dose in 1 : Ndoses) {
47+ lambda[dose] ~ normal (0.0 , sigma);
48+ y[dose] ~ poisson_log (alpha_star
49+ + beta * centered_logx[dose]
50+ + gamma * centered_x[dose]
51+ + lambda[dose]);
5352 }
5453}
0 commit comments