gpt4 book ai didi

r - 通过 R 中的卷积添加两个随机变量

转载 作者:行者123 更新时间:2023-12-04 00:56:14 25 4
gpt4 key购买 nike

我想计算 R 中两个概率分布的卷积,我需要一些帮助。为简单起见,假设我有一个变量 x 正态分布,均值 = 1.0 和 stdev = 0.5,y 是对数正态分布,均值 = 1.5 和 stdev = 0.75。我想确定 z = x + y。我知道 z 的分布不是先验的。

顺便说一句,我正在使用的现实世界示例需要添加两个根据许多不同分布分布的随机变量。

有谁知道如何通过对 x 和 y 的概率密度函数进行卷积来添加两个随机变量?

我尝试生成 n 个正态分布的随机值(具有上述参数)并将它们添加到 n 个对数正态分布的随机值中。但是,我想知道是否可以使用卷积方法代替。任何帮助将不胜感激。

编辑

谢谢你的回答。我定义了一个 pdf,并尝试进行卷积积分,但 R 提示积分步骤。我的 pdf 是 Log Pearson 3,如下

dlp3 <- function(x, a, b, g) { 
p1 <- 1/(x*abs(b) * gamma(a))
p2 <- ((log(x)-g)/b)^(a-1)
p3 <- exp(-1* (log(x)-g) / b)
d <- p1 * p2 * p3
return(d)
}

f.m <- function(x) dlp3(x,3.2594,-0.18218,0.53441)
f.s <- function(x) dlp3(x,9.5645,-0.07676,1.184)

f.t <- function(z) integrate(function(x,z) f.s(z-x)*f.m(x),-Inf,Inf,z)$value
f.t <- Vectorize(f.t)
integrate(f.t, lower = 0, upper = 3.6)

R 在最后一步提示,因为 f.t 函数是有界的,我的积分限制可能不正确。关于如何解决这个问题的任何想法?

最佳答案

这是一种方法。

f.X <- function(x) dnorm(x,1,0.5)        # normal (mu=1.5, sigma=0.5)
f.Y <- function(y) dlnorm(y,1.5, 0.75) # log-normal (mu=1.5, sigma=0.75)
# convolution integral
f.Z <- function(z) integrate(function(x,z) f.Y(z-x)*f.X(x),-Inf,Inf,z)$value
f.Z <- Vectorize(f.Z) # need to vectorize the resulting fn.

set.seed(1) # for reproducible example
X <- rnorm(1000,1,0.5)
Y <- rlnorm(1000,1.5,0.75)
Z <- X + Y
# compare the methods
hist(Z,freq=F,breaks=50, xlim=c(0,30))
z <- seq(0,50,0.01)
lines(z,f.Z(z),lty=2,col="red")



同样的事情使用包 distr .
library(distr)
N <- Norm(mean=1, sd=0.5) # N is signature for normal dist
L <- Lnorm(meanlog=1.5,sdlog=0.75) # same for log-normal
conv <- convpow(L+N,1) # object of class AbscontDistribution
f.Z <- d(conv) # distribution function

hist(Z,freq=F,breaks=50, xlim=c(0,30))
z <- seq(0,50,0.01)
lines(z,f.Z(z),lty=2,col="red")

关于r - 通过 R 中的卷积添加两个随机变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com