假设检验实践

假设检验实践

0X00 前言

假设检验(hypothesis testing),又称统计假设检验,是用来判断样本与样本、样本与总体的差异是由抽样误差引起还是本质差别造成的统计推断方法。显著性检验是假设检验中最常用的一种方法,也是一种最基本的统计推断形式,其基本原理是先对总体的特征做出某种假设,然后通过抽样研究的统计推理,对此假设应该被拒绝还是接受做出推断。常用的假设检验方法有Z检验、t检验、卡方检验、F检验等。

0X01 理论部分

根据样本的信息来判断总体是否具有指定的特征。假设某个推理,然后通过一系列结论去证明这个推断是否成立,如果成立则接受假设,若不成立则接受反面推断。

1.1 假设检验的步骤

  1. 明确问题是什么,根据问题假定两个假设:零假设和备选假设,两个假设是对立的。零假设总是表述为研究没有改变,没有效果,不起作用。
  2. 判断检验类型
    1. 单样本检验检验=》检验单个样本的平均值是否等于目标值
    2. 相关配对检验=》检验相关或配对观测之差的平均值是否等于目标值
    3. 独立双样本检验=》检验两个独立样本的平均值之差是否等于目标值
  3. 确定抽样分布类型
    1. 当样本数量大于30时,符合中心极限定理,抽样分布呈正态分布
    2. 样本数量小于30时,抽样分布符合t分布或其他分布
  4. 确定检验方向
    1. 单尾检验
      1. 左尾:若备选假设包含有<,则选左尾检验
      2. 右尾:若备选假设包含有>,则选右尾检验
      3. 双尾检验:将判断标准一分为二位于抽样分布的两侧,左右侧各占一半判断标准,若假设中包含不等号,则属于双尾检验。

1.2 做出结论的标准是什么

在假设零假设成立时,计算样本平均值的概率:p值

当样本分布符合t分布是计算p值得方法如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHP03iaP-1579100108505)(C:\Users\jxx\AppData\Roaming\Typora\typora-user-images\image-20200115224451873.png)]

根据t值,查找t表格,得到p值

判断标准是设定的显著水平α

当p<=α时,拒绝零假设,接受备选假设

p>α时,接受零假设

0X02 实践部分

环保标准规定汽车的新排放标准:平均值<20ppm,现某汽车公司测试10辆汽车的排放结果如下:15.6 16.2 22.5 20.5 16.4 19.4 16.6 17.9 12.7 13.9 。问题:公司引擎排放是否满足新标准。

假设:

​ 零假设:司引擎排放不满足标准,即平均值>=20

​ 备选假设:公司引擎排放满足标准,即平均值<20

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。样本数量大于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()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ajBfinTc-1579100108506)(C:\Users\jxx\Desktop\11\89-945146358.png)]

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

df = n-1 = 9。确定检验方向:由于备选假设中包含<,则属于左尾假设。

使用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,因此拒绝零假设,接受备选假设,即公司引擎排放满足标准。

发布了11 篇原创文章 · 获赞 0 · 访问量 97
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览