美文网首页
概率统计组队学习 之 常见分布与假设验证

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

作者: 小裙子Cheryl | 来源:发表于2020-06-27 22:06 被阅读0次

    一、常见分布

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

    在定义域内
    概率密度函数
    处处相等
    的统计分布
    f(x)=\begin{cases}\frac {1} {b-a} , & a \leq x \leq b \\0, &others\end{cases}

    Expectation:\frac{(a+b)}{2}
    F(x)=\begin{cases}0 , & x< a \\(x-a)/(b-a), & a \leq x \leq b \\1, & x>b\end{cases}

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

    一种对称的分布,
    概率密度
    呈现钟摆的形状。一般正态分布
    可以通过
    公式变换
    将其转变为
    标准正态分布
    Z=\frac {X-μ} {σ}
    Z~N(0, 1)
    f(x)=\frac{1}{\sqrt{2π}\sigma}e^{\frac{-(x-u)^2}{2\sigma^2}}

    Expectation: \mu

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

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

    描述一个特定事件发生
    所需要的时间。
    指数分布中,有着
    很少的大数值和非常多的小数值
    f(x)=\begin{cases}λe^{-λx} , & x \geq 0 \\0, & x < 0\end{cases}

    Expectation: \theta
    F(a) = P\{X \leq a\} = 1-e^{-λa}, a\geq 0

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

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

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

        i.n很大,p很小时,如n≥ 100 and np≤10时,二项分布可以
         近似为泊松分布。
        ii.\lambda很大时,如\lambda≥1000时,泊松分布可以近似为正态分布。
        iii:n很大时,npn(1-p)都足够大时,如n≥100 ,
         np≥10,n(1-p) ≥10时,二项分布可以近似为正态分布。

        🍭 一些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. 构造合适的统计测试量并测试。
          所有的统计检验都是基于组内方差和组间方差的比较,如果组间方差
          足够大,使得不同组之间几乎没有重叠,那么统计量会反映出一个
          非常小的p值,意味着不同组之间的差异不可能是由偶然性导致的。
         4. 决定是接受还是拒绝原假设。
           通常单侧检验情况下,以p=0.05作为临界值 。
         5. 展示结论

    3. 统计量的选择

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

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

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

    名称 预测变量(x) 特征 结果变量(y)特征
    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 概率统计组队学习

    相关文章

      网友评论

          本文标题:概率统计组队学习 之 常见分布与假设验证

          本文链接:https://www.haomeiwen.com/subject/uftvfktx.html