我创建了以下用户定义函数,该函数使用Acceptance-Rejection方法生成随机变量。然而,每当它被调用时,我的程序继续进行并最终崩溃或者我必须强制退出。我经历了好几次。关于可能导致这种情况的任何想法?
我知道这可能不是写这篇文章的最佳方式(昨天是我第一次使用R)所以任何额外的提示都是奖金!
acceptReject <- function(){
Z <- 0
Y <- c(0,0)
while(Y[2] < .5*(Y[1]-1)**2){
U <- runif(2,0,1)
Y <- log(U)
}
Z <- Y[1]
U <- runif(1,0,1)
if(U <= .5){
Z <- abs(Z)
}
else{
Z <- -abs(Z)
}
Z
}
答案 0 :(得分:1)
你有一个无限循环。
如果您假设Y ~ log( [0,1] )
(数学上),则表示它始终介于log(0)
和log(1)
之间,分别等同于-Inf
和0
。 (底线,它总是小于或等于零。)
现在让我们来看看你的条件:.5*(Y[1]-1)**2
。如果您知道Y
的域是c(-Inf,0)
,那么此公式的范围是
.5*(c(-Inf,0)-1)**2
# [1] Inf 0.5
(这总是大于或等于0.5。)
由于Y
始终为<= 0
且公式始终为>= 0.5
,因此您的条件在数学上始终为真。无限循环。