概率统计(共4篇)——3 常见分布与假设检验

1 常见分布

常见分布.png

image.png

Scipy库提供了一组用于计算离散型随机变量PMF和连续型随机变量PDF的方法。

1.1 离散型

1 二项分布

简记为:多次进行的抛硬币实验。
特点:只有两种结果,每次试验独立,每次成功的概率相同。
成功次数为x的概率

事件成功x次的概率.png
p为成功的概率。

from scipy import stats
# 计算二项分布B(10,0.5)的PMF
x=range(11)
p=stats.binom.pmf(x, n=10, p=0.5)

可视化:

#比较n=10,p=0.5的二项分布的真实概率质量和10000次随机抽样的结果
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)真实概率质量
 
plt.figure(figsize=(9,5))
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('Binomial distribution')
plt.legend()
plt.show()
image.png

2泊松分布(比率参数lambda)

简记为:你搞了个抽奖活动,想知道一天内多少人中奖
特点:①事件在任意两个长度相等的区间内,发生一次的机会均相等。②事件在一个区间内发生与否与另一个区间没有关系,即相互独立。
在一段固定时间内,事件发生i次的概率

一段时间内,事件发生i次的概率.png

lambda=np(n:试验次数n趋向于无穷大,单次事件发生的概率p趋向于0,np是一个有限的数值)

# 计算泊松分布P(1)的PMF
x=range(11)
p=stats.poisson.pmf(x, mu=1)

3 二项分布、泊松分布、正态分布的关系

二项分布、泊松分布、正态分布的关系.png

比较泊松分布不同参数λ对应的概率质量函数,可以验证随着参数增大,泊松分布开始逐渐变得对称,分布也越来越均匀,趋近于正态分布

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()
泊松分布与正态分布.png

4其他离散型的分布

几何分布:0-1分布首次成功
负二项分布:0-1分布第k次成功
超几何分布:从n种里抽指定种类的k个(不放回)

1.2 连续型

1均匀分布

简记为:天女散花,每个面积上落下花的概率相等
记为:X~U(a,b)x在[a,b]区间内概率密度函数相等,等于1/(b-a)。


均匀分布的概率密度函数.png
#计算均匀分布U(0,1)的PDF
x = numpy.linspace(0,1,100)
p= stats.uniform.pdf(x,loc=0, scale=1)

均匀分布的分布函数.png

F(x)在x处的值:x落在(负无穷,x]区间的概率。

2正态分布

概率密度.png
# 计算正态分布N(0,1)的PDF
x = numpy.linspace(-3,3,1000)
p= stats.norm.pdf(x,loc=0, scale=1)
#计算统计分布的CDF
类似计算概率质量/密度函数的方法,只需将上节中的pmf或pdf替换为cdf,即可得到分布函数的值
# 以正态分布为例,计算正态分布N(0,1)的CDF
x = numpy.linspace(-3,3,1000)
p = stats.norm.cdf(x,loc=0, scale=1)

正态分布X~N(u,d) u:均值,d:标准差,通过下式进行标准化,转化为均值为0,标准差为1 的标准正态分布X~Z(0,1)。


image.png

不同均值和标准差下的正态分布对比:

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)
plt.figure(figsize=(7,5))
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()
image.png

3 指数分布(指数lambda)

一个特定事件发生所需要的时间,例如:快递点服务的时间间隔。
理解:(1)泊松分布表示的是事件发生的次数,“次数”这个是离散变量,所以泊松分布是离散随机变量的分布。(2)指数分布是两件事情发生的平均间隔时间,“时间”是连续变量,所以指数分布是一种连续随机变量的分布关系推导如下

关系推导.png
概率密度函数:
指数分布的概率密度函数.png
指数分布的分布函数.png

# 计算指数分布E(1)的PDF
x = numpy.linspace(0,10,1000)
p= stats.expon.pdf(x,loc=0,scale=1)

不同参数下,指数分布的对比:

from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

x = np.linspace(0,10,100)
plt.figure(figsize=(6,4))
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()
image.png

4 其他连续分布

Gamma分布:常用来描述某个事件总共要发生n次的等待时间的分布。

2 python实现

2.1生成常见分布

在Numpy库中,提供了一组random类可以生成特定分布的随机数

import numpy
# 生成大小为1000的符合b(10,0.5)二项分布的样本集
s = numpy.random.binomial(n=10,p=0.5,size=1000)
# 生成大小为1000的符合P(1)的泊松分布的样本集
s = numpy.random.poisson(lam=1,size=1000)
# 生成大小为1000的符合U(0,1)均匀分布的样本集,注意在此方法中边界值为左闭右开区间
s = numpy.random.uniform(low=0,high=1,size=1000)
# 生成大小为1000的符合N(0,1)正态分布的样本集,可以用normal函数自定义均值,标准差,也可以直接使用standard_normal函数
s = numpy.random.normal(loc=0,scale=1,size=1000)
s = numpy.random.standard_normal(size=1000)
# 生成大小为1000的符合E(1/2)指数分布的样本集,注意该方法中的参数为指数分布参数λ的倒数
s = numpy.random.exponential(scale=2,size=1000)

