【问题标题】:How to calculate x-values of the convolution of two distributions?如何计算两个分布卷积的 x 值?
【发布时间】:2018-05-20 01:48:41
【问题描述】:

(这个问题可能适合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()

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

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

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

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

我的问题是如何得到新分布对应的 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)

【问题讨论】:

    标签: r statistics convolution


    【解决方案1】:

    假设 p1 和 p2 是均匀离散的,连续 x 值之间的间隔 dx 相同。 (我看到你已经在随机点离散化 p1 和 p2 ——这不一样,而且,不用多想,我没有答案。)让 x1 = x1_0 + (k - 1)乘以 dx, k = 1, 2, 3, ..., n1 是 p1 被离散化的点,并且 x2 = x2_0 + (k - 1) 乘以 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 值。

    【讨论】:

    • 这可能行得通,因为在实际应用中,点是均匀离散的。我只是无法理解k 是什么。你能解释一下k 以及它与n 的区别吗?
    • k 只是 x 点的索引,即当 x 被离散化时 x = [x[1], x[2], x[3], ..., x[n]]成 n 个点,所以 k = 1, 2, 3, ..., n。请注意,p1 和 p2 可以离散为不同数量的点(上面的 n1 和 n2),但连续点之间的距离(即 dx)必须相同。
    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2021-10-20
    • 2018-06-25
    • 2021-09-05
    • 1970-01-01
    相关资源
    最近更新 更多