使用接受拒绝方法生成正态分布的另一半

Gue*_*cci 1 statistics r random-sample

以下R代码只给出正态分布的一半; 为了获得另一半,我应该改变什么代码?

halfnormal <- function(n){
    vector <- rep(0,n)
    for(i in 1:n){
        uni_random <- runif(2) 
        y <- -log(uni_random)
        while(y[2] < (y[1]-1)^2/2){
            uni_random <- runif(2)
            y <- -log(uni_random)
        }
        vector[i] <- y[1]
    }
    vector
}

output <- halfnormal(1000)
hist(output)
Run Code Online (Sandbox Code Playgroud)

And*_*Mao 7

如果您坚持使用该代码生成标准法线(不推荐,因为rnorm会更快更准确),只需通过由随机(-1, +1)值组成的等长向量对整个向量进行点积.

顺便说一下,半正常也称为Chi分布(具有1个自由度).