一.假设检验的步骤1.问题是什么? H0;H1
2.证据是什么? 由样本数据计算H0成立的概率p-value
3.判断标准是什么? 显著性水平alpha=5%/1%/0.1%
4.做出结论。若p-value
二.案例分析
“超级引擎”是一家专门生产汽车引擎的公司,根据政府发布的新排放要求,引擎排放平均值要低于20ppm, (ppm是英文百万分之一的缩写,这里我们只要理解为是按照环保要求汽车尾气中碳氢化合物要低于20ppm)。公司制造出10台引擎供测试使用,每一台的排放水平如下:15.6 16.2 22.5 20.5 16.4 19.4 16.6 17.9 12.7 13.9
怎么知道公司生产的引擎是否符合政府规定呢?如果你是这家公司的数据分析师,该怎么办呢?
1.描述统计分析
我们开展调查研究并计算统计结果时,我们会在报告的第一部分进行描述统计分析,例如平均值和标准差。描述统计量是研究的核心。告诉我们研究中发生的情况,应该始终报告出来。
#导入包
import pandas as pd
import numpy as np
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,'单位:ppm')
print('样本标准差=',sample_std,'单位:ppm')
'''这里要区别:数据集的标准差,和样本标准差数据集的标准差公式除以的是n,样本标准差公式除以的是n-1。样本标准差,用途是用样本标准差估计出总体标准差pandas计算的标准差,默认除以的是n-1,也就是计算出的是样本标准差'''
(2)推论统计分析
推论统计分析报告中包括:假设检验,置信区间,效应量
(2.1) 问题是什么?零假设和备选假设
要研究的问题是:这些样本数据是否满足新标准呢?
根据这个问题我提出来下面两个互为相反的假设。
零假设H0:公司引擎排放不满足标准,也就是平均值u>=20。这里的20是政府规定新标准的最低可能值。
零假设总是表述为研究没有改变,没有效果,不起作用等,这里就是不满足标准。
备选假设H1:公司引擎排放满足标准,也就是平均值u<20
(2.2) 检验类型
因为这里只有1个样本,所以选择单样本检验。
(2.3)抽样分布类型
我们还要判断抽样分布是哪种?因为抽样分布的类型,决定了后面计算p值的不同。
在我们这个汽车引擎案例中,样本大小是10(小于30),属于小样本。那小样本的抽样分布是否满足t分布呢?因为t分布还要求数据集近似正态分布,所以下面图片我们看下样本数据集的分布长什么样。
'''直方图能够粗略估计数据密度,如果想给数据一个更精确的拟合曲线(专业术语叫:核密度估计kernel density estimate (KDE)),Seaborn 可以很方便的画出直方图和拟合曲线。查看数据集分布官网教程地址:https://seaborn.pydata.org/tutorial/distributions.html'''
'''需要先在navigator中安装绘图包seaborn,'''
import seaborn as sns
#查看数据集分布
sns.distplot(dataSer)
plt.title('数据集分布')
plt.show()
通过观察上面数据集分布图,数据集近似正态分布,满足t分布的使用条件,所以抽样分布是t分布,自由度df=n-1=10-1=9。
注:柱状图与直方图的区别
(2.4)检验方向
单尾检验(左尾,右尾),还是双尾检验?
因为备选假设是公司引擎排放满足标准,也就是平均值u<20。所以我们使用单尾检验中的左尾检验。
综合以上分析,本次假设检验是单样本t检验,单尾检验中的左尾。
(2.5)计算t值与p-value
在零假设成立前提下,得到样本平均值的概率p是多少?
计算p值步骤:
#方法一:手动计算,熟悉过程
# 1)计算标准误差:标准误差=样本标准差/(n的开方)
#样本大小
n = 10
#标准误差=样本标准差/(n的开方)
se =sample_std / (np.sqrt(n))
# 2)手动计算t值:t=(样本平均值-总体平均值)/标准误差
#总体平均值:就是政府发布的标准20
pop_mean=20
#t值
t=(sample_mean-pop_mean) / se
#计算出t值=-3
print('标准误差se=',se)
print('t=',t)
'''2)也可以查t表得到对应的t值3)计算自由度df=n-1,t值对应的概率:p=0.0149计算p值的工具:https://www.graphpad.com/quickcalcs/'''GraphPad Software#方法一:手动计算,熟悉过程
# 1)计算标准误差:标准误差=样本标准差/(n的开方)
#样本大小
n = 10
#标准误差=样本标准差/(n的开方)
se =sample_std / (np.sqrt(n))
# 2)手动计算t值:t=(样本平均值-总体平均值)/标准误差
#总体平均值:就是政府发布的标准20
pop_mean=20
#t值
t=(sample_mean-pop_mean) / se
#计算出t值=-3
print('标准误差se=',se)
print('t=',t)
'''2)也可以查t表得到对应的t值3)计算自由度df=n-1,t值对应的概率:p=0.0149计算p值的工具:https://www.graphpad.com/quickcalcs/'''
'''方法二:用python统计包scipy自动计算用scipy计算出的是:双尾检验单(1samp)样本t检验(ttest_1samp):https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_1samp.html相关(related)样本t检验(ttest_rel):https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_rel.html双独立(independent)样本t检验(ttest_ind):https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html'''
#导入统计模块(stats)
from scipy import stats
#总体平均值
pop_mean=20
'''ttest_1samp:单独样本t检验返回的第1个值t是假设检验计算出的(t值),第2个值p是双尾检验的p值'''
t,p_two =stats.ttest_1samp(dataSer,pop_mean)
print('t值=',t,'双尾检验的p值=',p_two)
'''因为scipy计算出的是双尾检验的t值和p值,但是我们这里是左尾检验。根据对称性,双尾的p值是对应单尾p值的2倍'''
#单尾检验的p值
p_one=p_two/2
print('单尾检验的p值=',p_one)
(2.6)比较,得出结论
#判断标准(显著水平)使用alpha=5%
alpha=0.05
'''左尾判断条件:t < 0 and p_one < 判断标准(显著水平)alpha右尾判断条件:t > 0 and p_one < 判断标准(显著水平)alpha'''
#做出结论
if(t<0 and p_one< alpha):
#左尾判断条件
print('拒绝零假设,有统计显著,也就是汽车引擎排放满足标准')
else:
print('接受零假设,没有统计显著,也就是汽车引擎排放不满足标准')
结论:独立样本t(9)=-3.00 , p=.0074 (α=5%),单尾检验(左尾)
(2.7)置信区间
'''1)置信水平对应的t值(t_ci)查t表格可以得到,95%的置信水平,自由度是n-1对应的t值2)计算上下限置信区间上限a=样本平均值 - t_ci ×标准误差置信区间下限b=样本平均值 - t_ci ×标准误差'''
'''查找t表格获取95%的置信水平,自由度是n-1对应的t值'''
t_ci=2.262
#使用scipy计算标准误差
se=stats.sem(dataSer)
#置信区间上限
a=sample_mean - t_ci * se
#置信区间下限
b=sample_mean + t_ci * se
print('单个平均值的置信区间,95置信水平 CI=(%f,%f)' % (a,b))
(2.8)效应量
为什么要给出效应量?在判断某个调查研究的结果,是否有意义或者重要时,要考虑的另一项指标是效应量。效应量太小,意味着处理即使达到了显著水平,也缺乏实用价值。所以,在假设检验中,我们给出了是否具有统计显著性,也要给出效应量,一起来判断研究结果是否有意义。
效应量是指处理效应的大小,例如药物A比药物B效果显著。度量效应量有很多种,但大多数都属于两大主要类别。
1)第一种叫做差异度量
例如在对比平均值时,衡量效应大小的常见标准之一是Cohen's d
Cohen's d = (样本平均值1-样本平均值2) / 标准差
Cohen's d 除以的是标准差,也就是以标准差为单位,样本平均值和总体平均值之间相差多少。
我们用d的绝对值来衡量效果的显著性。
2)第二种叫做相关度度量
例如R平方,表示某个变量的变化比例与另一变量的关系。可以用t检验的信息推出R平方的公式,这里的t值从t检验中获得的值,df是自由度。
r2=t2 / (t2+df),其中r2是指r的平方,t2是t的平方
如果r平方等于20%,表示我们可以说通过知道另一个变量能够接受相关变量20%的变化情况
'''效应量:差异指标Cohen's dd=(sample_mean - pop_mean) / sample_std效应量:相关度指标R2'''
n=10 #样本大小
df=n-1 #自由度
R2=(t*t)/(t*t+df)
print('d=',d)
print('R2=',R2)
3.案例分析总结
1、描述统计分析
样本平均值17.17ppm,样本标准差2.98ppm
2、推论统计分析
1)假设检验
独立样本t(9)=-3.00,p=.0074(α=5%),单尾检验(左尾)
公司引擎排放满足标准
2)置信区间
平均值的置信区间,95% CI=(17.11,17.23)
3)效应量
d=-0.94