Nothing
## -----------------------------------------------------------------------------
library(amen)
Y<-sheep$dom
age<-sheep$age
Y[1:8,1:8]
age[1:8]
## ----echo=c(-1)---------------------------------------------------------------
par(mfrow=c(1,2),mar=c(3,3,1,1),mgp=c(1.75,.75,0))
boxplot( apply(Y,1,mean,na.rm=TRUE) ~ age )
boxplot( apply(Y,2,mean,na.rm=TRUE) ~ age )
## -----------------------------------------------------------------------------
x<-sheep$age - mean(sheep$age)
X<-design_array(Xrow=x,Xcol=x,Xdyad=outer(x,x))
## -----------------------------------------------------------------------------
Z<-log(Y+1) ; diag(Z)<-0
Sab<-diag(2)
R<-1 ; Suv<-diag(2*R) ; U<-V<-matrix(0,nrow(Y),R)
s2<-1 ; rho<-0
## -----------------------------------------------------------------------------
for(s in 1:10)
{
# update beta, a and b
tmp<-rbeta_ab_fc(Z,Sab,rho,X,s2,offset=U%*%t(V))
beta<-tmp$beta ; a<-tmp$a ; b<-tmp$b
# update UV
tmp<-rUV_fc(Z,U,V,Suv,rho,offset=Xbeta(X,beta)+outer(a,b,"+"))
U<-tmp$U ; V<-tmp$V
# update Sab
Sab<-rSab_fc(a,b)
# update Suv
Suv<-rSuv_fc(U,V)
# update s2
s2<-rs2_fc(Z,rho,offset=Xbeta(X,beta)+outer(a,b,"+")+U%*%t(V))
# update rho
rho<-rrho_mh(Z,rho,s2,offset=Xbeta(X,beta)+outer(a,b,"+")+U%*%t(V))
}
## -----------------------------------------------------------------------------
# propose candidate Z
Zp<-Z+matrix(rnorm(nrow(Y)^2),nrow(Y),nrow(Y))*sqrt(s2)
# compute acceptance ratio
EZ<-Xbeta(X,beta)+outer(a,b,"+")+U%*%t(V)
lr<-ldZgbme(Zp,Y,function(y,z){ dpois(y,exp(z),log=TRUE) },EZ,rho,s2) -
ldZgbme(Z, Y,function(y,z){ dpois(y,exp(z),log=TRUE) },EZ,rho,s2)
# simulate symmetric matrix of (log) uniform rvs
lh<-matrix(log(runif(nrow(Y)^2)),nrow(Y),nrow(Y))
lh[lower.tri(lh)]<-t(lh)[lower.tri(lh)]
# update dyads for which lr>lh, and keep track of acceptances
Z[lr>lh]<-Zp[lr>lh]
## ----results="hide",cache=TRUE,fig.keep='last'--------------------------------
#### Starting values
Z<-log(Y+1) ; diag(Z)<-0
Sab<-diag(2)
R<-1 ; Suv<-diag(2*R) ; U<-V<-matrix(0,nrow(Y),R)
s2<-1 ; rho<-0
#### Parameter values to be saved
BETA<-VE<-LL<-NULL
ACC<-matrix(0,nrow(Y),nrow(Y))
#### MCMC
set.seed(1)
for(s in 1:10000)
{
## Update AMEN parameters
# update beta, a and b
tmp<-rbeta_ab_fc(Z,Sab,rho,X,s2,offset=U%*%t(V))
beta<-tmp$beta ; a<-tmp$a ; b<-tmp$b
# update UV
tmp<-rUV_fc(Z,U,V,Suv,rho,offset=Xbeta(X,beta)+outer(a,b,"+"))
U<-tmp$U ; V<-tmp$V
# update Sab
Sab<-rSab_fc(a,b)
# update Suv
Suv<-rSuv_fc(U,V)
# update s2
s2<-rs2_fc(Z,rho,offset=Xbeta(X,beta)+outer(a,b,"+")+U%*%t(V))
# update rho
rho<-rrho_mh(Z,rho,s2,offset=Xbeta(X,beta)+outer(a,b,"+")+U%*%t(V))
## Update Z
# propose candidate Z
Zp<-Z+matrix(rnorm(nrow(Y)^2),nrow(Y),nrow(Y))*sqrt(s2)
# compute acceptance ratio
EZ<-Xbeta(X,beta)+outer(a,b,"+")+U%*%t(V)
lr<-ldZgbme(Zp,Y,function(y,z){ dpois(y,exp(z),log=TRUE) },EZ,rho,s2) -
ldZgbme(Z, Y,function(y,z){ dpois(y,exp(z),log=TRUE) },EZ,rho,s2)
# simulate symmetric matrix of (log) uniform rvs
lh<-matrix(log(runif(nrow(Y)^2)),nrow(Y),nrow(Y))
lh[lower.tri(lh)]<-t(lh)[lower.tri(lh)]
# update dyads for which lr>lh, and keep track of acceptances
Z[lr>lh]<-Zp[lr>lh]
ACC[lr>lh]<-ACC[lr>lh]+1
## Output
if(s%%25==0)
{
cat(s,range(ACC/s),"\n")
BETA<-rbind(BETA,beta)
VE<-rbind(VE,c(s2,rho))
par(mfrow=c(1,3),mar=c(3,3,1,1),mgp=c(1.75,.75,0))
matplot(BETA,type="l")
LL<-c(LL,sum(dpois(Y,exp(Z),log=TRUE),na.rm=TRUE)) ; plot(LL,type="l")
hist(ACC/s)
}
}
## -----------------------------------------------------------------------------
apply(BETA,2,mean)
apply(BETA,2,sd)
## -----------------------------------------------------------------------------
apply(VE,2,mean)
apply(VE,2,sd)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.