混合泊松分布:R 中的均值和方差

Mixture Poisson distribution: mean and variance in R

所以,我尝试模拟混合泊松分布:

data2 <- data.frame(x = c(rpois(n = 50, lambda = 0), rpois(n = 450, lambda = 10)))

然后在其上绘制直方图和密度函数,对于分布函数,我使用 spatstat 包中的函数 dmixpois。这是情节的代码:

ggplot(data2, aes(x = x)) +
  geom_histogram(aes(y = ..density..), bins = 15) +
  geom_line(aes(x = x, y = dmixpois(data2$x, mu = 9, sd = sqrt(41))))

剧情如下:

很明显,密度函数是错误的。据我所知,混合泊松分布的均值是单一分布均值的线性组合,方差是 E[lambda] + Var[lambda]。在图中,我只使用了方差项,但如果我加上 lambda 的预期值,我得到的密度会更加陡峭。计算有什么问题?

您正在模拟的 'mixed Poisson' 与 spatstat 中的混合泊松模型不同,它只是假设泊松分布本身的 lambda 是 normally-distributed随机变量。来自文档:

In effect, the Poisson mean parameter lambda is randomised by setting lambda = invlink(Z) where Z has a Gaussian N(μ,σ²) distribution.

因此它不会模拟两个独立泊松分布的混合。

看来你模拟的是zero-inflated泊松分布,也就是说,有概率得到零计数的分布一个Poisson-distributed计数任何给定的观察。在 VGAM 包中有一个特定的 dzipois

另请记住,泊松分布是一种离散的概率分布,因此您不能用连续的线来正确显示它,而只能用整数值处的点或尖峰来显示。

如果您想绘制与您的模拟相匹配的分布,您可以尝试以下操作:

set.seed(1) # To make the example reproducible

data2 <- data.frame(x = c(rpois(n = 50, lambda = 0), 
                          rpois(n = 450, lambda = 10)))


ggplot(data2) +
  geom_histogram(aes(x = x, y = ..density..), breaks = 0:21 - 0.5) +
  geom_point(data = data.frame(x =0:20, y = VGAM::dzipois(0:20, 10, 1/10)),
             aes(x, y))

首先 lambda = 0 的泊松分布是退化的并且总是常数为零:

rpois(10, lambda = 0)
[1] 0 0 0 0 0 0 0 0 0 0

这就是为什么您在 x = 0 处出现尖峰的原因。

其次,泊松分布是离散的,因此没有密度(或 pdf)。相反,您可以在直方图中绘制相对频率(就像您所做的那样)以估计 X = x.

的概率

混合分布的均值就是基础分布的加权均值。在您的情况下,基础分布的权重为 10% 和 90%,因此 E[X] = 0.1 E[X_1] + 0.9 E[X_2] = 0,9

混合分布的方差由下式给出 Var(X) = Var(\Lambda) + E[Lambda]

所以一切正常:

set.seed(1)

df <- data.frame(x = c(rpois(50, 1), rpois(450, 9))) 

mean(df$x)
sd(df$x)
var(df$x)