Loading [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js

泊松分布

目录

1 定义

二项分布 一文中,我们介绍了二项分布的定义和性质。在本文中,我们给出泊松分布,并分析泊松分布和二项分布之间的联系。

如果一个取值于0,1,2,的随机变量对某一个λ,其分布如下:

p(i)=P{X=i}=eλλii!,i=0,1,2,

则称该随机变量未服从参数λ的泊松随机变量。

显然:

i=0p(i)=i=0eλλii!=1

2 泊松分布与二项分布之间的关系

泊松分布在各个领域都有广泛应用,这是由于当n足够大,p充分小,np保持适当的大小时,参数为(n,p)的二项随机变量可以近似的看做参数为λ=np的泊松随机变量。

假设X是一个服从参数为(n,p)的二项随机变量,并记λ=np,那么:

P{X=i}=(ni)pi(1p)ni=n!(ni)!i!(λn)i(1λn)ni=n(n1)(ni+1)niλii!(1λ/n)n(1λ/n)i

n时,观察上式:

eλ(1λ/n)n1n(n1)(ni+1)ni1(1λn)i

因此有:

P{X=i}eλλii!

独立重复n次试验,每次成功的概率为p,当n充分大,而p足够小,使得np保持适当的话,那么成功的次数近似的服从参数为λ=np的泊松分布,这个λ值通常凭经验确定。

以下的例子大都服从泊松分布:

  1. 一本书里一页或若干页中印刷错误的数量;
  2. 某地区居民活到100岁的人数;
  3. 一天中拨错电话号码的次数;
  4. 一家便利店里每天卖出狗粮饼干的盒数;
  5. 某一天进入一个邮局的顾客数;

3 泊松分布的期望和方差

回忆在上一章节中我们假设np=λ,而二项分布的期望是np,另外二项分布的方差是np(1p)=λ(1p)p很小时,λ(1p)近似为λ。所以我们猜测泊松分布的均值和方差都是λ。接下来,证明这一点:

E[X]=i=0ieλλii!=λi=1eλλi1(i1)!=λ

上面的推导过程中使用了哑元变量替换。接下来推倒泊松分布的方差:

E[X2]=i=0i2eλλii!=eλi=0λii(i1)!=eλi=0[λi(i1)(i1)!+λi(i1)!]=eλi=0λλi1(i1)(i1)!+eλi=0λi1λ(i1)!=λ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 包含了众多对泊松分布的支持。

我们首先验证当二项分布的Np满足一定条件时,可以用泊松分布来近似的这个结论。

假设(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 所示:

20170701binomialvspoisson1.png

Figure 1: (100,0.1)的二项分布和λ=10的泊松分布

可以看到当np=λ时,泊松分布和二项分布近似的相当好。事实上当n=10,p=0.1,λ=np=1,或者n=10,p=0.2,λ=np=2时,泊松分布和二项分布近似的也相当好。图2 直观的展示了这一结论。

20170701binomialvspoisson2.png

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) 的值也会越来越靠近。