r语言 - 逆冈贝尔采样



我正在尝试使用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

相关内容

  • 没有找到相关文章

最新更新