逆Gumbel采样

时间:2018-03-17 22:07:39

标签: r inverse cdf

我试图使用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 

如果有人能告诉我哪里出错将会非常有帮助,谢谢。

2 个答案:

答案 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