Để lấy mẫu từ một phân phối gamma nghịch đảo trong R, là sau cách chính xác để làm điều đó:Lấy mẫu từ một phân phối gamma nghịch đảo trong R
#I want to sample an inverse-gamma(a,b)
a = 4
b = 9
x = 1/rgamma(1,a,b)
Để lấy mẫu từ một phân phối gamma nghịch đảo trong R, là sau cách chính xác để làm điều đó:Lấy mẫu từ một phân phối gamma nghịch đảo trong R
#I want to sample an inverse-gamma(a,b)
a = 4
b = 9
x = 1/rgamma(1,a,b)
Mặc dù @Dason và @Stephane đã nhận xét rằng bạn cách tiếp cận có giá trị, có một số gói trong R mà làm điều này (tìm thấy googling cho r inverse gamma
:
cũng Xem trang wikipedia cho gamma distribution và inverse gamma distribution cho hàm mật độ xác suất của cả các bản phân phối:
cho việc phân phối gamma so:
cho gamma nghịch đảo.
Mặc dù họ không hoàn toàn nhận được các thông số đúng Tôi không thấy lý do tại sao bạn nói "không" kể từ khi phương pháp của họ là một cách để tạo ra một gamma nghịch đảo ... – Dason
Chỉnh sửa câu trả lời của tôi ít nghiêm ngặt hơn. @ Dason sau khi thực hiện một chút nghiên cứu có vẻ như hai bản phân phối khá khác biệt, nhưng tôi đã sửa chữa. –
Mã dưới đây là ví dụ để so sánh các mô phỏng từ gamma nghịch đảo từ các gói R @ user2005253 và @Stephane.
@ Paul Hiemstra Tôi không chắc chắn về ringvamma {} MCMCpack
# double check implementations from various packages
library(ggplot2)
alpha = 1
rate = 0.5
# stats library ----------------------------------
library(stats)
x.base<- 1/rgamma(10000, shape = alpha, rate = rate)
x11()
p.try0<- ggplot(data.frame(x = x.base), aes(x=x)) + geom_density() +
ggtitle(paste("Stats package: shape", alpha, "rate ", rate)) + xlim(c(0, 3))
p.try0
# invgamma library -------------------------------
library(invgamma)
sims.1<- rinvgamma(10000, shape = alpha, rate = rate)
p.try1<- ggplot(data.frame(x = sims.1), aes(x=x)) + geom_density() +
ggtitle(paste("Package (invgamma) shape", alpha, " rate ", rate, sep = ""))+
xlim(c(0, 3))
x11()
p.try1
detach("package:invgamma", unload = TRUE)
# MCMCpack library -------------------------------
library(MCMCpack) # no rate argument - this works only on shape and scale.
#That's ok since scale = 1/rate
sims.2<- rinvgamma(10000, shape = alpha, scale = 1/rate)
p.try2<- ggplot(data.frame(x = sims.2), aes(x=x)) + geom_density() +
ggtitle(paste("Package MCMCpack: shape", alpha, " scale", 1/rate, sep = "")) +
xlim(c(0, 3))
x11()
p.try2
# Implementation of rinvgamma incorrect for MCMC pack? Because this works with
sims.3<- rinvgamma(10000, shape = alpha, scale = rate)
p.try3<- ggplot(data.frame(x = sims.2), aes(x=x)) + geom_density() +
ggtitle(paste("again MCMCpack: here scale = rate ???")) + xlim(c(0, 3))
x11()
p.try3
Có nó là đúng. –