我正在尝试使用Gumbel Dist.的逆CDF来模拟随机数。然而,对于相反的情况,我得到了mu-x*log(-log(beta))
,它吐出无法写的虚数。原始 CDF 是 e^-e^(-(x-mu)/beta)
.
我的代码是:
n=1000 #sample size
set.seed(1) #Makes the outcomes reproducible
x = runif(n) # simulate n uniform pseudo-random numbers
fx = 0-x*log(-log(10)) #Runs the pseudo-random numbers through the inverse CDF
如果有人能说出我哪里出了问题,那将非常有帮助,谢谢。
你简化不正确。 0-x*log(-log(10))
永远是不确定的,无论x
是什么。这是因为您正在获取负数的对数。参数大于 1 的日志将*始终为正数(例如,log(10)
(,使-log(10)
为负数。首先拉出 CDF 指数中的负号,然后再记录双方的日志。
*前提是基数大于 1
你在分位数函数中转置了 x 和 beta:
q <- mu-beta*log(-log(x)))
x = runif(100)
qgum <- function(x, mu=0, beta=1){ stopifnot(beta > 0); mu - beta*(log(-log(x))) }
这确实从 runif argument
返回实际(尽管有些负(值,但这与 actuar::qgumbel
的计算一致:
all.equal( qgumbel(x, 0, 10), qgum(x, 0, 10) )
[1] TRUE