我被給了一個概率分佈,我無法在任何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才能看到我的公式。
此頁面(https://cran.r-project.org/web/views/Distributions.html)有一個可能的日誌伽瑪包的列表 – HFBrowning
另外,關於這個問題的第二個答案(https:/ /meta.stackexchange.com/questions/30559/latex-on-stack-overflow)爲堆棧溢出提供了一個更好的替代LaTeX的方法 - 如果您需要在將來發布公式:) – HFBrowning
要從任意分佈生成值,您可以反轉該分佈的CDF並向其中輸入隨機統一(0,1)值:請參閱https://en.wikipedia.org/wiki/Inverse_transform_sampling。當分發在任何軟件包中不可用時很有用。 – Marius