R code for generating standard normals using Metropolis sampler with uniform proposal distribution

R code for generating standard normals using Metropolis sampler with uniform proposal distribution:

 

# metropolis for N(0,1) based on uniform candidates
norm<-function (n, alpha) 
{
        vec <- vector("numeric", n)
        x <- 0
        vec[1] <- x
        for (i in 2:n) {
                innov <- runif(1, -alpha, alpha)
                can <- x + innov
                aprob <- min(1, dnorm(can)/dnorm(x))
                u <- runif(1)
                if (u < aprob) 
                        x <- can
                vec[i] <- x
        }
        vec
}


normvec<-norm(10000,1)
par(mfrow=c(2,1))
plot(ts(normvec))
hist(normvec,30)
par(mfrow=c(1,1))

 

posted on 2015-03-31 16:34  偶尔学习  阅读(198)  评论(0编辑  收藏  举报