post<-function(y,x,beta,prior.mn,prior.sd){ #full joint posterior beta|y for the logistic regression model: xbeta<-x%*%beta xbeta<-ifelse(xbeta>10,10,xbeta) like<-prod(dbinom(y,1,exp(xbeta)/(1+exp(xbeta)))) prior<-prod(dnorm(beta,prior.mn,prior.sd)) like*prior} Bayes.logistic<-function(y,x,prior.mn=0,prior.sd=10,n.samples=10000,can.sd=1){ #MCMC code for the model: #y[i]~Bern(p[i]) #Logit(p[i])=x%*%beta #beta[j]~N(prior.mn,prior.sd) p<-ncol(x) #Initial values: beta<-rnorm(p,0,1) keep.beta<-matrix(0,n.samples,p) acc<-rep(0,p) for(i in 1:n.samples){ #Update beta using MH sampling: for(j in 1:p){ canbeta<-beta canbeta[j]<-rnorm(1,beta[j],can.sd) #Draw candidate: R<-post(y,x,canbeta,prior.mn,prior.sd)/ #Compute acceptance ratio: post(y,x,beta,prior.mn,prior.sd) U<-runif(1) if(U