常用的离散型随机变量分布及其相关函数
在第三方库scipy
中, 包括了统计学中常用的分布. 主要在scipy.stats
模块中, 因此在使用前, 除了要安装scipy
外, 也要导入响应的分布.
一 scipy.stats
中常用的离散分布
- 贝努里分布(
Bernoulli
) - 二项分布(
Binomial
) - 泊松分布(
Poisson
) - 几何分布(
Geometri
)
二 随机变量共有的方法
- Probability Mass Function(
pmf
) 概率质量函数, 直白点说,就是求给定一个样本点取值的概率.
p ( x k ) = P ( X = x k ) p(x_k)=P(X=x_k) p(xk)=P(X=xk)
-
Cumulative Distribution Function(
cdf
) 累积分布函数F ( x ) = P ( X ≤ x ) = ∑ x k ≤ x p ( x k ) F(x) = P(X\le x)=\sum_{x_k\le x}p(x_k) F(x)=P(X≤x)=∑xk≤xp(xk)
-
Survival Function(sf) 生存函数
S ( x ) = 1 − F ( x ) = P ( X > k ) S(x)=1-F(x)=P(X>k) S(x)=1−F(x)=P(X>k)
-
Percent Point Function(
ppf
) 百分位数,ppf
是cdf
的反函数 -
Inverse survival Function(
isf
) 生存函数的反函数.
三 Python中常用随机变量分布的使用
3.1 冻结一个分布
每一种分布都有固定的参数, 如果使用该分布时每次都传这些参数时, 显然比较麻烦. 因此可以首先传入相应的参数, 也就是冻结这个分布.
>>> from scipy import stats
>>> rv1 = stats.binom(100,0.05) # 冻结一个`n=100, p=0.05`的二项分布
>>> rv2 = stats.poisson(5) # 冻结一个参数λ=5的泊松分布
>>> rv3 = stats. geom(0.5) # 冻结一个参数p=5的几何分布
3.2 相关函数的使用
X ∼ B ( 10 , 0.05 ) X\sim B(10,0.05) X∼B(10,0.05) , 求 P ( x = 10 ) , P ( x ≤ 10 ) P(x=10), P(x\le10) P(x=10),P(x≤10)
>>> from scipy import stats
>>> rv1 = stats.binom(100, 0.05) # 冻结分布
>>> rv1.pmf(10) # 求随机变量给定取值的概率
0.016715884095931225
>>> rv1.cdf(10) # 求累积概率
0.9885275899325152
X ∼ P ( 5 ) X\sim P(5) X∼P(5), 求 P ( x = 10 ) , P ( x ≤ 10 ) P(x=10), P(x\le 10) P(x=10),P(x≤10)
>>> from scipy import stats
>>> rv2 = stats.poisson(5) # 冻结分布
>>> rv2.pmf(10)
0.018132788707821854
>>> rv2.cdf(10)
0.9863047314016171
四 二项分布和泊松分布比较
二项分布中, 当n
很大, p
小的情况下, 可以近似使用泊松分布来计算.
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
def binomAndpoisson(n, p):
# 冻结分布
lambda1 = n*p
rv1 = stats.binom(n, p)
rv2 = stats.poisson(lambda1)
x = np.arange(n)
width = .35
pbs=rv1.pmf(x)
pps = rv2.pmf(x)
fig, ax = plt.subplots()
rects1 = ax.bar(x-width/2, pbs, width, label="binom")
rects2 = ax.bar(x+width/2, pps, width, label="poisson")
ax.set_ylabel('Probability')
ax.set_title("Compare binom(n={},p={}) with poisson({} )".format(n,p, n*p))
ax.set_xticks(x)
ax.legend()
# ax.bar_label(rects1, padding=3)
# ax.bar_label(rects2, padding=3)
fig.tight_layout()
plt.show()
binomAndpoisson(5, 0.2)
# binomAndpoisson(50, 0.2)
# binomAndpoisson(100, 0.02)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQHOsgku-1616908810491)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210328124354427.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-44uVtLRE-1616908810494)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210328130858423.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7oDscno-1616908810496)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210328131430125.png)]
综述上试验可以看出, 当二项分布的n很大, p很小时, 可以用 λ = n p \lambda=np λ=np的泊松分布来近似计算.
908810494)]
[外链图片转存中…(img-B7oDscno-1616908810496)]
综述上试验可以看出, 当二项分布的n很大, p很小时, 可以用 λ = n p \lambda=np λ=np的泊松分布来近似计算.
欢迎访问Python与概率课程:https://www.bilibili.com/video/BV1sh411Q7mz