欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

统计中的假设检验介绍-t检验-A/B测试及python示例

程序员文章站 2022-04-27 17:29:54
...

写在前面:

  • 假设检验,是根据一定的假设条件,由样本推断总体的一种方法。

  • 我以前常分不清楚如何定义原假设和被择假设,后来用一个例子才记得比较深刻:就像法庭审判犯人,会首先假设他是一个好人(备择假设),然后提交证据证明他是有罪的(原假设)。

    所以假设检验选择原假设和备择假设的原则如下:
    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中包含不等号"≠",则为双尾。

检验类型及检验方向的判定,总结为下表:
统计中的假设检验介绍-t检验-A/B测试及python示例

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检验-A/B测试及python示例

三、单样本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')

输出:
统计中的假设检验介绍-t检验-A/B测试及python示例
2、推论统计分析

1)问题是什么?
统计中的假设检验介绍-t检验-A/B测试及python示例

小样本的抽样分布是否满足t分布使用条件(总体近似正态)?因总体未知,此处只能通过样本数据的可视化分布,大致推断总体是否服从单峰的正态分布。

'''
唯一需要确定的问题:总体分布是未知的,要通过样本数据估计总体的分布,采用可视化方法粗略查看;
通过sns.distplot方法绘制直方图和核密度(kde)曲线图
'''
sns.set(font='SimHei')  # 解决Seaborn中文显示问题
sns.distplot(sample)
plt.title('样本集分布')

统计中的假设检验介绍-t检验-A/B测试及python示例
通过观察样本集分布,可以看出总体近似服从正态分布。

总结:定义了零假设和备择假设,确定了检验类型为单样本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))

输出:
统计中的假设检验介绍-t检验-A/B测试及python示例
由于该例属于单尾检验,所以最终的p值需要双尾p值除以2:

#因为此处为单位(左尾)检验,最终的p值为双尾p值的一半
p_1tail=p_2tailed/2
print('左尾检验的p值是:%f' %p_1tail)

输出:
统计中的假设检验介绍-t检验-A/B测试及python示例
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('没有充分的证据证明汽车引擎满足排放标准。')

输出:
统计中的假设检验介绍-t检验-A/B测试及python示例
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)

输出:
统计中的假设检验介绍-t检验-A/B测试及python示例
C、效应量:

当假设检验具有统计显著的结论时,需要进一步研究是否具有实际意义,即实验结果是否“效果显著”?衡量效果显著用Cohen’s d指标,它表示:样本均值1与样本均值2,差异有几个标准差。差异大小的衡量标准如下:
统计中的假设检验介绍-t检验-A/B测试及python示例

#效应量:当假设检验具有统计显著的结论时,需要进一步研究是否具有实际有意义,即实验结果是否“效果显著”,衡量效果显著用Cohen's d指标。
#它表示:样本均值1和样本均值2差距了几个标准差,差距的大小衡量标准是:0.2以内为小;0.5以内为中;0.8以内为大。
Cohen=(sample_mean-20)/sample_std
print('Cohen\'s值=',Cohen,',效果显著。')

输出:
统计中的假设检验介绍-t检验-A/B测试及python示例

四、相关配对t检验:斯特鲁普效应验证

待补充

五、独立双样本t检验:A/B测试

待补充