如何优化随机值生成?

时间:2017-03-14 23:02:44

标签: r

我得到了一个在任何R包中找不到的概率分布,并且我被告知要从中生成随机值。概率分布函数称为LogGamma分布,具有以下概率分布函数。

[; f(x)= \ frac {\ alpha ^ \ beta} {\ Gamma(\ beta)}(\ ln {x})^ {\ beta-1} x ^ { - \ alpha-1};]

因为我找不到这个表达式的积分的倒数的显式表达式,所以我创建了一个迭代一系列值的函数,直到它到达返回所需概率的停止点。

LogGammaPDF <- function(x){
      return(alpha^beta * log(x)^(beta - 1) * x^(-alpha-1)/gamma(beta))
      }

MakeLogGammaRV <- function(n){
      LogGammaRandomValues = c()
      for(j in seq(1:n)){
        i = 1
        Prob = runif(1)
        while(integrate(LogGammaPDF, lower=1, upper=i)$value < Prob){
          i = i + .0001
        }
        LogGammaRandomValues[j] = i
      }
}

MakeLogGammaRV(10)

制作10个随机变量需要大约一分钟。我该如何优化这个过程?

您需要TeX the World来查看我的等式。

2 个答案:

答案 0 :(得分:3)

我不知道它是否与您的定义相符,但library("sos"); findFn("log-gamma")找到?VGAM::rlgamma,即:

function (n, location = 0, scale = 1, shape = 1) 
{
    ans <- location + scale * log(rgamma(n, shape))
    ans[scale < 0] <- NaN
    ans
}

答案 1 :(得分:1)

也许我错过了什么。根据{{​​3}},伽马随机变量的自然对数遵循对数伽马分布(根据名称有意义)。此外,R函数rgamma()返回伽马随机变量。因此你可以使用例如log(rgamma(10,alpha,beta))得到你想要的东西。

如果这不起作用,则包this具有rlgamma()功能。