# 各种分布总结 -- 潘登同学的数理统计笔记
离散型随机变量分布
0-1分布、伯努利分布
一次抛硬币
- 概率密度函数
二项分布(n重伯努利)
n次扔硬币
- 两个二项分布的和也服从二项分布
如果且X与Y相互独立,那么X+Y也服从二项分布:
- 泊松近似
当试验的次数趋于无穷大,而乘积np固定时,二项分布收敛于泊松分布。因此参数为λ=np的泊松分布可以作为二项分布B(n,p)的近似,近似成立的前提要求n足够大,而p足够小,np不是很小。
- 正态近似
如果n足够大,那么分布的偏度就比较小。在这种情况下,如果使用适当的连续性校正,那么B(n,p)的一个很好的近似是正态分布:
常用的规则是np和n(1 −p)都必须大于 5
超几何分布
从有限N个物件(其中包含M个指定种类的物件)中抽出n个物件,成功抽出该指定种类的物件的次数(不放回)。
- 超几何分布和二项分布的联系
- 当时,
- 当时, 超几何分布的数学期望:
- 当时, 超几何分布的方差:
- 当时, 超几何分布近似为二项分布
几何分布
在n次伯努利试验中,试验k次才得到第一次成功的机率。详细地说,是:前k-1次皆失败,第k次成功的概率。几何分布是帕斯卡分布当r=1时的特例。
泊松分布
泊松分布的参数λ是单位时间(或单位面积)内随机事件的平均发生次数。 泊松分布适合于描述单位时间内随机事件发生的次数。
- 不同时的泊松分布的概率
#%%泊松分布
import math
import matplotlib.pyplot as plt
def p_possion(k, m):
'''
Parameters
----------
k : int
一段时间内发生事件的次数.
m : int
一段时间平均发生事件的次数(就是λ).
Returns
-------
pk : float
一段时间内发生k次的概率.
'''
kjie = 1 #k!
for i in range(1, k+1):
kjie*=i
pk = math.pow(m, k)/kjie*math.e**(-m)
return pk
if __name__=='__main__':
x = list(range(1,21))
p1 = []
p2 = []
p3 = []
p4 = []
for i in x:
p1.append(p_possion(i, 1))
p2.append(p_possion(i, 3))
p3.append(p_possion(i, 5))
p4.append(p_possion(i, 10))
plt.subplot(221)
plt.bar(x, p1, color='red')
plt.title('λ=1')
plt.subplot(222)
plt.bar(x, p2, color='red')
plt.title('λ=2')
plt.subplot(223)
plt.bar(x, p3, color='red')
plt.title('λ=3')
plt.subplot(224)
plt.bar(x, p4, color='red')
plt.title('λ=4')
plt.show()
- 两个泊松变量的组合也是泊松分布
若相互独立:
记X发生X次, Y发生Y次;
连续型随机变量分布
均匀分布
在相同长度间隔的分布概率是等可能的
-
概率密度函数
-
分布函数
#%%均匀分布
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def p_uniform(k, a, b):
'''
Parameters
----------
k : float
P(X<k)的k
a : float
区间左端点.
b : float
区间右端点.
Returns
-------
pk : float
累计概率.
plt : figure
概率密度函数与分布函数
'''
x = np.linspace(a,b, int((b-a)*100))
p = 1/(b-a)
plt.figure(figsize=(8,4))
plt.subplot(121)
plt.plot(x, [p]*len(x), 'red')
plt.xlim([a-1, b+1])
plt.ylim([0, 1])
plt.title('区间[%d, %d]上的均匀分布概率密度函数'%(a,b))
plt.subplot(122)
y = (x-a)/(b-a)
plt.plot(x, y, 'b')
plt.xlim([a-1, b+1])
plt.ylim([0, 1])
plt.title('区间[%d, %d]上的均匀分布分布函数'%(a,b))
plt.show()
if k < a:
pk = 0
elif k<=b:
pk = (k-a)/(b-a)
else:
pk = 1
return pk
if __name__=='__main__':
p_uniform(2, 1, 3)
- 标准均匀分布
若a = 0并且b = 1,所得分布U(0,1)称为标准均匀分布;
如果具有标准均匀分布, 那么也是标准均匀分布。
指数分布
指数分布(也称为负指数分布)是描述泊松过程中的事件之间的时间的概率分布,即事件以恒定平均速率连续且独立地发生的过程。
-
概率密度函数
-
分布函数
#%%指数分布
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def p_Exponential(k, m):
'''
Parameters
----------
k : float
P(X<k)的k
m : int
两个事件发生的平均时间间隔(就是λ).
Returns
-------
pk : float
累计概率.
plt : figure
概率密度函数与分布函数
'''
x = np.linspace(0,5, 1000)
p = m * np.e ** (-m*x)
plt.figure(figsize=(8,4))
plt.subplot(121)
plt.plot(x, p, 'red')
plt.title('λ=%d时指数分布概率密度函数'%m)
plt.subplot(122)
y = 1 - np.e ** (-m * x)
plt.plot(x, y, 'b')
plt.title('λ=%d时指数分布分布函数'%m)
plt.show()
if k < 0:
pk = 0
else:
pk = 1 - np.e ** (-m * k)
return pk
if __name__=='__main__':
p_Exponential(2, 1)
- 指数分布的无记忆性
这表示如果一个随机变量呈指数分布, 当时有时有
即,如果T是某一元件的寿命,已知元件使用了t小时,它总共使用至少小时的条件概率,与从开始使用时算起它使用至少s小时的概率相等。
正态分布
-
概率密度函数
-
分布函数
积不出来 0_0 但是可以用蒙特卡洛计算
#%%正态分布
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def p_Gaussian(k, mu, sigma):
'''
Parameters
----------
k : float
P(X<k)的k
mu : float
正态分布的μ.
sigma : float
正态分布的σ.
Returns
-------
pk : float
累计概率.
plt : figure
概率密度函数与分布函数
'''
x = np.linspace(mu-3*sigma,mu+3*sigma, 1000)
p = 1/np.sqrt(2*np.pi*sigma**2) * np.e ** -((x-mu)**2/2*sigma**2)
plt.figure(figsize=(10,5))
plt.subplot(121)
plt.plot(x, p, 'red')
plt.title('μ=%d,σ=%d时正态分布概率密度函数'%(mu, sigma))
plt.subplot(122)
# 蒙特卡洛求解概率分布函数
y = np.linspace(0, p[500], 1000)
S = 6*sigma * p[500] # 矩形框的总面积
result = [[], []]
for i in range(int(1e4)):
a = np.random.choice(np.linspace(0, 999, 1000))
b = np.random.choice(y)
if x[int(a)] < k and b < p[int(a)]:
result[0].append(x[int(a)])
result[1].append(b)
pk = S * len(result[0]) / 1e4
plt.plot(x, p, 'red')
plt.scatter(result[0], result[1], s=1, c='red')
plt.title('μ=%d,σ=%d,x=%f时正态分布概率密度函数'%(mu, sigma, k))
return print(pk)
if __name__=='__main__':
p_Gaussian(0.5,0,1)
- 正态分布的线性性
, a、b是实数
- 两个正态分布的组合也是正态分布
则他们的和也满足正态分布,
则他们的差也满足正态分布,
卡方分布
若n个相互独立的随机变量,均服从标准正态分布(也称独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量,其分布规律称为卡方分布(chi-square distribution)。
-
概率密度函数
-
那显然也是积不出分布函数的
#%%卡方分布
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def p_chi_square(k, n):
'''
Parameters
----------
k : float
P(Y<k)的k
n : df自由度
Returns
-------
pk : float
累计概率.
plt : figure
概率密度函数与分布函数
'''
y = np.linspace(0, 15, 1000)
p = st.chi2.pdf(y, df=n)
plt.figure(figsize=(10,5))
plt.subplot(121)
plt.plot(y, p, 'red')
plt.title('df=%d时卡方分布概率密度函数'%(n))
plt.subplot(122) # 用微积分的方法来积
delta_y = y[1]-y[0]
result = []
for i,j in enumerate(p):
if i == 0:
result.append(j*delta_y)
else:
result.append(result[i-1] + j*delta_y)
plt.plot(y, result, 'red')
plt.title('df=%d时卡方分布分布函数'%(n))
pk = st.chi2.cdf(k, df=n)
return print(pk)
if __name__=='__main__':
p_chi_square(1,2)
p_chi_square(1,8)
- 渐进正态性
随着, 分布趋于正态分布
- 不同的自由度决定不同的卡方分布
自由度越小,分布越偏斜.
- 卡方分布的组合也是卡方分布
互相独立,他们的和服从自由度为的卡方分布
t分布
假设,且X、Y相互独立,则称随机变量
服从自由度为n的t分布,记为:
-
概率密度函数
-
分布函数
还是积不出来 0_0
#%%t分布
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def p_t(k, n):
'''
Parameters
----------
k : float
P(Y<k)的k.
n : int
df自由度.
Returns
-------
pk : float
累计概率.
plt : figure
概率密度函数与分布函数.
'''
t = np.linspace(-5, 5, 1000)
p = st.t.pdf(t, df=n)
plt.figure(figsize=(10,5))
plt.subplot(121)
plt.plot(t, p, 'red')
plt.title('df=%d时t分布概率密度函数'%(n))
plt.subplot(122) # 用微积分的方法来积
delta_t = t[1]-t[0]
result = []
for i,j in enumerate(p):
if i == 0:
result.append(j*delta_t)
else:
result.append(result[i-1] + j*delta_t)
plt.plot(t, result, 'red')
plt.title('df=%d时t分布分布函数'%(n))
pk = st.t.cdf(k, df=n)
return print(pk)
if __name__=='__main__':
p_t(0,3)
- 渐进正态性
随着自由度逐渐增大,t分布逐渐接近标准正态分布。
- 不同的自由度决定不同的t分布
自由度df越小,t分布曲线越低平;自由度df越大,t分布曲线越接近标准正态分布曲线。
F分布
假设,且U、V相互独立,则称随机变量
服从自由度为的F分布,记为:
-
概率密度函数
-
分布函数
更积不出来了 0_0
#%%F分布
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def p_F(k, n1, n2):
'''
Parameters
----------
k : float
P(Y<k)的k.
n1 : int
df自由度1.
n2 : int
df自由度2.
Returns
-------
pk : float
累计概率.
plt : figure
概率密度函数与分布函数.
'''
F = np.linspace(0, 5, 1000)
p = st.f.pdf(F, dfn=n1, dfd=n2)
plt.figure(figsize=(10,5))
plt.subplot(121)
plt.plot(F, p, 'red')
plt.title('df=(%d, %d)时t分布概率密度函数'%(n1, n2))
plt.subplot(122) # 用微积分的方法来积
delta_F = F[1]-F[0]
result = []
for i,j in enumerate(p):
if i == 0:
result.append(j*delta_F)
else:
result.append(result[i-1] + j*delta_F)
plt.plot(F, result, 'red')
plt.title('df=(%d, %d)时t分布分布函数'%(n1, n2))
pk = st.f.cdf(k, dfn=n1, dfd=n2)
return print(pk)
if __name__=='__main__':
p_F(3,10,40)
p_F(3,11,3)
-
F分布的倒数也是F分布
-
t分布的平方时F分布
- 渐进正态性
当时近似服从正态分布