Generating simulated data with known parameters to recapture
nReps<-10
x<-seq(from=0,to=100,by=1)
x<-rep(x,nReps)
b0<-1.0; b1<-0.2
ymean<-b0+b1*x
y<-rnorm(n=length(ymean),mean=ymean,sd=1.5)
N<-length(y)
wtData<-data.frame(weight_lbs=y, height_in=x)
Metropolis Algorithym
Intialize the chain at some initial value of p
Generate a proposed value of p
Calculate acceptabce probability r
Accept proposed value of p with probability r
Repeat n times
nIter<-...
proposalSD<-...
priorMean<-...; priorSD<-...; alphaPrior<-...; betaPrior<-...
b0<-b1<-sd<-vector()
b0[1]<-...; b1[1]<-...; sd[1]<-... # Initial values
for(i in 1:nIter){ # Iterations in sample: i loop
# first sample b0 using a Metropolis step
b0Star<-rnorm(n=1,...)
r<-min(1, exp( posteriorLik(...) - posteriorLik(...) ) )
if(runif(1)<r) {
b0[i+1]<-b0Star
} else {
b0[i+1]<-b0[i]
}
# then sample b1 using a Metropolis step
# then sample sd^2 using a Gibbs step or a Metropolis step
wtPred<-...
myVar<-sampNormVar(...)
sd[i+1]<-sqrt(myVar)
}
Examining results using Coda
library(coda)
burnIn<-...
dataMCMCburnIn<-as.mcmc(cbind(b0[-c(1:burnIn)],b1[-c(1:burnIn)],sd[-c(1:burnIn)]))
densplot(dataMCMCburnIn)
HPDinterval(dataMCMCburnIn)
autocorr.plot(dataMCMCburnIn)
plot(dataMCMCburnIn)
Function defintions
sampNormVar<-function(yPred,alpha,beta,data){
require(invgamma)
yObs<-data$weight_lbs
n<-length(yPred)
alphaPrime<-...
betaPrime<-...
rinvgamma(n=1,shape=..., rate=...)
}
Data Likelihood
dataLik<-function(b0,b1,sd,data){
wt<-...
ht<-...
wtPred<-b0+b1*...
llik<- sum(dnorm(...,log=TRUE))
return(llik)
}
Normal Prior on B0 and B1
normPriorL<-function(beta,priorMean,priorSD){
lik<-dnorm(...,log=TRUE)
return(...)
}
Inverse Gamma prior
invGamma<-function(sd,alphaPrior,betaPrior){
require(invgamma)
var<-...
lik<-dinvgamma(var...)
return(log(...))
}
Posterior Likelihood
posteriorLik<-function(...){
llik<-dataLik(...) + normPriorB0(...) + normPriorB1(...) + invGammaL(...)
return(llik)
}
LS0tCnRpdGxlOiAiTUNNQyBsaW5lYXIgbW9kZWwgdGVtcGxhdGUiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCkdlbmVyYXRpbmcgc2ltdWxhdGVkIGRhdGEgd2l0aCBrbm93biBwYXJhbWV0ZXJzIHRvIHJlY2FwdHVyZQoKYGBge3J9Cm5SZXBzPC0xMAp4PC1zZXEoZnJvbT0wLHRvPTEwMCxieT0xKQp4PC1yZXAoeCxuUmVwcykKYjA8LTEuMDsgYjE8LTAuMgp5bWVhbjwtYjArYjEqeAp5PC1ybm9ybShuPWxlbmd0aCh5bWVhbiksbWVhbj15bWVhbixzZD0xLjUpCk48LWxlbmd0aCh5KQoKd3REYXRhPC1kYXRhLmZyYW1lKHdlaWdodF9sYnM9eSwgaGVpZ2h0X2luPXgpCgoKYGBgCgoKTWV0cm9wb2xpcyBBbGdvcml0aHltIAoKMS4gSW50aWFsaXplIHRoZSBjaGFpbiBhdCBzb21lIGluaXRpYWwgdmFsdWUgb2YgcAoKMi4gR2VuZXJhdGUgYSBwcm9wb3NlZCB2YWx1ZSBvZiBwCgozLiBDYWxjdWxhdGUgYWNjZXB0YWJjZSBwcm9iYWJpbGl0eSByCgo0LiBBY2NlcHQgcHJvcG9zZWQgdmFsdWUgb2YgcCB3aXRoIHByb2JhYmlsaXR5IHIKCjUuIFJlcGVhdCBuIHRpbWVzCgoKCmBgYHtyfQpuSXRlcjwtLi4uCnByb3Bvc2FsU0Q8LS4uLgpwcmlvck1lYW48LS4uLjsgcHJpb3JTRDwtLi4uOyBhbHBoYVByaW9yPC0uLi47IGJldGFQcmlvcjwtLi4uCmIwPC1iMTwtc2Q8LXZlY3RvcigpCmIwWzFdPC0uLi47IGIxWzFdPC0uLi47IHNkWzFdPC0uLi4gIyBJbml0aWFsIHZhbHVlcwoKCgpmb3IoaSBpbiAxOm5JdGVyKXsgIyBJdGVyYXRpb25zIGluIHNhbXBsZTogaSBsb29wCiAgCgogICAgIyBmaXJzdCBzYW1wbGUgYjAgdXNpbmcgYSBNZXRyb3BvbGlzIHN0ZXAKICAgIGIwU3Rhcjwtcm5vcm0obj0xLC4uLikKICAgIHI8LW1pbigxLCBleHAoIHBvc3RlcmlvckxpayguLi4pIC0gcG9zdGVyaW9yTGlrKC4uLikgKSApCiAgICBpZihydW5pZigxKTxyKSB7CiAgICAgIGIwW2krMV08LWIwU3RhcgogICAgfSBlbHNlIHsKICAgICAgYjBbaSsxXTwtYjBbaV0KICAgIH0gCiAgICAKICAgICMgdGhlbiBzYW1wbGUgYjEgdXNpbmcgYSBNZXRyb3BvbGlzIHN0ZXAKICAgIAoKCiAgICMgdGhlbiBzYW1wbGUgc2ReMiB1c2luZyBhIEdpYmJzIHN0ZXAgb3IgYSBNZXRyb3BvbGlzIHN0ZXAKICAgd3RQcmVkPC0uLi4KICAgbXlWYXI8LXNhbXBOb3JtVmFyKC4uLikKICAgc2RbaSsxXTwtc3FydChteVZhcikKICAKfSAKCgpgYGAKCiMjIyBFeGFtaW5pbmcgcmVzdWx0cyB1c2luZyBDb2RhCgpgYGB7cn0KbGlicmFyeShjb2RhKQpidXJuSW48LS4uLgpkYXRhTUNNQ2J1cm5JbjwtYXMubWNtYyhjYmluZChiMFstYygxOmJ1cm5JbildLGIxWy1jKDE6YnVybkluKV0sc2RbLWMoMTpidXJuSW4pXSkpCmRlbnNwbG90KGRhdGFNQ01DYnVybkluKQpIUERpbnRlcnZhbChkYXRhTUNNQ2J1cm5JbikKYXV0b2NvcnIucGxvdChkYXRhTUNNQ2J1cm5JbikKcGxvdChkYXRhTUNNQ2J1cm5JbikKYGBgCgoKIyMjIEZ1bmN0aW9uIGRlZmludGlvbnMgCgpgYGB7cn0KCnNhbXBOb3JtVmFyPC1mdW5jdGlvbih5UHJlZCxhbHBoYSxiZXRhLGRhdGEpewogICAgcmVxdWlyZShpbnZnYW1tYSkKICAgIHlPYnM8LWRhdGEkd2VpZ2h0X2xicwogICAgbjwtbGVuZ3RoKHlQcmVkKQogICAgYWxwaGFQcmltZTwtLi4uCiAgICBiZXRhUHJpbWU8LS4uLgogICAgcmludmdhbW1hKG49MSxzaGFwZT0uLi4sIHJhdGU9Li4uKQogIH0KCiAgCmBgYAoKIyMjIERhdGEgTGlrZWxpaG9vZAoKYGBge3J9CmRhdGFMaWs8LWZ1bmN0aW9uKGIwLGIxLHNkLGRhdGEpewogICAgd3Q8LS4uLgogICAgaHQ8LS4uLgogICAgd3RQcmVkPC1iMCtiMSouLi4KICAgIGxsaWs8LSBzdW0oZG5vcm0oLi4uLGxvZz1UUlVFKSkKICAgIHJldHVybihsbGlrKQogIH0KCmBgYAoKIyMjIE5vcm1hbCBQcmlvciBvbiBCMCBhbmQgQjEKCmBgYHtyfQoKbm9ybVByaW9yTDwtZnVuY3Rpb24oYmV0YSxwcmlvck1lYW4scHJpb3JTRCl7CiAgICBsaWs8LWRub3JtKC4uLixsb2c9VFJVRSkKICAgIHJldHVybiguLi4pCiAgfQoKCmBgYAoKIyMjIEludmVyc2UgR2FtbWEgcHJpb3IKCmBgYHtyfQppbnZHYW1tYTwtZnVuY3Rpb24oc2QsYWxwaGFQcmlvcixiZXRhUHJpb3IpewogICAgcmVxdWlyZShpbnZnYW1tYSkKICAgIHZhcjwtLi4uCiAgICBsaWs8LWRpbnZnYW1tYSh2YXIuLi4pCiAgICByZXR1cm4obG9nKC4uLikpCiAgfQoKYGBgCgojIyMgUG9zdGVyaW9yIExpa2VsaWhvb2QKYGBge3J9Cgpwb3N0ZXJpb3JMaWs8LWZ1bmN0aW9uKC4uLil7CgpsbGlrPC1kYXRhTGlrKC4uLikgKyBub3JtUHJpb3JCMCguLi4pICsgbm9ybVByaW9yQjEoLi4uKSArIGludkdhbW1hTCguLi4pCgpyZXR1cm4obGxpaykKfQoKCmBgYAoKCg==