r - 如何计算两个分布的卷积的 x 值?

标签 r statistics convolution

(这个问题可能适合 https://stats.stackexchange.com/ ,但我认为这只是你如何计算我在 R 中想要的东西,这是我的问题)。

我正在尝试将多个分布加在一起,然后查看生成的分布。我将通过一个使用正态分布随机变量 p1p2 的简单示例来说明我的问题。

set.seed(21)
N <- 1000

p1 <- rnorm(N, mean = 0, sd = 1)
p2 <- rnorm(N, mean = 10, sd = 1)

我们可以绘制:

data.frame(p1, p2) %>%
  gather(key="dist", value="value") %>%
  ggplot(aes(value, color=dist)) + geom_density()

enter image description here

我可以使用 convolve 将这些分布加在一起。好的,那很好。但我想不通的是,如何用适当的 x 值绘制分布的总和。在我看到的示例中,由于缺乏更好的工作,看起来 x 值是以一种看起来不“准确”的方式手动添加的。看这个Example .

我可以将它们“加”在一起并绘制:

pdf.c <- convolve(pdf1.y, pdf2.y, type = "open")

plot(pdf.c, type="l")

enter image description here

我的问题是如何获得新分布的相应 x 值。从基础统计的角度来看,我确信我遗漏了一些东西。

pdf1pdf2 的附录:

set.seed(21)
N <- 1000

p1 <- rnorm(N, mean = 0, sd = 1)
p2 <- rnorm(N, mean = 10, sd = 1)

pdf1.x <- density(p1)$x
pdf2.x <- density(p2)$x

pdf1.y <- density(p1)$y / sum(density(p1)$y)
pdf2.y <- density(p2)$y / sum(density(p2)$y)

df1 <- data.frame(pdf.x = pdf1.x, pdf.y = pdf1.y, dist = "1", stringsAsFactors = FALSE)
df2 <- data.frame(pdf.x = pdf2.x, pdf.y = pdf2.y, dist = "2", stringsAsFactors = FALSE)

df <- bind_rows(df1, df2)

最佳答案

假设 p1 和 p2 被均匀离散化,连续 x 值之间的间隔 dx 相同。 (我看到你在随机点离散化了 p1 和 p2——这不一样,而且,没有再考虑它,我没有答案。)设 x1 = x1_0 + (k - 1) times dx, k = 1, 2, 3, ..., n1 是 p1 离散化的点,x2 = x2_0 + (k - 1) times dx, k = 1, 2, 3, ..., n2 是 p2 被离散化的点。

每个点 xi_k = xi_0 + (k - 1) 乘以 dx 代表宽度为 dx 和高度为 pi(xi_k) 的条的中心点,i = 1, 2。因此条的质量是 dx 乘以 pi (xi_k),并且当 dx 接近 0 时所有条的总质量接近 1。这些质量是卷积的值。如果离散质量归一化为1,那么它们的卷积也将归一化为1。

要非常小心,分布离散化的范围是 xi_0 - dx/2 到 xi_0 + (ni - 1) 乘以 dx + dx/2。计算卷积后,结果的范围同样是 -dx/2 和 +dx/2,分别是第一个和最后一个点。

卷积有n = n1 + n2 - 1个点,即x1_0 + x2_0 + (k - 1)次dx,k = 1, 2, 3, ..., n1 + n2 - 1。第一个点是x1_0 + x2_0(即 p1 的第一个点加上 p2 的第一个点),最后一个点是 x1_0 + x2_0 + (n1 + n2 - 2) 次 dx = (x1_0 + (n1 - 1) 次 dx) + (x2_0 + ( n2 - 1) 乘以 dx)(即 p1 的最后一个点加上 p2 的最后一个点)。由此,您可以通过 seq 函数或类似函数构造与卷积对应的 x 值。

关于r - 如何计算两个分布的卷积的 x 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50415767/

相关文章:

c++ - CUDA 小核 2d 卷积 - 怎么做

r - 如何创建由数字变量着色的传单标记

r - 从奇怪的 Excel 文件中提取数据

php - 我应该如何在多个链接上存储唯一的统计信息?

rgb - 如何在具有三个 (RGB) channel 的图像上计算卷积?

android - 互相关以查找声纳回波

r - 如何在分配命名元素期间替换元素的名称?

r - 为什么我的 SelectorGadget 在使用 R 进行 Webscraping 时不选择某些节点

python - 没有 SciPy 的 PDF 和 CDF

python - 如何估计噪声层后面的高斯分布?