# simulate data n=10 sigma2=1 x=rnorm(n)*sqrt(sigma2) # initialize mu = mean(x) s2=10 Sigma2 = NULL Mu = NULL nUpdates = 1000 # set some summary stats to simplify and speed sampler xbar = mean(x) for( i in 1:nUpdates ){ # update sigma^2 # propose candidate for sigma^2 cand = s2*exp(rnorm(1)*.5) # account for proposal logR = log(cand/s2) # account for prior on sigma2 logR = logR - log(cand/s2) # add in log-likelihood logR = logR + (-n/2)*log(cand) -0.5*sum((x-mu)^2)/cand - ((-n/2)*log(s2) -0.5*sum((x-mu)^2)/s2 ) if( logR>log(runif(1))) s2=cand # update mu cand = rnorm(1)+mu # log-likelihood logR = -0.5*sum((x-cand)^2)/s2 - (-0.5*sum((x-mu)^2)/s2 ) if( logR>log(runif(1))) mu=cand # store values Mu=c(Mu,mu) Sigma2=c(Sigma2,s2) }