除了Numpy,Scipy也提供了一组生成特定分布随机数的方法

# 以均匀分布为例,rvs可用来生成一组随机变量的值
from scipy import stats
stats.uniform.rvs(size=10)

3 假设检验

对于未知的总体分布,首先,提出假设,其次,根据统计量的显著性判定假设是否正确,最后得到答案。一般来说:原假设都为不存在差异,不存在关联。备择假设一般是存在差异,存在关联。
简单来说就是:显著接受备择假设,不显著接受原假设。
常用的统计检验包括:回归检验、比较检验、关联检验

3.1回归检验

简单先行回归、多重线性回归、Logistic回归

3.2比较回归

均值对比的假设检验方法主要有Z检验和T检验,它们的区别在于Z检验面向总体数据和大样本数据,而T检验适用于小规模抽样样本。
1.T-test
T检验的三种形式:
单样本:一般来说将变量与均值相比较,看有没有差异。
配对样本:实验前与实验后变量有没有差异
独立样本:一个变量的两组类别有没有差异


image.png
(1)单样本t检验

判断age 的均值是否为30

from scipy.stats import ttest_1samp

ages=[24,56,32,26,36,24,30,30,28,29,32,31]
m = 31
ttset1, p = ttest_1samp(ages, m)
if pval < 0.05: # alpha value is 0.05 or 5% print
    print('样本的统计量为%.3f,有%.3f的概率不是%.3f'%(ttset1,p ,m))
else:
    print('样本的统计量为%.3f,有%.3f的概率是%.3f'%(ttset1,p ,m))
    
print('样本均值为:',np.mean(ages))

image.png
(2)配对样本t检验
判断培训是否有效果,培训前成绩和培训后成绩的均值是否相等

from scipy.stats import ttest_rel


before1 = [24,56,32,26,36,24,30,30,28,29,32,31]
before2 = [56,34,43,34,45,54,41,46,54,37,46,48,]
ttset2, p = ttest_ind(before1, before2)
if pval < 0.05: # alpha value is 0.05 or 5% print
    print('样本的统计量为%.3f,有%.3f的概率两组的均值不相同,培训有效'%(ttset2,p ))
else:
    print('样本的统计量为%.3f,有%.3f的概率两组的均值相同,培训无效'%(ttset2,p ))
    
print('培训前均值为:%.3f'%np.mean(before1))
print('培训后均值为:%.3f'%np.mean(before2))
image.png

(3)独立样本t检验
判断来自两个不同抽样组的age 的均值是否相等

#独立样本t检验
from scipy.stats import ttest_ind

ages1 = [24,56,32,26,36,24,30,30,28,29,32,31]
ages2 = [56,34,43,34,45,54,41,46,54,37,46,48,]
ttset2, p = ttest_ind(ages1, ages2)
if pval < 0.05: # alpha value is 0.05 or 5% print
    print('样本的统计量为%.3f,有%.3f的概率两组的均值不相同'%(ttset2,p ))
else:
    print('样本的统计量为%.3f,有%.3f的概率两组的均值相同'%(ttset2,p ))
    
print('样本1均值为:',np.mean(ages1))
print('样本2均值为:',np.mean(ages2))
image.png

2.方差分析(ANOVA)
用于一个变量>=2组的分类情况下均值是否相等。

from scipy.stats import f_oneway

a = [87,86,76,56,78,98,77,66,75,67]   #群体1成绩    
b = [87,85,99,85,79,81,82,78,85,91]  #群体2成绩
c = [89,91,96,87,89,90,89,96,96,93]  #群体3成绩
f,p = f_oneway(a,b,c)
if p<0.05:
    print('p=%.3f p值显著,所以不同群体的均值不同'%p)
else:
    print('p=%.3f p值不显著,所以不同群体的均值相同'%p)

image.png
(1)单因素方差分析
研究【一个控制变量】的不同水平是否对观测变量产生了显著影响
(2)多因素方差分析
研究【两个及两个以上控制变量】是否对观测变量产生显著影响

3.3关联检验

常用的是卡方检验,判断两组类别变量是相关还是独立

from scipy.stats import chi2_contingency

kf_data = np.array([[37,27], [39,21]])
kf = chi2_contingency(kf_data)
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s\n'%kf)
if kf[1]<0.05:
    print('p值显著,所以两者不相关')
else:
    print('p值不显著,所以两者相关')
image.png

3.4非参数检验

当不满足一些前提条件是,适用于非参数检验。
image.png

4 两类错误

1.一类错误:拒真(通过alpha设置,显著性水平95%时,alpha=0.05,说明有0.05的概率拒真)
2.二类错位:信伪(无法通过错误率直接控制,一般有小样本和高样本方差导致)
3.两者你大我小不可调和。

你可能感兴趣的:(概率统计(共4篇)——3 常见分布与假设检验)