我正在写一篇论文,想要模拟 Gumbel 双变量指数分布 I 型和 II 型的数据。
这是 Gumbel 双变量分布:
我尝试使用
rgumbel
包中的 Gumbel
函数,但该包考虑了 lambda1 = lambda2 = 1
,但就我而言,我想考虑不同的 lambda 值。
此外,我尝试使用边际实现逆 CDF 均匀采样方法,但没有成功,因为边际认为相关性=0。
如果有 R 包,请帮忙,如果没有,在 R 中从头开始模拟二元指数分布数据背后的概念是什么?
以
x2
为条件的 x1
的分布是具有形状参数 1 和 2 以及权重和公共速率参数的伽马混合,它们是 x1
和 GBVE 参数的函数。那么采样方案就是
样本
x1
x2
条件为 x1
在函数中实现(你可能想检查我的代数):
rGBVE <- function(n, lambda1, lambda2, theta) {
x1 <- rexp(n, lambda1)
lambda12 <- lambda1*lambda2
pprod <- lambda12*theta
C <- exp(lambda1*x1)
A <- (lambda12 - pprod + pprod*lambda1*x1)/C
B <- (pprod*lambda2 + pprod^2*x1)/C
D <- lambda2 + pprod*x1
wExp <- A/D
wGamma <- B/D^2
data.frame(x1, x2 = rgamma(n, (runif(n) > wExp/(wExp + wGamma)) + 1, D))
}
这将返回
n
中的 data.frame
样本。
更新
要得出此解决方案,请注意,当给出
x1
时,密度函数可以写成 (A + B*x2)/exp(logC + D*x2) = (A + B*x2)/(C*exp(D*x2)) = A/(C*D)*D*exp(-D*x2) + B/(C*D^2)*D^2*x2*exp(-D*x2)
的形式,其中 A
、B
、logC
、C
和 D
对于给定的 x1
是常数。
D*exp(-D*x2)
是速率参数等于 D
的指数分布(或形状参数等于 1、速率参数等于 D
的伽马分布)的 PDF。 D^2*x2*exp(-D*x2)
是形状参数等于 2、速率参数等于 D
的伽玛分布的 PDF。 A/(C*D)
和 B/(C*D^2)
是混合分布的相对权重。
我仔细检查了我的代数,我相信它是正确的。该功能可以稍微简化一下(根据 JimB 的评论于 2024 年 9 月 20 日更新):
rGBVE <- function(n, lambda1, lambda2, theta) {
x1 <- rexp(n, lambda1)
term <- 1 + lambda1*theta*x1
data.frame(x1, x2 = rgamma(n, (runif(n) > 1 - theta/term) + 1, lambda2*term))
}