我们可以使用自助法和抽样分布,构建感兴趣参数的置信区间。
通过找出对感兴趣参数进行最好估计的统计量 (例如样本平均数估算总体平均数或样本平均数的差异估算总体平均数的差异),我们可以很容易构建感兴趣参数的置信区间。
你可以将置信区间理解为可信度为95%
,总体平均数落在你发现的范围内 。注意根据构建置信区间的目的和每端删除的百分比,百分比和参数都会发生变化。
python构建置信区间
导入必要的库和数据集
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
% matplotlib inline
np.random.seed(42)
coffee_full = pd.read_csv('coffee_dataset.csv')
coffee_red = coffee_full.sample(200)
计算样本的统计量
- 样本中喝咖啡的人的比例
# 样本中喝咖啡的人的比例
num_total = coffee_red.shape[0]
num_coffee = coffee_red[coffee_red['drinks_coffee']==True].shape[0]
pop_coffee = num_coffee/num_total
pop_coffee
- 不喝咖啡的人的比例
# 不喝咖啡的人的比例
num_non_coffee = coffee_red[coffee_red['drinks_coffee']==False].shape[0]
pop_non_coffee = num_non_coffee/num_total
pop_non_coffee
- 喝咖啡的人的平均身高
# 在喝咖啡的人中,他们的平均身高是多少
coffee_mean = coffee_red[coffee_red['drinks_coffee']==True]['height'].mean()
- 不喝咖啡的人的平均身高
# 在不喝咖啡的人中,他们的平均身高是多少
non_coffee_mean = coffee_red[coffee_red['drinks_coffee']==False]['height'].mean()
non_coffee_mean
- 喝咖啡的人的比例
# 喝咖啡的人的比例是多少
full_num_coffee = full_sample[full_sample['drinks_coffee'] == True].shape[0]
full_num_coffee/200
- 不喝咖啡的人的比例
# 不喝咖啡的人的比例是多少
full_num_non_coffee = full_sample[full_sample['drinks_coffee'] == False].shape[0]
full_num_non_coffee/200
用Bootstrap的方法从样本中再次抽取样本
# 模拟来自200个原始样本的200个“新”个体
full_sample = coffee_red.sample(200,replace=True)
full_sample.head(1)
- 计算新样本统计量
# 喝咖啡的人的比例是多少
full_num_coffee = full_sample[full_sample['drinks_coffee'] == True].shape[0]
full_num_coffee/200
# 不喝咖啡的人的比例是多少
full_num_non_coffee = full_sample[full_sample['drinks_coffee'] == False].shape[0]
full_num_non_coffee/200
10,000次Bootstrap抽样
#10,000次有放回抽样,取每个样本中不喝咖啡的人的平均身高
full_sample_10000 = []
for i in range(10000):
sample_single = coffee_red.sample(200,replace=True)
full_sample_10000.append(sample_single[sample_single['drinks_coffee']==False]['height'].mean())
full_sample_10000[0]
- 作图
plt.hist(full_sample_10000);
- 置信区间
# 并拉出95%置信区间所需的值
np.percentile(full_sample_10000, 2.5),np.percentile(full_sample_10000, 97.5)
- 总体均值
coffee_full[coffee_full['drinks_coffee']==False]['height'].mean()
可以发现总体均值在置信区间内。
置信区间的应用
用于检验两个均值的差异是否为零。
- 对服药的一组人与不服药的一组人进行比较,以确认药物的疗效。
- 对不同的人群实施不同的教学方法,以确定那种方法更有效。
- A/B测试。
统计显著性与实际显著性
使用置信区间和假设检验,你能够在做决策时提供统计显著性。
然而,做决策时考虑实际显著性同样很重要。实际显著性考虑到所处情况的其他因素,假设检验或置信空间的结果可能不会直接考虑到这种情况。空间、时间或金钱等约束条件对商业决定很重要。但是可能不会在统计测试中直接考虑这些因素。
传统的置信区间
除了Bootstrap方法,还有许多传统的置信区间/假设检验方法。即由样本观察值按相应的公式计算出统计量的大小,如X2值、t值等。根据资料的类型和特点:
1.总体均值的检验:单个正态总体,总体方差已知,于大样本(即样本容量大于30)平均值差异性检验的方法。使用Z或U检验法。
2.总体均值的检验:总体方差未知,主要用于样本含量较小(例如n<30),T检验法【1】。
3.总体方差的检验:均值已知,X2分布
4.总体方差的检验:均值未知,F分布。
一个对于传统方法有根据但是具有潜在偏见的看法是,这些方法在现代统计学计算中不再需要。这些方法在未来计算中重要性不断降低。所以在特定情况下记住这些公式,可能并不重要。然而,是你还是应该仔细传统技巧。
为了学习更多传统方法,参见对应的假设检验文档 此处。
在左侧空白处,你会发现下拉出现假设检验,如下图所示。
每个假设检验都有对应的置信区间,但是可以再次使用自展法,替代这些内容!通过理解你可以估算的内容,模拟统计量的抽样分布,得到最佳估计。
样本容量较大,最终相似性越高。对于较小的样本容量,使用传统方法可以产生区间不正确的设想。样本容量较小,也不适合自助法,因为可能会因为无法较好地展现整个总体,所以产生错误结果。
置信区间特性
了解样本容量和置信度与最终分析后置信区间的关系,这是非常重要的。
假设你可以控制分析中其他所有条目:
- 增加样本容量,会降低置信区间的宽度。
- 增加置信度 (如 95% 增加到 99%) 会增加置信区间的宽度。
你注意到可以计算:
- 置信区间宽度,作为置信区间上限与下限的差异。
- 误差范围是置信区间宽度的一半,通过对样本估计值的加减,达到置信区间的最终结果。
置信区间 (和假设检验) 与机器学习
置信区间采用综合方法,基于数据得出结论,因为这些测试旨在理解总体的参数 (即总体数值的集合)。
另一方面,机器学习采用个别方法得出结论,因为通过每个单独数据点预测结果。
【1】# Confidence Interval for t-test (difference between means) in Python