我试图使用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 :(得分:1)
您正在简化错误。无论0-x*log(-log(10))
是什么,x
始终都是未定义的。这是因为您正在记录负数。参数大于1的日志将*始终为正(例如log(10)
),使-log(10)
为负。在取得双方的日志之前,首先拉出CDF的指数中的负号。
*如果基数大于1
答案 1 :(得分:0)
您在分位数函数中转换了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