假设检验可以建立批判思维,切忌盲目追寻他人的观点。在各个领域都应用广泛,例如犯罪学,科学研究中都会假设某个推理,然后通过一系列结论去证明这个推断是否成立,如果成立则接受假设,若不成立则接受反面推断。
假设检验的四个步骤
一、问题是什么
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,因此拒绝零假设,接受备选假设,即公司引擎排放满足标准。