概率统计组队学习 之 常见分布与假设验证

一、常见分布

1. 离散型随机变量
分布
名称
满足
条件
概率质量
函数(PMF)
例子 图表
二项分布
(Binomial Distribution)
1. 试验次数是固定的
2. 每次试验都是独立的
3. 对于每次试验成功的概率都是一样的
=
Expectation:
Variance:
1. 销售电话成功的次数
2. 一批产品中有缺陷的产品数量
3. 掷硬币正面朝上的次数
4. 在一袋糖果中取糖果吃,拿到红色包装的次数
泊松分布
(Poisson Distribution)
1. 试验次数n趋向于无穷大
2. 单次事件发生的概率p趋向于0
3. np是一个有限的数值
=
Expectation:
Variance:
1. 一定时间段内,某航空公司接到的订票电话数
2. 一定时间内,到车站等候公交汽车的人数
3. 一匹布上发现的瑕疵点的个数
4. 一定页数的书刊上出现的错别字个数
几何分布
(Geometric Distribution)
1. 进行一系列互相独立的试验
2. 每一次试验都既有成功的可能,也有失败的可能,且单次试验成功的概率相同
3. 主要感兴趣取得第一次成功需要进行多少次试验
=
Expectation:
Variance:
1. 打枪打中的概率
2. 滑雪滑到底不出事故的概率
第一次成功所需的试验次数(p=0.2)
负二项分布
(Negative Binomial Distribution)
1. 实验包含一系列独立的实验
2. 每个实验都有成功、失败两种结果
3. 成功概率恒定
4. 实验持续到r次失败,r可以为任意正数
=
Expectation:
Variance:
1. 一台设备在故障前运行,正常记为成功,故障记为失败
2. 动作员尝试射门得分前的尝试次数,每次不成功的尝试记为成功,得分记为失败
超几何分布
(Hypergeometric Distribution)
1. 从有限N个物件(其中包含M个指定种类的物件)中抽出n个物件,不放回
2. 成功抽出该指定种类物件的次数
=
Expectation:
Variance:
已知某事件的发生概率,判断从中取出一个小样本(不放回),该事件以某一个机率出现的概率问题
2. 连续型随机变量
分布
名称
概率密度
函数(PDF)
累计分布
函数(CDF)
举例 图表
均匀分布
(Uniform Distribution)

在定义域内
概率密度函数
处处相等
的统计分布


Expectation:


Variance:
1. 一个理想的
随机数生成器
2. 一个理想的
圆盘以
一定力度
旋转后静止时
的角度
正态分布
(Normal Distribution)

一种对称的分布,
概率密度
呈现钟摆的形状。一般正态分布
可以通过
公式变换
将其转变为
标准正态分布

~


Expectation:

Variance:
1. 成人的身高
2. 不同方向的
气体分子
的运动速度
3. 测量物体
质量时
的误差

中心极限定理:一组独立同
分布的随机样本
的平均值
近似为正态分布,无论总体
符合何种分布
指数分布
(Exponential Distribution)

描述一个特定事件发生
所需要的时间。
指数分布中,有着
很少的大数值和非常多的小数值


Expectation:


Variance:
1. 顾客到达
一家店铺的
时间间隔
2. 从现在开始
到发生地震
的时间间隔
3. 在产线上收
到一个问题产
品的时间间隔

其他连续型分布:威布尔分布(Weibull Distribution),伽玛分布(Gamma Distribution)

3. 补充:二项分布、泊松分布和正态分布关系

    i. 当很大,很小时,如 and 时,二项分布可以
     近似为泊松分布。
    ii. 当很大时,如时,泊松分布可以近似为正态分布。
    iii: 当很大时,和都足够大时,如 ,
     ,时,二项分布可以近似为正态分布。

     一些python代码实现

'''
产生特定分布的随机数,用到Numpy库
'''
import numpy as np

# 生成大小为1000的符合b(10,0.5)二项分布的样本集
s = np.random.binomial(n=10,p=0.5,size=1000)

# 生成大小为1000的符合P(1)的泊松分布的样本集
s = np.random.poisson(lam=1,size=1000)

# 生成大小为1000的符合U(0,1)均匀分布的样本集,边界值为左闭右开区间
s = np.random.uniform(low=0,high=1,size=1000)

# 生成大小为1000的符合N(0,1)正态分布的样本集
s = np.random.normal(loc=0,scale=1,size=1000)
s = np.random.standard_normal(size=1000)

# 生成大小为1000的符合E(1/2)指数分布的样本集,参数为指数分布参数λ的倒数
s = np.random.exponential(scale=2,size=1000)


'''
计算统计分布(PMF & PDF),使用 Scipy库
'''
from scipy import stats

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

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

# 计算均匀分布U(0,1)的PDF
x = numpy.linspace(0,1,100)
p= stats.uniform.pdf(x,loc=0, scale=1)

# 计算正态分布N(0,1)的PDF
x = numpy.linspace(-3,3,1000)
p= stats.norm.pdf(x,loc=0, scale=1)

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


'''
计算CDF(以正态分布为例)
'''
# 计算正态分布N(0,1)的CDF
x = numpy.linspace(-3,3,1000)
p = stats.norm.cdf(x,loc=0, scale=1)


