zoukankan      html  css  js  c++  java
  • python单样本假设检验实例

    假设检验可以建立批判思维,切忌盲目追寻他人的观点。在各个领域都应用广泛,例如犯罪学,科学研究中都会假设某个推理,然后通过一系列结论去证明这个推断是否成立,如果成立则接受假设,若不成立则接受反面推断。
    假设检验的四个步骤
    一、问题是什么
    1.明确问题是什么,根据问题假定两个假设:零假设和备选假设,两个假设是对立的。零假设总是表述为研究没有改变,没有效果,不起作用
    2.判断检验类型
    • 单样本检验检验=》检验单个样本的平均值是否等于目标值
    • 相关配对检验=》检验相关或配对观测之差的平均值是否等于目标值
    • 独立双样本检验=》检验两个独立样本的平均值之差是否等于目标值
    3.确定抽样分布类型
    • 当样本数量大于30时,符合中心极限定理,抽样分布呈正态分布
    • 样本数量小于30时,抽样分布符合t分布或其他分布
    4.确定检验方向
    • 单尾检验
        左尾:若备选假设包含有<,则选左尾检验
        右尾:若备选假设包含有>,则选右尾检验
    • 双尾检验
        将判断标准一分为二位于抽样分布的两侧,左右侧各占一半判断标准,若假设中包含不等号,则属于双尾检验。
    二、做出结论标准是什么(证据是什么)
    在假设零假设成立时,计算样本平均值的概率:p值
    当样本分布符合t分布是计算p值得方法如下
    根据t值,查找t表格,得到p值
    三、判断标准是什么
    设定显著水平α
    四、做出结论
    当p<=α时,拒绝零假设,接受备选假设
    p>α时,接受零假设
     
    实例
    环保标准规定汽车的新排放标准:平均值<20ppm,现某汽车公司测试10辆汽车的排放结果如下:15.6 16.2 22.5 20.5 16.4 19.4 16.6 17.9 12.7 13.9 。问题:公司引擎排放是否满足新标准。
    一、问题是什么
      1、零假设:公司引擎排放不满足标准,即平均值>=20
      备选假设:公司引擎排放满足标准,即平均值<20
      2、判断检验类型:改例子为单样本检验
      3、确定抽样分布
      1)用python展示统计描述(平均值、标准差)
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    dataSer=pd.Series([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9])
    sample_mean=dataSer.mean()#样本平均值
    sample_std=dataSer.std()#样本标准差

    计算得平均值为17.17ppm,标准差为2.98ppm

      2)我们知道当样本数量大于30时,符合中心极限定理,抽样分布呈正态分布,样本数量小于30时,抽样分布符合t分布或其他分布。为了知道这是个样本的分布,我们可以使用python中的displot绘图,画出直方图和拟合曲线。
    import seaborn as sns
    #解决画图中中文乱码,解决负号问题
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    #绘图
    sns.distplot(dataSer)
    plt.title('数据集分布')
    plt.show()

    从绘图中可以看出样本数据集近视正态分布,又由于样本数量少于30 ,因此抽样分布符合t分布。自由度df = n-1 = 9

    4、确定检验方向:由于备选假设中包含<,则属于左尾假设
    二、证据是什么:计算p值
    两种方法:
    1、手动计算
    #样本大小
    n=10
    #标准误差=样本标准差/n的开方
    se=sample_std/np.sqrt(n)
    计算se=0.9428149341201592
    #总体平均值:政府发布的标准值
    pop_mean=20
    #t值
    t=(sample_mean-pop_mean)/se

    得t=-3,即样本均值在总体均值的左侧,距离总体平均值3个标准误差。根据t表格,即可找出p值,这里我们也可以用下面链接中的工具得出p值。

    最后得到p值为0.15,但这个工具计算的是双尾检验的p值,根据下图我们可以看出双尾检验的p值为单位检验的2倍,因此这里的p值应为 0.15/2 = 0.075
    2、调用python自带方法计算
    使用scipy包中的ttest_1samp,计算单独样本t检验。该函数返回的第一个值为t值,第二个值为双尾检验的p值。
    from scipy import stats
    import pandas as pd
    dataSer=pd.Series([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9])
    pop_mean=20
    t,p_twoTail=stats.ttest_1samp(dataSer,pop_mean)
    p_oneTail = p_twoTail/2
    print("t=",t,"p_twoTail=",p_twoTail, "p_oneTail = ", p_oneTail)
    t= -3.001649525885985 p_twoTail= 0.014916414248897527 p_oneTail =  0.0074582071244487635

    三、判断标准是什么

    建立判断标准检验证据是否有效,给定的判断标准即显著水平
    α=5%
    四、做出结论
    当p<=α时,拒绝零假设,接受备选假设
    p>α时,接受零假设
    由于p=0.00745<0.05,因此拒绝零假设,接受备选假设,即公司引擎排放满足标准。
    用python代码来判断如下:
    左尾判断条件:t<0 and p < alpha
    右尾判断条件:t>0 and p < alpha
    alpha = 0.05
    if (t<0 and p_oneTail < alpha):
        print("拒绝零假设,有统计显著,也就是汽车引擎排放满足标准")
    else:
        print("接受零假设,没有统计显著,也就是汽车引擎排放不满足标准")
    拒绝零假设,有统计显著,也就是汽车引擎排放满足标准

     全部代码如下:

    """
    环保标准规定汽车的新排放标准:平均值<20ppm,现某汽车公司测试10辆汽车的排放结果如下:
    15.6 16.2 22.5 20.5 16.4 19.4 16.6 17.9 12.7 13.9 。
    问题:公司引擎排放是否满足新标准。
    """
    #1、零假设:公司引擎排放不满足标准,即平均值>=20
     #   备选假设:公司引擎排放满足标准,即平均值<20
    #2、判断检验类型:该例子为单样本检验
    #3、确定抽样分布
     # 1)用python展示统计描述(平均值、标准差)
    import numpy as py
    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    dataser=pd.Series([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9])
    sample_mean=dataser.mean()#样本平均值
    sample_std=dataser.std()#样本标准差
    print(sample_mean,sample_std)#结果为17.169999999999998 2.9814426038413018
       # 2)我们知道当样本数量大于30时,符合中心极限定理,抽样分布呈正态分布,样本数量小于30时,抽样分布符合t分布或其他分布。为了知道这是个样本的分布,我们可以使用python中的displot绘图,画出直方图和拟合曲线。
    #解决画图中中文乱码,解决负号问题
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    sns.distplot(dataser)
    plt.title('数据集分布')
    plt.show()
    from scipy import stats
    pop_mean=20#题中平均值
    t,p_twoTail=stats.ttest_1samp(dataSer,pop_mean)
    p_oneTail = p_twoTail/2
    print("t=",t,"p_twoTail=",p_twoTail, "p_oneTail = ", p_oneTail)
    #t= -3.001649525885985 p_twoTail= 0.014916414248897527 p_oneTail =  0.0074582071244487635

    #由于p=0.00745<0.05,因此拒绝零假设,接受备选假设,即公司引擎排放满足标准。

  • 相关阅读:
    Convert Datetime to String in Sql Server
    [转]C# 多线程
    [转]C#的内存管理:堆栈、托管堆与指针
    [转]js操作select相关方法(收集)
    [转]javaScript中URL编码转换,escape() encodeURI() encodeURIComponent
    Compile android NDK without Eclipse
    BlockingQueue and BlockingDeque
    Android Notebook
    java.String.format &Formatter
    Install Git for Eclipse
  • 原文地址:https://www.cnblogs.com/qiuyuyu/p/9630410.html
Copyright © 2011-2022 走看看