使用置信区间
置信区间只有一个目的——基于随机样本中的数据估计未知参数。在上一节中,我们说区间(36%, 42%)是总体中母亲吸烟百分比的一个近似95%置信区间。这是一种正式的表达方式,表明根据我们的估计,总体中母亲吸烟的百分比在36%到42%之间,并且我们的估计过程在大约95%的情况下是正确的。
重要的是要抵制将置信区间用于其他目的的冲动。例如,回想一下,我们计算了区间(26.9岁, 27.6岁)作为总体中母亲平均年龄的近似95%置信区间。一个令人沮丧的常见误用是得出结论:约95%的女性年龄在26.9岁到27.6岁之间。你不需要了解很多置信区间的知识就能看出这不对——你不会期望95%的母亲年龄都在彼此相差几个月之内。事实上,样本年龄的直方图显示出相当大的变异。
from datascience import *
%matplotlib inline
path_data = '../../../assets/data/'
import matplotlib.pyplot as plots
plots.style.use('fivethirtyeight')
import numpy as np
births = Table.read_table(path_data + 'baby.csv')
births.select('Maternal Age').hist()
Histogram with 'Maternal Age' on the x-axis and 'Percent per unit' on the y-axis. The bars increase in height from 15 to about 25, then decreases through 45.样本年龄中只有很小的百分比落在(26.9, 27.6)区间内,你可以预期总体中也有类似的很小百分比。该区间只估计了一个数字:总体中所有年龄的平均值。
然而,用置信区间估计参数除了大致告诉我们参数的大小之外,还有一个重要的用途。
使用置信区间检验假设
我们对总体平均年龄的近似95%置信区间从26.9岁到27.6岁。假设有人想检验以下假设:
原假设: 总体平均年龄为30岁。
备择假设: 总体平均年龄不是30岁。
那么,如果你使用5%的p值临界值,你将拒绝原假设。这是因为30不在总体平均值的95%置信区间内。在5%显著性水平下,30不是总体平均值的合理值。
置信区间的这种用途是置信区间与检验之间“对偶性”(duality)的结果:如果你正在检验总体均值是否等于某个特定值 x,并且你使用5%作为p值的临界值,那么如果 x 不在你的均值95%置信区间内,你将拒绝原假设。
这可以通过统计理论来证明。在实践中,这归结为检查原假设中指定的值是否落在置信区间内。
如果你使用1%作为p值的临界值,你需要检查原假设中指定的值是否落在总体均值的99%置信区间内。
粗略近似地说,这些陈述对于总体比例也成立,前提是样本足够大。
虽然我们现在有了一种使用置信区间来检验特定类型假设的方法,但你可能会怀疑检验总体平均年龄是否等于30的价值。确实,这个价值并不明确。但在某些情况下,这类假设的检验既自然又有用。
比较基线与治疗后评分
我们将在关于霍奇金病治疗的随机对照试验所收集数据的子集背景下研究这个问题。霍奇金病是一种通常影响年轻人的癌症。这种疾病可以治愈,但治疗可能非常严苛。该试验的目的是找到既能治愈癌症又能最小化对患者副作用的剂量。
表格 hodgkins 包含治疗对22名患者肺部影响的数据。各列是:
- 身高(厘米)
- 对斗篷野(颈部、胸部、腋下)的辐射剂量
- 化疗剂量
- 基线时(即治疗开始时)的肺部健康评分;分数越高表示肺部越健康
- 治疗后15个月时相同的肺部健康评分
hodgkins = Table.read_table(path_data + 'hodgkins.csv')
hodgkins.show(3)
<IPython.core.display.HTML object>我们将比较基线和15个月的评分。由于每行对应一名患者,我们说基线评分样本和15个月评分样本是“配对的”(paired)——它们不仅仅是各22个值的两组,而是22对值,每名患者一对。
一眼看去,你可以看到15个月的评分往往低于基线评分——样本患者的肺部在治疗后15个月似乎变得更差。这在 drop 列(评分从基线到15个月下降的量)大多为正值中得到确认。
hodgkins = hodgkins.with_columns(
'drop', hodgkins.column('base') - hodgkins.column('month15')
)
hodgkins
height | rad | chemo | base | month15 | drop
164 | 679 | 180 | 160.57 | 87.77 | 72.8
168 | 311 | 180 | 98.24 | 67.62 | 30.62
173 | 388 | 239 | 129.04 | 133.33 | -4.29
157 | 370 | 168 | 85.41 | 81.28 | 4.13
160 | 468 | 151 | 67.94 | 79.26 | -11.32
170 | 341 | 96 | 150.51 | 80.97 | 69.54
163 | 453 | 134 | 129.88 | 69.24 | 60.64
175 | 529 | 264 | 87.45 | 56.48 | 30.97
185 | 392 | 240 | 149.84 | 106.99 | 42.85
178 | 479 | 216 | 92.24 | 73.43 | 18.81
... (12 rows omitted)hodgkins.select('drop').hist(bins=np.arange(-20, 81, 20))
Histogram with 'drop' on the x-axis and 'Percent per unit' on the y-axis. The x-axis extends from -20 to 80. The first three bars grow in height until x=40, then the two remaining bars are smaller, just taller than the first bar.np.average(hodgkins.column('drop'))
28.615909090909096在样本中,平均下降值约为28.6。但这可能是随机变异的结果吗?数据来自一个随机样本。有没有可能在整个患者总体中,平均下降值就是0?
为了回答这个问题,我们可以建立两个假设:
原假设: 在总体中,平均下降值为0。
备择假设: 在总体中,平均下降值不为0。
为了以1%的p值临界值检验这个假设,让我们构建总体平均下降值的近似99%置信区间。
def one_bootstrap_mean():
resample = hodgkins.sample()
return np.average(resample.column('drop'))
# Generate 10,000 bootstrap means
num_repetitions = 10000
bstrap_means = make_array()
for i in np.arange(num_repetitions):
bstrap_means = np.append(bstrap_means, one_bootstrap_mean())
# Get the endpoints of the 99% confidence interval
left = percentile(0.5, bstrap_means)
right = percentile(99.5, bstrap_means)
make_array(left, right)
array([17.46863636, 40.97681818])resampled_means = Table().with_columns(
'Bootstrap Sample Mean', bstrap_means
)
resampled_means.hist()
plots.plot([left, right], [0, 0], color='yellow', lw=8);
Histogram with 'Bootstrap Sample Mean' on the x-axis with 'Percent per unit' on the y-axis. The graph is bell shaped and centered around 30. A yellow bar extends along the bottom of the graph from below 20 to above 40.总体平均下降值的99%置信区间从约17到约40。该区间不包含0。因此我们拒绝原假设。
但请注意,我们做得比简单得出“总体平均下降值不是0”的结论更好。我们估计了平均下降值的大小。这比仅仅说“它不是0”有用得多。
关于准确性的说明: 我们的置信区间相当宽,主要有两个原因: - 置信水平很高(99%)。 - 与我们之前示例中的样本量相比,样本量相对较小。
在下一章中,我们将研究样本量如何影响准确性。我们还将研究为什么样本均值的经验分布如此频繁地呈现钟形,尽管底层数据的分布根本不是钟形的。