根据随机变量可能取值的个数分为离散型和连续型两类。
在之前的文章中有介绍过数据的分布:概率统计(一)随机事件与随机变量
这里对之前未做介绍的内容做一个补充
泊松分布需要满足的条件:
(1)试验次数n趋向于无穷大
(2)单次事件发生的概率p趋向于0
(3)np是一个有限的数值
二项分布,泊松分布,正态分布的关系
当n很大,p很小时,如n >= 100 and np <= 10,二项分布可近似为泊松分布
当λ很大时,如λ >= 1000时,泊松分布可近似为正态分布
当n很大时,np和n(1-p)都足够大时,如n >= 100 and np >= 10 and n(1-np) >= 10时,二项分布可近似为正态分布
应用
在实际的生活中,负二项分布可以应用到很多场景。一个人在获得r次满分前,没有获得满分的次数;一台机器在坏掉之前,可以使用的天数等等。
如果样本容量n=1,即从有限总体中只抽取一个个案,且恰好抽到符合要求个案的概率,那么超几何分布可以还原成二项分布。
如果数据总体的容量N无穷大,也就是将有限总体换成无限总体,此时抽中的个案放回与不放回对于总体中符合要求的个案比例都没有影响,超几何分布也可视为二项分布。
在实际应用时,只要数据总体的个案数目是样本容量的10倍以上,即N > 10n,就可用二项分布近似描述超几何分布,通过两种概率质量函数计算得到的概率几乎相同。
均匀分布指的是一类在定义域内概率密度函数处处相等的统计分布
正态分布的这种统计特性使得问题变得异常简单,任何具有正态分布的变量,都可以进行高精度分预测,大自然中发现的变量,大多近似服从正态分布。
正态分布很容易解释,这是因为正态分布的均值,模和中位数是相等的,且我们只需要用均值和标准差就能解释整个分布。
指数分布通常被广泛用在描述一个特定事件发生所需要的事件,在指数分布随机变量的分布中,有着很少的大树值和非常多的小数值。
指数分布是无记忆的,假定在等候事件发生的过程中已经过了一些事件,此时距离下一次事件发生的时间间隔的分布情况和最开始是完全一样的,不会对结果有任何影响。
通常用来描述某个事件总共要发生n次的等待时间的分布。
Gamma分布常用于概率统计模型,它在水文学和气象学、可靠性和生存分析等领域都有广泛的应用。因此,对Gamma分布特别是Gamma分布的参数估计展开研究有着重要意义。
指数分布是伽马分布α = 1的特殊情况
离散型分布:
连续型分布:
以及对各个分布做了一个对比汇总:
import numpy as np
#生成大小为1000的符合b(10,0.5)二项分布的样本集
s_b = np.random.binomial(n=10,p=0.5,size=1000)
print(s_b)
#生成大小为1000的符合P(1)泊松分布的样本集
s_p = np.random.poisson(lam=1,size=1000)
print(s_p)
#生成大小为1000的符合U(0,1)均匀分布的样本集,注意在此方法中边界值为左闭右开区间
s_u = np.random.uniform(low=0,high=1,size=1000)
print(s_u)
#生成大小为1000的符合N(0,1)正态分布的样本集,可以用normal函数自定义均值、标准差,也可以直接使用standard_normal函数
s_n1 = np.random.normal(loc=0,scale=1,size=1000)
print(s_n1)
s_n2 = np.random.standard_normal(size=1000)
print(s_n2)
#生成大小为1000的符合E(1/2)指数分布的样本集,注意该方法中的参数为指数分布参数λ的倒数
s_e = np.random.exponential(scale=2,size=1000)
print(s_e)
from scipy import stats
import numpy as np
#计算二项分布B(10,0.5)的PMF
x_b = range(11)
p_b = stats.binom.pmf(x_b,n=10,p=0.5)
print(p_b)
#计算泊松分布P(1)的PMF
x_p = range(11)
p_p = stats.poisson.pmf(x_p,mu=1)
#计算均匀分布U(0,1)的PDF
x_u = np.linspace(0,1,100)
p_u = stats.uniform.pdf(x_u,loc=0,scale=1)
#计算正态分布N(0,1)的PDF
x_n = np.linspace(-3,3,1000)
p_n = stats.norm.pdf(x_n,loc=0,scale=1)
#计算指数分布E(1)的PDF
x_e = np.linspace(0,10,1000)
p_e = stats.expon.pdf(x_e,loc=0,scale=1)
#计算统计分布的CDF
x = np.linspace(-3,3,1000)
p = stats.norm.cdf(x,loc=0,scale=1)
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
x = range(11) #二项分布成功的次数(x轴)
t = stats.binom.rvs(10,0.5,size=10000) #B(10,0.5)随机抽样10000次
p = stats.binom.pmf(x,10,0.5) #B(10,0.5)真是概率质量
fig,ax = plt.subplots(1,1)
sns.distplot(t,bins=10,hist_kws={'density':True},kde=False,label='Displot from 10000 samples')
sns.scatterplot(x,p,color='purple')
sns.lineplot(x,p,color='purple',label='True mass density')
plt.title('Binomial distribution')
plt.legend(bbox_to_anchor=(1.05,1))
plt.show()
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
x = range(11)
t = stats.poisson.rvs(2,size=10000)
p = stats.poisson.pmf(x,2)
fig,ax = plt.subplots(1,1)
sns.distplot(t,bins=10,hist_kws={'density':True},kde=False,label='Distplot from 10000 samples')
sns.scatterplot(x,p,color='purple')
sns.lineplot(x,p,color='purple',label='True mass density')
plt.title('Poisson distribution')
plt.legend(bbox_to_anchor=(1.05,1))
plt.show()
查看输出结果:
比较不同参数λ对应的概率质量函数,可以验证随着参数增大,泊松分布开始逐渐变得对称,分布也越来越均匀,趋近于正态分布
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
x = range(50)
fig,ax = plt.subplots()
for lam in [1,2,5,10,20]:
p = stats.poisson.pmf(x,lam)
sns.lineplot(x,p,label='lamda='+str(lam))
plt.title('Poisson distribution')
plt.legend()
plt.show()
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
x = np.linspace(0,1,100)
t = stats.uniform.rvs(0,1,size=10000)
p = stats.uniform.pdf(x,0,1)
fig,ax = plt.subplots(1,1)
sns.distplot(t,bins=10,hist_kws={'density':True},kde=False,label='Distplot from 10000 samples')
sns.scatterplot(x,p,color='purple')
sns.lineplot(x,p,color='purple',label='True mass density')
plt.title('Uniform distribution')
plt.legend(bbox_to_anchor=(1.05,1))
plt.show()
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
x = np.linspace(-3,3,100)
t = stats.norm.rvs(0,1,size=10000)
p = stats.norm.pdf(x,0,1)
fig,ax = plt.subplots(1,1)
sns.distplot(t,bins=10,hist_kws={'density':True},kde=False,label='Distplot from 10000 samples')
sns.scatterplot(x,p,color='purple')
sns.lineplot(x,p,color='purple',label='True mass density')
plt.title('Normal distribution')
plt.legend(bbox_to_anchor=(1.05,1))
plt.show()
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
x = np.linspace(-6,6,100)
p = stats.norm.pdf(x,0,1)
fig,ax = plt.subplots()
for mean,std in [(0,1),(0,2),(3,1)]:
p = stats.norm.pdf(x,mean,std)
sns.lineplot(x,p,label='Mean:'+str(mean)+',std:'+str(std))
plt.title('Normal distribution')
plt.legend()
plt.show()
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
x = np.linspace(0,1,100)
t = stats.expon.rvs(0,1,size=10000)
p = stats.expon.pdf(x,0,1)
fig,ax = plt.subplots(1,1)
sns.distplot(t,bins=10,hist_kws={'density':True},kde=False,label='Distplot from 10000 samples')
sns.scatterplot(x,p,color='purple')
sns.lineplot(x,p,color='purple',label='True mass density')
plt.title('Exponential distribution')
plt.legend(bbox_to_anchor=(1,1))
plt.show()
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
x = np.linspace(0,10,100)
fig,ax = plt.subplots()
for scale in [0.2,0.5,1,2,5]:
p = stats.norm.pdf(x,scale=scale)
sns.lineplot(x,p,label='lamda:'+str(1/scale))
plt.title('Exponential distribution')
plt.legend()
plt.show()
通过如下案例来展现假设检验的基本过程:
随机抽取某校500名男生和500名女生,调查去年“双十一”的花费,发现女生平均花费为771元(标准差为1801),而男生平均花费是478元(标准差为400),能否推断该校女生比男生平均花费多?
(1)建立检验假设,确定检验水准
H0:该校男生和女生双十一花费相同(μd = 0)
H1:该校女生去年双十一花费高于男生(μd> 0)
μd = μ女 - μ男
(2)检验统计量的选择与计算
检验统计量是对估计值与假设检验之间的差异进行标准化转换,从而评估总体参数之间是否存在差异,总体标准差已知或样本容量大于30,比较两个样本的均值是否有显著性的差异,检验公式如下
(3)计算P值,做出统计推断
z = (771 - 478) / √(18012 / 500 + 4002 / 500) = 3.55
根据z分布图表查询可得,p = 0.0002 < 0.05,按照α = 0.05水准,拒绝H0,差异具有统计学意义,可以认为该校女生平均网购花费高于男生。
z分布图表查询:
检验统计量:为了进行假设检验,从总体中随机抽取样本,计算相关统计量。这个统计量随检验类型的不同而不同,但是它在零假设下的分布必须是已知的(或假设的)。
(1)p:检验的p值是零假设下,得到检验统计量或比样本值更极端的值的概率。那么自然,这个p越小,就代表零假设成立的概率越小。因此实验中,我们希望p越小越好。
(2)α:显著性水平α是检验的一个阈值,α的数值必须在假设检验前确定好。一个典型的α的值是0.05。此时比较p和α。
a.如果一个检验的p值小于α,检验拒绝零假设。
b.如果p值大于α,没有足够的证据拒绝零假设。注意,拒绝原假设的证据不足并不代表接受原假设。
T检验是通过比较不同数据的均值,研究两组数据之间是否存在显著差异。
用于检验样本的分布期望是否等于某个值,原假设:μ=μ0
配对样本t检验针对配对的两组样本。假设两组样本之间的差值服从正态分布。如果该正态分布的期望为零,则说明这两组样本不存在显著差异。原假设:μd = 0
该检验用于检验两组非相关样本均值之间的差异性,从而判断两样本所代表的总体均值是否有差异
Z检验是一般用于大样本(即样本容量大于30)平均值差异性检验的方法。当已知标准差时,验证一组数的均值是否与某一期望值相等时,用Z检验。
①确立原假设H0:两个平均数之间没有差异
②根据z值计算公式计算出z值
③根据显著性关系与z值做出判断
F检验法是英国统计学家Fisher提出的,主要通过比较两组数据的方差S2,以确定他们的精密度是否有显著性差异。
卡方检验是以χ2分布为基础的一种常用假设检验方法,统计样本的实际观测值与理论推断值之间的偏离程度,主要在分类数据资料统计推断中应用,如两个或多个率/构成比之间的比较以及分类资料的相关分析等。
当我们进行假设检验的过程中,错误是无法避免的,根据定义,错误分为两类:
一般来说这两类错误是无法同时降低的,在降低犯一类错误的前提下会增加犯二类错误的可能性,在实际案例中如何平衡这两类错误取决于我们更能接受一类错误还是二类错误。
参考资料:
数据分析必备统计学(二):假设检验
对假设检验的再一次全面剖析
统计学——几种常见的假设检验
一文详解F检验