# Sample from a N(-3,1) truncated to [0,1] # using the slice sampler xes_seq(0,1,.01) xes_c(seq(0,1,.01),1-xes) yes_c(exp(-(seq(0,1,.01)+3)^2/2),0*seq(0,1,.01)) plot(xes[1:101],yes[1:101],type="l",lwd=2,col="sienna3",xlab="x",ylab="y") polygon(xes,yes,col="gold") # # Function delay, to check points delay_function(n){ for (j in 1:(n*1000)) x_log(4)^3 } # Generation of the slice sampler sequence # obs_matrix(0,ncol=2,nrow=100) obs[1,1]_.5 for (i in 2:100){ obs[i,2]_exp(-0.5*(obs[i-1,1]+3)^2)*runif(1) obs[i,1]_runif(1)*min(1,-3+sqrt(-2*log(obs[i,2]))) } # Plot of the slice sampling steps # for (i in 2:100){ points(obs[i-1,1],obs[i-1,2],col="steelblue3",pch=20) delay(20) lines(c(obs[i-1,1],obs[i-1,1]),c(obs[i-1,2],obs[i,2]),col="steelblue3") points(obs[i-1,1],obs[i,2],col="steelblue3",pch=20) delay(20) points(obs[i-1,1],obs[i-1,2],col="gold",pch=20) lines(c(obs[i-1,1],obs[i-1,1]),c(obs[i-1,2],obs[i,2]),col="gold") delay(20) lines(c(obs[i-1,1],obs[i,1]),c(obs[i,2],obs[i,2]),col="steelblue3") points(obs[i,1],obs[i,2],col="steelblue3",pch=20) points(obs[i-1,1],obs[i,2],col="gold",pch=20) delay(20) lines(c(obs[i-1,1],obs[i,1]),c(obs[i,2],obs[i,2]),col="gold") points(obs[i,1],obs[i,2],col="gold",pch=20) } # Cleanup rm(xes,yes,obs)