多次听到二项分布与泊松分布、正态分布的近似关系,决定写一个博客总结一下。
二项分布 B ( n , p ) \mathrm{B}(n,p) B(n,p),有两个参数, n n n 表示独立实验的次数,而 p p p 表示单次实验成功的概率。一个形象的例子是:抽检 n n n 个产品,其中有 k 个合格品的概率为
Pr ( x = k ) = C n k p k ( 1 − p ) n − k \Pr(x=k)=C_n^kp^k(1-p)^{n-k} Pr(x=k)=Cnkpk(1−p)n−k
近似成泊松或正态分布有这两个特点:
- 若 n n n 很大, p p p 很小,近似成泊松分布 ( λ = n p \lambda=np λ=np, 可以根据上面的概率密度表达式推出来,求出 n 趋于无穷大时, p p p 很小时的极限)
- 若 n n n 很大, p p p 不是很小,近似成正态分布
1. 近似为泊松分布
当 n ≥ 100 n\geq 100 n≥100 且 p ≤ 0.1 p\leq 0.1 p≤0.1 或 n ≥ 20 n\geq 20 n≥20 且 p ≤ 0.05 p\leq 0.05 p≤0.05 时,二项分布可以近似为泊松分布,并且泊松分布的参数值 λ = n p \lambda=np λ=np.
见下面的概率密度函数图形:
确实也挺接近的。
代码:
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 11 16:31:16 2022
@author: chen
"""
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
n = 100
p = 0.1
x = np.arange(1, 2*n*p)
y = [st.binom.pmf(i, n, p) for i in x]
plt.plot(x, y, 'r', label='binormial, n=100,p=0.1')
plt.legend()
y1 = [st.poisson.pmf(i, n*p) for i in x]
plt.plot(x, y1, 'b', label='poisson, lambda=n*p')
plt.legend(fontsize=20)
n = 20
p = 0.05
plt.figure()
x = np.arange(1, 10*n*p)
y = [st.binom.pmf(i, n, p) for i in x]
plt.plot(x, y, 'r', label='binormial, n=20,p=0.05')
plt.legend()
y1 = [st.poisson.pmf(i, n*p) for i in x]
plt.plot(x, y1, 'b', label='poisson, lambda=n*p')
plt.legend(fontsize=20)
2 近似为正态分布
当 n n n 很大时,一般认为 n ≥ 20 n \geq 20 n≥20 并且 p p p 值不接近于 0 或 1,则可以认为二项分布近似为正态分布,一种说法是要 n p ≥ 5 np\geq 5 np≥5, n ( 1 − p ) ≥ 5 n(1-p)\geq 5 n(1−p)≥5。见下面两个概率密度函数:
可以看出, n n n 越大,越接近正态分布。
部分代码:
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 11 16:31:16 2022
@author: chen
"""
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
n = 50
p = 0.1
x = np.arange(1, 3*n*p)
y = [st.binom.pmf(i, n, p) for i in x]
plt.plot(x, y, 'r', label='binormial, n=50,p=0.1')
plt.legend()
y1 = [st.norm.pdf(i, n*p, np.sqrt(n*p*(1-p))) for i in x]
plt.plot(x, y1, 'b', label='norm, mu=np, sigma^2=np(1-p)')
plt.legend(fontsize=20)
plt.figure()
n = 100
p = 0.1
x = np.arange(1, 3*n*p)
y = [st.binom.pmf(i, n, p) for i in x]
plt.plot(x, y, 'r', label='binormial, n=100,p=0.1')
plt.legend()
y1 = [st.norm.pdf(i, n*p, np.sqrt(n*p*(1-p))) for i in x]
plt.plot(x, y1, 'b', label='norm, mu=np, sigma^2=np(1-p)')
plt.legend(fontsize=20)
3 与贝塔分布的关系
二项分布与贝塔分布也有一定的联系,二项分布可以视为特殊的贝塔分布