【发布时间】:2017-08-05 12:09:33
【问题描述】:
我得到了一个在任何 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 才能看到我的方程式。
【问题讨论】:
-
此页面 (cran.r-project.org/web/views/Distributions.html) 列出了 log-gamma 可能的软件包
-
另外,关于这个问题的第二个答案 (meta.stackexchange.com/questions/30559/latex-on-stack-overflow) 在 Stack Overflow 上为 LaTeX 提供了一个更好的选择——以防您将来需要发布公式:)
-
要从任意分布生成值,您可以反转该分布的 CDF 并将随机 Uniform(0, 1) 值输入其中:参见en.wikipedia.org/wiki/Inverse_transform_sampling。当分发在任何包中不可用时很有用。
标签: r