统计中的假设检验介绍-t检验-A/B测试及python示例
写在前面:
-
假设检验,是根据一定的假设条件,由样本推断总体的一种方法。
-
我以前常分不清楚如何定义原假设和被择假设,后来用一个例子才记得比较深刻:就像法庭审判犯人,会首先假设他是一个好人(备择假设),然后提交证据证明他是有罪的(原假设)。
所以假设检验选择原假设和备择假设的原则如下:
1)原假设:想要证明其不好的方向(证明有罪);
2)备择假设:是想要证明其好的方向(若原假设发生概率比较低,也就是没有充分的理由证明有罪,那就是无罪的);
以下大部分内容转载:https://zhuanlan.zhihu.com/p/37265478
在此基础上,根据自己的理解思路在结构上略有调整,记录下来以供学习,感谢原作者。
目录
一、假设检验的一般步骤
1、问题是什么
①根据实际问题,确定出零假设H0和备择假设H1。H0和H1互为相反,非此即彼,不可能同时满足。
②确定检验类型。检验类型包括:单样本t检验、相关配对t检验、独立双样本t检验。
③均值的抽样分布。
-
当小样本时,即样本容量n<30,假如总体近似服从正态分布,则均值的抽样分布为t分布;
-
当大样本时,即样本容量n>=30,无论总体为何分布,均值的抽样分布均为正态分布。(中心极限定理)
④确定检验方向。看备择假设H1的描述:
-
如果H1中包含小于号"<",则为左尾;
-
如果H1中包含大于号">",则为右尾;
-
如果H1中包含不等号"≠",则为双尾。
检验类型及检验方向的判定,总结为下表:
2、证据是什么
有一种说法:假设检验就是个p(不是拍马屁的屁哦)
没错,假设检验最核心的步骤就是计算p值,什么是p值呢?
p值就是:在零假设H0成立的条件下,出现样本均值的概率是多少。
t检验的p值计算过程:
方法一:根据样本均值和标准误,结合抽样分布类型,先计算出检验统计量和*度,手动查表计算p值;
方法二:使用Python的科学计算包scipy自动计算检验统计量和p值。
3、判断标准是什么
显著性水平α,由人为根据实际情况主观指定,常用的显著性水平α=0.05。
4、得出结论
根据检验是单尾还是双尾,用最终的p值与α值做比较:
-
当p<=α时,拒绝零假设H0,接受备择假设H1;
-
当p>α时,没有充分的证据拒绝零假设(倾向于接受H0,但需要进一步证据)。
二、假设检验报告的一般格式简介
1、描述统计分析
对样本数据进行描述统计,报告平均值和标准差。
2、推论统计分析
-
报告假设检验结果:采用APA格式,需要报告检验类型、抽样分布类型、检验方向、检验统计量、p值、显著性水平α;
-
报告置信区间:根据APA格式,需要报告置信区间的类型、置信水平、区间上下限;
-
报告效应量:效应量代表实际效果是否显著,包含两种度量方法:
①差异度量Cohen’s d = (样本均值1-样本均值2)/标准差;
②相关度r^2 = t2/(t2+df),df是*度
示例:
三、单样本t检验
以一个示例来了解:汽车引擎排放标准
汽车引擎是否满足排放标准?
“Super Engine”是一家专门生产汽车引擎的公司,根据*发布的新排放要求,引擎排放平均值要低于20ppm。公司制造出10台引擎供测试使用,每一台的排放水平如下:
15.6 16.2 22.5 20.5 16.4 19.4 16.6 17.9 12.7 13.9
问题:公司生产的引擎是否符合*规定呢?
准备基础数据:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
from scipy import stats #科学计算包
#样本数据集
sample=pd.Series([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9])
A、假设检验:
1、描述统计分析
#描述统计分析
sample_mean=sample.mean()#样本均值
sample_std=sample.std()#样本标准差
print('样本均值:%.2f' %sample_mean, '单位:ppm')
print('样本标准差:%.2f' %sample_std, '单位:ppm')
输出:
2、推论统计分析
1)问题是什么?
小样本的抽样分布是否满足t分布使用条件(总体近似正态)?因总体未知,此处只能通过样本数据的可视化分布,大致推断总体是否服从单峰的正态分布。
'''
唯一需要确定的问题:总体分布是未知的,要通过样本数据估计总体的分布,采用可视化方法粗略查看;
通过sns.distplot方法绘制直方图和核密度(kde)曲线图
'''
sns.set(font='SimHei') # 解决Seaborn中文显示问题
sns.distplot(sample)
plt.title('样本集分布')
通过观察样本集分布,可以看出总体近似服从正态分布。
总结:定义了零假设和备择假设,确定了检验类型为单样本t检验中的左尾检验,*度df=9。
2)证据是什么?
证据就是计算p值(零假设成立的前提下,出现样本均值的概率),此处有两种计算方法。
#计算P值
'''
stats.ttest_1samp(),第一个参数:样本数据;第二个参数:总体均值
计算结果:第一个值表示t值,第二个值表示双尾的p值
'''
pop_mean=20
t, p_2tailed=stats.ttest_1samp(sample, pop_mean)
print('t值:t=%.2f,\n双尾p值:p_2tailed=%f' %(t, p_2tailed))
输出:
由于该例属于单尾检验,所以最终的p值需要双尾p值除以2:
#因为此处为单位(左尾)检验,最终的p值为双尾p值的一半
p_1tail=p_2tailed/2
print('左尾检验的p值是:%f' %p_1tail)
输出:
3)判断标准是什么?
常用的显著性水平α=5%
4)结论是什么?
单尾p值与显著性水平α作比较:当p<=α时,拒绝零假设H0,接受备择假设H1;当p>α时,没有充分的证据拒绝零假设(倾向于接受H0,但需要进一步证据)。
'''
左尾判断条件:t<0,且单位p值<alpha
右尾判断条件:t>0, 且单尾p值<alpha
'''
alpha=0.05
if(t<0 and p_1tailed<alpha):
print('统计显著,拒绝零假设,接受备择假设。即:汽车引擎排放<20ppm,满足标准。')
else:
print('没有充分的证据证明汽车引擎满足排放标准。')
输出:
B、置信区间:
置信区间在不同的置信水平下有不同的“宽度”,此处置信水平为95%。
#置信区间,在不同的置信水平下有不同的“宽度”,取置信水平为95%
'''
第一个参数代表置信水平:1-0.05=0.95
第二个参数代表*度:df=n-1=9
第三个参数代表样本均值sample_mean
第四个参数代表样本标准误:se
'''
confidence=1-alpha
df=9
loc=sample_mean
scale=stats.sem(sample)
CI=stats.t.interval(confidence,df,loc,scale)
print('95%置信区间CI=',CI)
输出:
C、效应量:
当假设检验具有统计显著的结论时,需要进一步研究是否具有实际意义,即实验结果是否“效果显著”?衡量效果显著用Cohen’s d指标,它表示:样本均值1与样本均值2,差异有几个标准差。差异大小的衡量标准如下:
#效应量:当假设检验具有统计显著的结论时,需要进一步研究是否具有实际有意义,即实验结果是否“效果显著”,衡量效果显著用Cohen's d指标。
#它表示:样本均值1和样本均值2差距了几个标准差,差距的大小衡量标准是:0.2以内为小;0.5以内为中;0.8以内为大。
Cohen=(sample_mean-20)/sample_std
print('Cohen\'s值=',Cohen,',效果显著。')
输出:
四、相关配对t检验:斯特鲁普效应验证
待补充
五、独立双样本t检验:A/B测试
待补充
上一篇: 制作圆角按钮,并点击时变色
下一篇: 收据模板 纯css+html