假设检验的一般步骤
- 将问题转化为两个不重叠且对立的假设
- 收集数据
- 判断哪个假设可能是真的
设置零假设和备择假设的一些规则
- H0是我们收集数据之间为真的事情。
- H0通常表示没有影响或对两组影响相同。
- H0和H1是竞争性、非重叠的假设。
- H1备择假设是可以证明为真的事情:如果我们可以证明为真,则具有意义。
- H0包含一个等号:=、≤ 或 ≥。
- H1包含非空值:≠、>或< 。
例子
- 例如表述 "证明有罪之前是无辜的" 表明下列假设为真:
H0 : 无辜的
H1 : 有罪的
我们可以认为在收集数据之前,"无辜的" 为真。然后备择假设
必须是竞争性、非重叠的假设。因此备择假设
为一个人有罪。 - 我们想测试新页面是否优于已有页面:
我们设置备择假设。两个指标需要遵守,一是零假设
应当包含等于号,二是备择假设
应当包含我们希望为真的陈述。 因此,它应为以下形式:
: μ1 ≤ μ2
: μ1 > μ2
这里,μ1代表新页面返回的总体平均数。同样,μ2代表原来页面返回的总体平均数。
根据你感兴趣的问题,你可以改变需要匹配的零假设和备择假设。
两类错误
I 类错误
I 类错误 包含以下特征:
- 设置
零假设
和备择假设
,I 类错误是更严重的错误。 - 它们由α 符号表示。
- I 类错误的定义是: H0 为真时,认为
备择假设
H1 为真。 - I 类错误通常称为
误报
。
II 类错误
- 它们由β 符号表示。
- II 类错误的定义是:H1 为真时,认为
零假设
H0 为真。 - II 类错误通常称为
漏报
。
在一些极端情况下,我们通常选择一个假设 (如一直选择零假设
),确保某个错误不再出现 (假设我们一直选择零假设
,不再出现 I 类错误)。不过,一般来说,一些单一的数据会降低某个错误类型的可能性,增加另一种错误类型的出现几率,两者是存在联系的。
降落伞例子
这个例子可以让你了解假设检验中犯错的极端情况。出现 I 类错误,会有一个人死去。出现 II 错误,你会减少 30 美元。
在接下来课程中你构建的假设检验,你能够选择 I 类错误阈值,并且保证 I 类错误率符合要求后,你的假设检验可以最小化 II 类错误。
假设检验的一般类型
你通常针对总体参数进行假设测验,而不是针对统计量。统计量是已经从数据中得到的,因此不需要假设测试验证这些数值。
常见的传统假设检验包括:
- 测试总体平均数 (单样本 t 检验)。
- 测试均数差 (双样本 t 检验)
- 测试个体治疗前后的差异 (配对 t 检验)
- 测试总体比例 (单样本 z 检验)
- 测试总体比例的差异 (双样本 z 检验)
这有几百个不同的假设检验! 不过,不需要记忆如何完成所有这些检验,而是找到最佳估算参数的统计量,然后使用自助法(Bootstrap)模拟抽样分布。然后你可以利用抽样分布,帮助选择合适的假设检验。
假设检验的两种方法
建立了两个假设之后,我们就可以利用数据判定哪种假设的可能性较大。在两个假设中选择一个,有两种方法。
- 置信区间
模拟统计量
的抽样分布,然后看我们的是否与在抽样分布中观察到的一致。即对样本进行Bootstrap抽样,得到统计量的抽样分布,进而得到置信区间。检查假设是否在置信区间内。
以python演示求置信区间的过程:
- 导入库和数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
np.random.seed(42)
full_data = pd.read_csv('coffee_dataset.csv')
- 总体参数
full_data['height'].mean()
full_data['height'].std()
- 取样本
sample1 = full_data.sample(5)
# 样本的平均身高
sample1['height'].mean()
sample1['height'].std()
- Bootstrap
sample_data_5_10000 = []
for i in range(10000):
sample_5 = full_data.sample(5)
sample_data_5_10000.append(sample_5['height'].mean())
- 得到统计量(均值)的抽样分布
plt.hist(sample_data_5_10000);
- 置信区间
lower_bound=np.percentile(sample_data_5_10000, 2.5), upper_bound=np.percentile(sample_data_5_10000, 97.5)
plt.hist(sample_data_5_10000);
plt.axvline(x=lower_bound, color = 'red'); # where our sample mean falls on null dist
plt.axvline(x=upper_bound, color = 'red'); # where our sample mean falls on null dist
- 假设检验
模拟我们认为假设中,会出现的情况,然后观察我们的数据与它是否一致。即假设为真,我们用假设里最接近假设的值模拟,以获得抽样分布的形状。例如,如果为μ ≤ 70,那么就以μ = 70模拟抽样分布的均值。然后根据Bootstrap抽样,获得统计量抽样分布的标准差。用正态分布【1】进行模拟。最后计算得到样本均值,如果样本均值远低于我们模拟出来的抽样分布,则我们不大可能认为他来自这个假设。
归纳为
- 模拟零假设中得出统计量的数值。
- 计算你实际从数据中得到统计量的数值。
- 对比统计量和零假设中的数值。
- 根据备择假设,计算被视为极端空值的比例。
在上一节的基础上:
- 模拟我们认为假设中,会出现的情况
# H0 假设下的均值
pop_mean = 67.60
# 然后根据Bootstrap抽样,获得统计量抽样分布的标准差
std_sampling_dist = np.std(sample_data_5_10000)
# 正态分布
null_vals = np.random.normal(pop_mean, std_sampling_dist, 10000)
plt.hist(null_vals)
plt.axvline(x=sample1.height.mean(), color = 'red'); # where our sample mean falls on null dist
- 对比统计量和零假设中的数值
# 观测值的均值
sample1_mean = sample1.height.mean()
sample1_mean
# 比观测值大的统计量的概率
prob_more_obs = (null_vals > sample1_mean).mean()
prob_more_obs
# 比观测值小的统计量的概率
prob_less_obs = (null_vals <pop_mean- (sample1_mean - pop_mean)).mean()
prob_less_obs
这两种方式得出的结果是不一样的。这是因为在上方“假设检验”视频中是以 μ = 70 为中心模拟出的正态分布,因此最终拒绝的零假设是 μ = 70, 而“置信区间”方法中, 为μ ≤ 70。
p 值
p 值是零假设为真时,得到支持备择假设或更极端数值的概率。支持备择假设的更多极端部分决定了 p 值相关的阴影。
我们假设某人无辜,却观察到某人实际上有罪的概率。
p 值小,表示零假设
不正确。相反,我们的统计量可能来自不同于零假设
的分布。
p 值很大时,我们可以证明统计量很可能来自零假设
。所以我们无法证明拒绝零假设
。
通过对比 p 值和 I 类错误阈值 (α),我们可以决定选择哪个假设。
pval≤α ⇒ 拒绝
pval>α ⇒ 不拒绝
如果参数大于备择假设
中的某个数值,为了得到 p 值,你的阴影可能是这样的:
如果参数小于备择假设中的某个数值,为了得到 p 值,你的阴影可能是这样的:
如果你的参数不等于备择假设中的某个数值,为了得到 p 值,你的阴影可能是这样的:
假设检验总结
无论是在零假设还是在备择假设中,陈述时要避免出现接受这个单词。我们并不是陈述某个假设为真。相反对于 I 类错误的阈值,你根据零假设中数据的相似性做出决定。
所以,可以出现在假设检验中的措辞包括我们拒绝零假设或者我们不拒绝零假设。这有助于你最初零假设默认为真,并且如果没有收集数据,在测试最后 "选择" 零假设,是正确选择。
确保样本代表你感兴趣的总体
解读任何统计结果 (这一点常被忽视) 的最重要一方面在于确保样本代表你感兴趣的总体。
尤其是在当今计算机时代收集数据的方式,应答偏差非常重要,要牢记于心。2016年美国大选中,许多媒体进行的民意调查与实际民意调查存在惊人差异。你可以从 这里 了解反应偏差的作用。
假设检验与机器学习
样本容量很大时,假设检验会产生统计意义最小的发现。然而,这些发现可能根本不具有现实意义。
例如,假设你在一项针对 100 多万人的研究中发现从统计学上来说更多人喜欢啤酒 1,而不是啤酒 2。根据这个结果,你决定开店售卖啤酒 1。然后你发现啤酒 1 的流行度只比啤酒 2 高出 0.0002% (但是在样本容量很大的情况中,这个具有统计意义)。实际上,你应该开店售卖两种啤酒。
即使样本平均数和假设总体平均数存在最小的差异,在样本容量很大时,这也非常重要。
假设检验采用综合方法,得出基于数据的结论,因为这些检验旨在了解总体参数 (即综合的总体数值)。
另外,机器学习技巧采用个体方法得出结论,因为他们旨在预测每个特殊数据点的结果。
对结果进行矫正
邦弗朗尼校正法
如果我们把同一类型的假设检验进行20次,如果一类错误率是5%,可以预计其中一次检验的结构是选择对立假设。世界上有很多人都在进行相同的研究,如果一个人获得了显著性的结果(拒绝),那么如何确定这些成果是I类错误?
如果完成多个假设检验,你的 I 类错误更加严重。为了纠正这点,通常采用邦弗朗尼校正法。这种校正法非常保守,认为I 类最新错误率应为实际想得到的错误率除以完成检验的数量。
所以,如果你想在 20 个假设检验中把 I 类错误率维持在 1%,邦弗朗尼 校正率应为 0.01/20 = 0.0005。你应该使用这个新比率,对比每 20 个检验的 p 值,做出决定。
其他技巧
避免出现复合 I 类错误的其他技巧包括:
如何对比置信区间和假设检验
一个双尾假设检验(备择假设中包含≠ )在结论方面与作为置信区间的结论相同,只要:
1 - 0.95 = 0.05
例如,95%置信区间将得出与假设选择的 I 型错误率为 0.05 的假设检验相同的结论,因为,在备择假设是双尾检验的时候:
1 - 0.95 = 0.05
更多支持可以参考免费课程:https://classroom.udacity.com/courses/ud201?contentVersion=1.0.0&contentLocale=en-us
【1】理论依据可参照中心极限定理中的林德伯格-列维定理