# Exercise 2 - mcmc sampling # Author Roland Krause scale = 2.5 sigma = 10 proposal <- function(x, sigma) { rnorm(1,x,sigma) } target <- function(x) { (0.3 * exp(-0.2 *x ^ 2 ) + 0.7 * exp(-0.2 * (x-10)^2))/scale} accept_ratio <- function(x, xi){ min(1, target(xi)/target(x)) } N = 10 x = proposal(1,1) sample <-function(N, sigma){ final_dist =c() for (i in c(1:N)){ u = runif(1) xi = proposal(x, sigma) a = accept_ratio(x,xi) if (u<=a){ x = xi } final_dist[i] = x } return(final_dist) } par(mfcol=c(2,4)) for (sigma in c(1,10,100,1000)){ chain = sample(5000, sigma) plot(chain, xlab="iteration", ylab="samples", main=paste(c("Sigma ", sigma))) hist(chain, freq=FALSE, xlab="samples", ylim=c(0,0.4), ylab="Frequency",xlim=c(-5,15), main=paste(c("Sigma ", sigma))) plot(target, xlim=c(-5,15), xlab="x", ylab="xi", add=TRUE, col="red") }