泊松分布
1 定义
在 二项分布 一文中,我们介绍了二项分布的定义和性质。在本文中,我们给出泊松分布,并分析泊松分布和二项分布之间的联系。
如果一个取值于0,1,2,…的随机变量对某一个λ,其分布如下:
p(i)=P{X=i}=e−λλii!,i=0,1,2,…则称该随机变量未服从参数λ的泊松随机变量。
显然:
∞∑i=0p(i)=∞∑i=0e−λλii!=12 泊松分布与二项分布之间的关系
泊松分布在各个领域都有广泛应用,这是由于当n足够大,p充分小,np保持适当的大小时,参数为(n,p)的二项随机变量可以近似的看做参数为λ=np的泊松随机变量。
假设X是一个服从参数为(n,p)的二项随机变量,并记λ=np,那么:
P{X=i}=(ni)pi(1−p)n−i=n!(n−i)!i!(λn)i(1−λn)n−i=n(n−1)…(n−i+1)niλii!(1−λ/n)n(1−λ/n)i当n→∞时,观察上式:
e−λ≈(1−λ/n)n1≈n(n−1)…(n−i+1)ni1≈(1−λn)i因此有:
P{X=i}≈e−λλii!独立重复n次试验,每次成功的概率为p,当n充分大,而p足够小,使得np保持适当的话,那么成功的次数近似的服从参数为λ=np的泊松分布,这个λ值通常凭经验确定。
以下的例子大都服从泊松分布:
- 一本书里一页或若干页中印刷错误的数量;
- 某地区居民活到100岁的人数;
- 一天中拨错电话号码的次数;
- 一家便利店里每天卖出狗粮饼干的盒数;
- 某一天进入一个邮局的顾客数;
3 泊松分布的期望和方差
回忆在上一章节中我们假设np=λ,而二项分布的期望是np,另外二项分布的方差是np(1−p)=λ(1−p) 当p很小时,λ(1−p)近似为λ。所以我们猜测泊松分布的均值和方差都是λ。接下来,证明这一点:
E[X]=∞∑i=0ie−λλii!=λ∞∑i=1e−λλi−1(i−1)!=λ上面的推导过程中使用了哑元变量替换。接下来推倒泊松分布的方差:
E[X2]=∞∑i=0i2e−λλii!=e−λ∞∑i=0λii(i−1)!=e−λ∞∑i=0[λi(i−1)(i−1)!+λi(i−1)!]=e−λ∞∑i=0λλi−1(i−1)(i−1)!+e−λ∞∑i=0λi−1λ(i−1)!=λE[X]+λ=λ2+λ根据方差公式:
Var(X)=E[X2]−(E[x])2=λ4 计算泊松分布
如果X服从参数为λ的泊松分布,则:
P{X=i+1}P{X=i}=e−λλi+1/(i+1)!e−λλi/i!=λi+1因此,我们有递推式:
P{X=i+1}=λi+1P{X=i}5 使用python做试验
在scipy提供的众多科学计算程序中, stats
包含了众多对泊松分布的支持。
我们首先验证当二项分布的N和p满足一定条件时,可以用泊松分布来近似的这个结论。
假设(n,p)=(100,0.1),另外假设λ=10,我们有:
1: from scipy.stats import binom 2: import numpy as np 3: import matplotlib.pyplot as plt 4: from scipy import stats as S 5: N,p = 100,0.1 6: mu = 10 7: x = np.arange(0,N+1,1) 8: y_binomial = S.binom.pmf(x,N,p) 9: y_poisson = S.poisson.pmf(x,mu) 10: fig,ax = plt.subplots() 11: ax.plot(x,y_binomial,'-bo', 12: label='binomial distribution'); 13: ax.plot(x,y_poisson,'-ro', 14: label='poisson distribution'); 15: 16: legend = ax.legend(loc='best', 17: shadow=True, 18: fontsize='x-large') 19: legend.get_frame().set_facecolor('#00FFCC') 20: plt.show() 21:
结果如图1 所示:
Figure 1: (100,0.1)的二项分布和λ=10的泊松分布
可以看到当np=λ时,泊松分布和二项分布近似的相当好。事实上当n=10,p=0.1,λ=np=1,或者n=10,p=0.2,λ=np=2时,泊松分布和二项分布近似的也相当好。图2 直观的展示了这一结论。
Figure 2: np=λ的二项分布和λ=10的泊松分布
代码如下:
1: from scipy.stats import binom 2: import numpy as np 3: import matplotlib.pyplot as plt 4: from scipy import stats as S 5: N,p = 10,0.1 6: mu = 1 7: x = np.arange(0,N+1,1) 8: y_binomial = S.binom.pmf(x,N,p) 9: y_poisson = S.poisson.pmf(x,mu) 10: 11: fig = plt.figure(1) 12: ax1 = plt.subplot(211) 13: ax2 = plt.subplot(212) 14: 15: ax1.plot(x,y_binomial,'-bo', 16: label='binomial distribution$(10,0.1)$'); 17: ax1.plot(x,y_poisson,'-ro', 18: label='poisson distribution$\lambda = 1$'); 19: 20: legend1 = ax1.legend(loc='best', 21: shadow=True, 22: fontsize='x-large') 23: legend1.get_frame().set_facecolor('#00FFCC') 24: 25: N,p = 10,0.2 26: mu = 2 27: x = np.arange(0,N+1,1) 28: y_binomial = S.binom.pmf(x,N,p) 29: y_poisson = S.poisson.pmf(x,mu) 30: 31: ax2.plot(x,y_binomial,'-bo', 32: label='binomial distribution$(10,0.2)$'); 33: ax2.plot(x,y_poisson,'-ro', 34: label='poisson distribution$\lambda=2$'); 35: 36: legend2 = ax2.legend(loc='best', 37: shadow=True, 38: fontsize='x-large') 39: 40: legend2.get_frame().set_facecolor('#00FFCC') 41: plt.show()
现在我们生成10000个λ=2的泊松分布样本。
s = S.poisson.rvs(1,size= 1000)
然后求其均值和方差:
np.mean(s) np.var(s)
输出为1.04和1.1044。可以预见当我们对更多样本求均值时,会越来越接近于1. 因为泊松分布的均值和方差相等,随着更多样本的加入, np.mean(s)
和 np.var(s)
的值也会越来越靠近。