'''
统计分布可视化(以泊松分布为例)
'''
# 比较λ=2的泊松分布的真实概率质量和10000次随机抽样的结果
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()
plt.show()

# 比较不同参数λ对应的概率质量函数
# 可以验证随着参数增大,泊松分布逐渐对称,趋近于正态分布
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()
poisson2.png

二、假设检验

1. 基本概念

     在总体的分布函数完全未知或不知其参数的情况,为了推断总体的某些
     未知特性,提出某些关于总体的假设,称为假设检验。

2. 基本步骤

     1. 陈述研究假设,包含原假设 (null hypothesis) 和备择假设
      (alternate hypothesis)。通常会把原假设设为变量之间不存在某种差异
      或关联,备择假设则是存在某种差异或关联。
     2. 为验证假设收集数据。
       注意抽样的数据要具有代表性,考虑各种可能的影响因素。
     3. 构造合适的统计测试量并测试。
      所有的统计检验都是基于组内方差和组间方差的比较,如果组间方差
      足够大,使得不同组之间几乎没有重叠,那么统计量会反映出一个
      非常小的值,意味着不同组之间的差异不可能是由偶然性导致的。
     4. 决定是接受还是拒绝原假设。
       通常单侧检验情况下,以作为临界值 。
     5. 展示结论

3. 统计量的选择

     i. 回归检验 (regression test)
       回归检验适用于预测变量是数值型的情况,根据预测变量的数量和
       结果变量的类型分为:

名称 预测变量() 特征 结果变量()特征
简单线性回归 单个连续数值 连续数值
多重线性回归 多个连续数值 连续数值
Logistic回归 连续数值 二元类别(是或否)

     ii. 比较检验 (comparison test)
       比较检验适用于预测变量是类别型,结果变量是数值型的情况:

名称 预测变量() 特征 结果变量()特征
Paired t-test 两组类别 组来自同一总体,数值
Independent t-test 两组类别 组来自不同总体,数值
ANOVA 两组及以上类别 单个数值
MANOVA 两组及以上类别 两个及以上数值

     iii. 关联检验(correlation test)
       常用的是卡方检验,适用于预测变量和结果变量均为类别型。

     iv. 非参数检验

       当以上参数条件不满足的时候,可以用非参数检验来代替。

非参数检验 用于替代的参数检验
Spearman 回归和关联检验
Sign test T-test
Kruskal–Wallis ANOVA
ANOSIM MANOVA
Wilcoxon Rank-Sum test Independent t-test
Wilcoxon Signed-rank test Paired t-test
4. 两类错误

       进行假设检验时可能有两类错误:一类错误(type I error)和
       二类错误(type II error)。
       一类错误:拒绝真的原假设
            一类错误可以通过 α(显著性水平)来控制。以95%的
            置信水平为例,a=0.05,这意味着我们拒绝一个真的
            原假设的可能性是5%。
        二类错误:接受错误的原假设
             二类错误通常是由小样本或高样本方差导致的,可以
             用β来表示。对于二类错误,可以从功效的角度来估
             计,首先进行功效分析(power analysis)计算出功效
             值1-β,进而得到二类错误的估计值β。

     一些python代码实现

'''
正态检验
'''
import numpy as np
from scipy.stats import shapiro
data_nonnormal = np.random.exponential(size=100)
data_normal = np.random.normal(size=100)

def normal_judge(data):
    stat, p = shapiro(data)
    if p > 0.05:
        return 'stat={:.3f}, p = {:.3f}, probably gaussian'.format(stat,p)
    else:
        return 'stat={:.3f}, p = {:.3f}, probably not gaussian'.format(stat,p)

# output
normal_judge(data_nonnormal)
# 'stat=0.850, p = 0.000, probably not gaussian'
normal_judge(data_normal)
# 'stat=0.987, p = 0.415, probably gaussian'


'''
卡方检验
'''
from scipy.stats import chi2_contingency
table = [[10, 20, 30],[6,  9,  17]]
stat, p, dof, expected = chi2_contingency(table)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('Probably independent')
else:
    print('Probably dependent')

# output
#stat=0.272, p=0.873
#Probably independent


'''
T-Test
'''
from scipy.stats import ttest_ind
import numpy as np
data1 = np.random.normal(size=10)
data2 = np.random.normal(size=10)
stat, p = ttest_ind(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('Probably the same distribution')
else:
    print('Probably different distributions')
    
# output
# stat=-1.382, p=0.184
# Probably the same distribution


'''
ANOVA
'''
from scipy.stats import f_oneway
import numpy as np
data1 = np.random.normal(size=10)
data2 = np.random.normal(size=10)
data3 = np.random.normal(size=10)
stat, p = f_oneway(data1, data2, data3)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('Probably the same distribution')
else:
    print('Probably different distributions')
 
# output
# stat=0.189, p=0.829
# Probably the same distribution


'''
Mann-Whitney U Test
'''
from scipy.stats import mannwhitneyu
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
stat, p = mannwhitneyu(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('Probably the same distribution')
else:
    print('Probably different distributions')

# output
# stat=40.000, p=0.236
# Probably the same distribution

Credit:
笔记整理自:Datawhale 概率统计组队学习

你可能感兴趣的:(概率统计组队学习 之 常见分布与假设验证)