2010-08-25 67 views

Trả lời

8

này là khá thẳng về phía trước bằng cách sử dụng " distr" gói:

library(distr) 

A <- Exp(rate=3) 
B <- Gammad(shape=2, scale=3) 

conv <- 0.5*(A+B) 

plot(conv) 
plot(conv, to.draw.arg=1) 

Sửa bởi JD dài

âm mưu Kết quả trông như thế này: alt text

+0

Đó là khá gọn gàng. Tôi không quen với gói distr. –

1

Tôi không phải là một lập trình viên R, nhưng nó có thể hữu ích để biết rằng đối với biến ngẫu nhiên độc lập với các file PDF f (x) và f (x), PDF của tổng của hai biến được đưa ra bởi sự chuyển đổi f * f 2 (2) của hai tệp PDF đầu vào.

2

Đây là một nỗ lực thực hiện chuyển đổi (mà @Jim Lewis đề cập) trong R. Lưu ý rằng có thể có nhiều cách hiệu quả hơn để thực hiện việc này.

lower <- 0 
upper <- 20 
t <- seq(lower,upper,0.01) 
fA <- dexp(t, rate = 0.4) 
fB <- dgamma(t,shape = 8, rate = 2) 
## C has the same distribution as (A + B)/2 
dC <- function(x, lower, upper, exp.rate, gamma.rate, gamma.shape){ 
    integrand <- function(Y, X, exp.rate, gamma.rate, gamma.shape){ 
    dexp(Y, rate = exp.rate)*dgamma(2*X-Y, rate = gamma.rate, shape = gamma.shape)*2 
    } 
    out <- NULL 
    for(ix in seq_along(x)){ 
    out[ix] <- 
     integrate(integrand, lower = lower, upper = upper, 
       X = x[ix], exp.rate = exp.rate, 
       gamma.rate = gamma.rate, gamma.shape = gamma.shape)$value 
    } 
    return(out) 
} 
fC <- dC(t, lower=lower, upper=upper, exp.rate=0.4, gamma.rate=2, gamma.shape=8) 
## plot the resulting distribution 
plot(t,fA, 
    ylim = range(fA,fB,na.rm=TRUE,finite = TRUE), 
    xlab = 'x',ylab = 'f(x)',type = 'l') 
lines(t,fB,lty = 2) 
lines(t,fC,lty = 3) 
legend('topright', c('A ~ exp(0.4)','B ~ gamma(8,2)', 'C ~ (A+B)/2'),lty = 1:3) 
+0

Đừng bận tâm tạo ra các dữ liệu từ các chức năng, chỉ cần vẽ các chức năng. Bạn sẽ sử dụng đường cong() thay vì dòng() với add = TRUE. – John

5

Nếu bạn chỉ tìm kiếm đồ thị nhanh, tôi thường thực hiện phương pháp mô phỏng nhanh và bẩn. Tôi làm một số rút, slam mật độ Gauss trên trận hòa và mưu rằng cậu bé xấu:

numDraws <- 1e6 
gammaDraws <- rgamma(numDraws, 2) 
expDraws <- rexp(numDraws) 
combined <- .5 * (gammaDraws + expDraws) 
plot(density(combined)) 

đầu ra nên nhìn một chút như thế này:

alt text

Các vấn đề liên quan