(这个问题可能适合https://stats.stackexchange.com/,但我认为这就是你在R
计算我想要的东西的方式,这是我的问题。
我尝试将多个发行版添加到一起,然后查看生成的发行版。我将使用正态分布的随机变量p1
和p2
来举例说明我的问题。
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值是以一种看起来并不准确的方式手动添加的。&#34;缺乏更好的工作。请参阅此Example。
我可以&#34;添加&#34;他们在一起并策划:
pdf.c <- convolve(pdf1.y, pdf2.y, type = "open")
plot(pdf.c, type="l")
我的问题是如何获得新发行版的相应x值。我确信从基础统计的角度来看,我错过了一些东西。
pdf1
和pdf2
的附录:
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)
答案 0 :(得分:0)
假设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值。