独立离散随机变量之和的分位数

问题描述 投票:0回答:1

我有以下问题: 给定 k (=10) 个离散独立随机变量 X_i,每个变量具有 n_i (= 5 到 20) 个值。

问题:计算总和 X = X_1+...+X_k 的分布的分位数。

这里 X 有 n=n_1 x n_2 ... n_k 个不同的值,太大而无法将它们全部列出来 他们的概率。

我尝试了几种方法:

(A) 卷积:

每个 X_j 近似为 Y_j=X_j+Z,其中 Z 是 西格玛较小的正态 N(0,sigma) 变量。那么 Y_j 是正态分布的概率混合 变量 N(x_j,sigma),其中 x_j 遍及 X_j 的所有值,并且具有高度振荡密度。

Y=\sum Y_j 的密度是 Y_j 的密度的卷积。

我需要大量点的密度,但事实证明这太慢了。 问题似乎是卷积积分的收敛因振荡性质而减慢 Y_j 的密度。当密度表现更好时(例如正常的 RV),计算 这样的卷积速度相当快。

(B) 特征函数:

X 将用 Y=X+Z 来近似,其中 Z 是具有小 sigma 的正态 N(0,\sigma)。 Y 具有密度(无法直接计算),但特征函数 (连续傅里叶变换)Y 的 cf_Y 可以很容易地通过分析计算(不知道 Y) 的密度

现在让 s 成为一个数值向量。我想获得沿 s 计算的 Y 的密度 f_Y(s)。 正确的方法是将连续傅里叶逆变换应用于 s 中每个点的函数 cf_Y。

这太慢了。这就是为什么我尝试将逆 离散 傅里叶变换应用于值 cf_Y(s) 的向量,但这不会产生任何合理的结果。

这让我感到困惑,因为我的印象是离散傅里叶变换是连续傅里叶变换的近似,因此如果值网格 s 足够精细,应该会产生后者的值。

这应该有效吗?

请注意,如果我可以计算密度 f_Y 的离散傅立叶变换,那么这种反演肯定会起作用 沿着 s,但遗憾的是这是不可能的,因为

(a) f_Y 的密度太复杂了,并且

(b) 独立的和 Y = Y_1+Y_2+...+Y_k 的离散傅立叶变换 随机变量 Y_j 不是 Y_j 的离散傅立叶变换的乘积。

我该如何解决这个问题?

这是一个小例子,表明卷积很快就会失败 由于所涉及的密度的振荡性质:

library(bayesmeta)

# density of $(1/10)*\sum_{j=1}{10}N(j,0.01$ 
# (convex sum of normal distributions)
#
f <- Vectorize(function(s) sum(vapply(1:10,
   FUN = function(j) dnorm(s,mean=j,sd=0.01)/10, FUN.VALUE=0
)))
g <- function(s) dnorm(s,mean=0,sd=0.01)

cat("\n\n")
for(i in 1:5){

  cat("Doing convolution ",i,"\n")
  g <- convolve(g,f)$density
}
cat("\nConvolutions finished, plotting density.")
s <- seq(0,100,length.out=1024)
matplot(s,g(s),type="l")
r random sum quantile
1个回答
0
投票

一种可能性是使用包 discreteRVdistr。利用discreteRV,可以得到独立随机变量之和的分布:

library(discreteRV)

X1 <- RV(c(0, 1, 2), c(0.5, 0.25, 0.25))
X2 <- RV(c(1, 2), c(0.5, 0.5))
X3 <- RV(c(0, 1, 2, 3), c(0.4, 0.2, 0.2, 0.2))

sumXi <- SofI(X1, X2, X3)

现在您可以使用 distr 来计算分位数:

library(distr)
D <- DiscreteDistribution(
  supp = attr(sumXi, "outcomes"), 
  prob = attr(sumXi, "probs")
)
# quantile 0.5:
q.l(D)(0.5)
© www.soinside.com 2019 - 2024. All rights reserved.