• 深入浅出统计学第七章 几何分布,二项分布,柏松分布


    简介

    <深入浅出统计学>第七章详细介绍了三种概率分布及其应用,而我们则将进行程序编写,来计算这三种概率分布.

    几何分布

    scipy几何分布原文地址
    下面是书中一些重要公式的代码实现,此处我们直接调用scipy的类库,不再自己编写。首先当然是滑雪问题,固执的查德先生明明只有百分之二十的机会,一次滑雪成功,可他却分要不成功便成仁.为了我们的这位倒霉朋友的生命安全着想,看来我们是时候启动我们的计算机了.

    from scipy.stats import geom
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    p = 0.2
    # P(X > r) = q ** r
    print(geom.sf(2,p)) # pmf(r,p),当成功概率为p时,第一次成功需要r次以上的概率
    # P(X <= r) = 1 - q ** r
    print(geom.cdf(2,p)) # cdf(r,p),当成功概率为p时,r次及以内成功的概率
    # P(X = 4) = p * q ** (r-1)
    print(geom.pmf(4,p)) # pmf(r,p),当成功概率为p时,第r次成功的概率
    # 额外的
    print(geom.ppf(0.99, p)) # ppf(q,p),当成功概率为p时,想要获取q的概率,需要尝试的次数
    0.64
    0.36
    0.10240000000000003
    21.0
    
    print(geom.var(p)) # 方差 Var(X) = q/(p ** 2)
    print(geom.mean(p)) # 均值,也就是期望E(X) = 1/p
    print(geom.std(p)) # 标准差
    20.0
    5.0
    4.47213595499958
    

    例题

    为了更好的让查德先生了解自己的作死行为,我们还是不得比使用一些更直观的方法——表格与图标。(绘制P280的表格与图表如下,P282的表格与图标只需简单修改以下代码,此处不再冗余操作:)

    x = np.arange(1,9)
    import pandas as pd
    df_Gemo_Table = pd.DataFrame({
        "P(X=x)":geom.pmf(x,p),
        "xP(X=x)":x * geom.pmf(x,p),
        "xP(X<=x)":(x * geom.pmf(x,p)).cumsum()})
    
    df_Gemo_Table
    P(X=x) xP(X<=x) xP(X=x)
    0 0.200000 0.200000 0.200000
    1 0.160000 0.520000 0.320000
    2 0.128000 0.904000 0.384000
    3 0.102400 1.313600 0.409600
    4 0.081920 1.723200 0.409600
    5 0.065536 2.116416 0.393216
    6 0.052429 2.483418 0.367002
    7 0.041943 2.818962 0.335544
    df_Gemo_Table ['xP(X = x)']。plot()
    plt.show()

    概率为0.2的二次分布累计概率

    二次分布

    Scipy二次分布参考地址

    而除了我们的倒霉查德先生以外,还有一位不学习只能蒙题的老学渣,为了让他浪子回头,我们又不得不动用我们的双手和键盘连做点事情了。(二次分布的语法与几何分布是类似的,如下:),不过要算五十道题的二次分布似乎很麻烦(笔算),我们先算算四道问题的。

    from scipy.stats import binom
    print("假设四道四个选项的单项选择题,随便蒙,那么此时")
    print("四道问题中答对零道的概率为",binom.pmf(0,4,0.25))
    print("四道问题中答对一道的概率为",binom.pmf(1,4,0.25))
    print("四道问题中答对两道的概率为",binom.pmf(2,4,0.25))
    print("四道问题中答对三道的概率为",binom.pmf(3,4,0.25))
    print("四道问题中答对四道的概率为",binom.pmf(4,4,0.25))
    假设四道四个选项的单项选择题,随便蒙,那么此时
    四道问题中答对零道的概率为 0.31640625000000006
    四道问题中答对一道的概率为 0.4218750000000001
    四道问题中答对两道的概率为 0.21093750000000006
    四道问题中答对三道的概率为 0.046875000000000035
    四道问题中答对四道的概率为 0.003906250000000001
    

    然后是累积概率,换句话说就是答对至少N道题的概率:

    print("四道问题中至少一道的概率为",binom.cdf(1,4,0.25))
    四道问题中至少一道的概率为 0.73828125
    四道问题中至少一道的概率为 4.0
    

    期望与方差的语法与几何分布保持一致:

    print(binom.var(4,0.25)) # 方差 Var(X) = npq
    print(binom.mean(4,0.25)) # 均值,也就是期望E(X) = n * p
    print(binom.std(4,0.25)) # 标准差
    print(binom.expect(args=(4,0.25))) # 期望
    0.75
    1.0
    0.8660254037844386
    1.0000000000000004
    

    从上面看,想要答对四道题目都这么困难,看来以后还是不要侥幸了,好好学习才是王道。而下面我们还可利用scipy的类库计算一下我们参与“轮椅转转赢”比赛的获奖概率,这个游戏一共有五个问题,假如每个问题答对的概率都是0.25,那概率应该怎么计算呢?(原书P303的例题:)

    print("最后一轮有五道题,每一道题的答对概率为0.25。")
    print("那么答对两道题的概率为:{0:.3f}".format(binom.pmf(2,5,0.25)))
    print("那么答对三道题的概率为:{0:.3f}".format(binom.pmf(3,5,0.25)))
    print("那么答对两或三道题的概率为:{0:.3f}".format(binom.pmf(2,5,0.25) + binom.pmf(3,5,0.25)))
    print("一道题都没答对的的概率为:{0:.3f}".format(binom.pmf(0,5,0.25)))
    print("期望为:{0:.3f},方差为:{1:.3f}".format(binom.mean(5,0.25),(binom.var(4,0.25))) )
    最后一轮有五道题每一道题的答对概率为0.25。
    那么答对两道题的概率为:0.264
    那么答对三道题的概率为:0.088
    那么答对两或三道题的概率为:0.352
    一道题都没答对的的概率为:0.237
    期望为:1.250,方差为:0.750
    

    泊松分布

    泊松分布在第七章中主要有两个用处:
    1. 本身的用处,一种是根据一定时间内或一定区间内的平均次数,计算其他概率
    2. 在n很大,p很小的情况下利用泊松分布代替二次分布进行计算

    因为三种概率分布分布的语法是相近的,所以此处我们直接使用泊松分布计算书中的例题,也就是一个爆米花机问题,问一个一周平均发生3.4次故障的爆米花机下周会不会发生故障?拜托,如果我有一台一周发生3.4次故障的爆米花机,还决定下周不换的,那只有一个原因,那就是我傻了,emmmm,也有可能是我没钱。又或者我们是时候利用泊松分布计算一下蒙五十道题的概率了?

    编程语法请参考原文档—>Scipy泊松分布

    from scipy.stats import poisson
    mu = 3.4
    print("P309 爆米花机问题,一周内爆米花机平均发生故障:{0}".format(mu))
    print("下一周爆米花机不发生故障的概率为:{0:.3f}".format(poisson.pmf(0, mu)))
    print("下一周爆米花机发生三次故障的概率为:{0:.3f}".format(poisson.pmf(3, mu)))
    print("其期望为:{0:.3f},方差为:{1:.3f}".format(poisson.mean(mu),(poisson.var(mu))) )
    P309 爆米花机问题,一周内爆米花机平均发生故障:3.4
    下一周爆米花机不发生故障的概率为:0.033
    下一周爆米花机发生三次故障的概率为:0.558
    其期望为:3.400,方差为:3.400
    
    mu_test = 0.05 * 50
    print("P317 考试问题,每一道题的答对概率为:{0},我们用泊松分布来代替二次分布".format(mu_test))
    print(“答对五题的概率为:{0:.3f}”。format(poisson.pmf(5,mu_test)))
    print(“额外的:答对最多三题的概率为:{0:.3f }。“。format(poisson.cdf(3,mu_test)))
    P317考试问题,每一道题的答案概率为:2.5,
    我们用泊松分布来    代替二次分布答对五题的概率为:0.067     
    额外的:答对最多三题的的概率为:0.758
    

    参考资料

    1. Scipy二次分布参考地址
    2. scipy几何分布原文地址
    3. Scipy泊松分布
    4. 深入浅出统计学原书
  • 相关阅读:
    【Luogu1501】Tree(Link-Cut Tree)
    【BZOJ3530】数数(AC自动机,动态规划)
    【BZOJ1212】L语言(AC自动机)
    【BZOJ2037】Sue的小球(动态规划)
    【BZOJ1899】午餐(动态规划)
    【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)
    【BZOJ1040】骑士(动态规划)
    【BZOJ1969】航线规划(Link-Cut Tree)
    【BZOJ4653】【NOI2016】区间(线段树)
    我也不知道什么是"莫比乌斯反演"和"杜教筛"
  • 原文地址:https://www.cnblogs.com/fonttian/p/9819783.html
Copyright © 2020-2023  润新知