# NOT RUN {
library(rethinking)
data(chimpanzees)
# note that Stan doesn't allow "." in variable names
# we replace them with _
# also don't want any variables with NAs
d <- list(
pulled_left = chimpanzees$pulled.left ,
prosoc_left = chimpanzees$prosoc.left ,
condition = chimpanzees$condition ,
actor = as.integer( chimpanzees$actor ) ,
blockid = as.integer( chimpanzees$block )
)
# RStan fit
m2 <- map2stan(
list(
pulled_left ~ dbinom(1,theta),
logit(theta) ~ a + bp*prosoc_left + bpc*condition*prosoc_left ,
a ~ dnorm(0,10),
bp ~ dnorm(0,10),
bpc ~ dnorm(0,10)
) ,
data=d,
start=list(a=0,bp=0,bpc=0)
)
precis(m2)
summary(m2)
plot(m2)
pairs(m2)
# now RStan fit of model with varying intercepts on actor
# note initial values for each varying intercept in start
m3 <- map2stan(
list(
pulled_left ~ dbinom(1,theta),
logit(theta) ~ a + aj + bp*prosoc_left + bpc*condition*prosoc_left,
aj[actor] ~ dnorm( 0 , sigma_actor ),
a ~ dnorm(0,10),
bp ~ dnorm(0,10),
bpc ~ dnorm(0,10),
sigma_actor ~ dcauchy(0,1)
) ,
data=d,
start=list(a=0,bp=0,bpc=0,sigma_actor=1,aj=rep(0,max(d$actor))),
iter=7000 , warmup=1000 , chains=2
)
precis(m3)
plot(m3)
pairs(m3)
# varying intercepts on actor and experimental block
m4 <- map2stan(
list(
pulled_left ~ dbinom(1,theta),
logit(theta) ~ a + aj + ak + bp*prosoc_left + bpc*condition*prosoc_left,
aj[actor] ~ dnorm( 0 , sigma_actor ),
ak[blockid] ~ dnorm( 0 , sigma_block ),
a ~ dnorm(0,10),
bp ~ dnorm(0,10),
bpc ~ dnorm(0,10),
sigma_actor ~ dcauchy(0,1),
sigma_block ~ dcauchy(0,1)
) ,
data=d,
start=list(a=0,bp=0,bpc=0,sigma_actor=1,sigma_block=1,aj=rep(0,7),ak=rep(0,max(d$blockid))),
iter=20000 , warmup=5000 , chains=2
)
precis(m4)
summary(m4)
plot(m4)
# compare posterior means
coeftab(m2,m3,m4)
# show DIC for m2,m3,m4
sapply( list(m2,m3,m4) , DIC )
# }
Run the code above in your browser using DataLab