From 771906158879739d4be0018251f2d857918111c2 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Mon, 1 Jan 2018 22:57:56 +0800 Subject: [PATCH] ch11. --- 11.md | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) diff --git a/11.md b/11.md index ac5ccef..0bc4703 100644 --- a/11.md +++ b/11.md @@ -496,4 +496,146 @@ intervals.where('Left', are.below(pop_median)).where('Right', are.above(pop_medi 你可以用一个不同的值代替 95%,只要它不是 100。假设你用 80% 代替了 95%,并保持样本大小为 500。那么你的估计量的区间将比我们这里的模拟要短,因为“中间 80%”是比“中间 95%”更小的范围。只有大约 80% 的区间将包含参数。 +## 置信区间 + +我们已经开发了一种方法,通过使用随机抽样和自举来估计参数。我们的方法产生一个估计区间,来解释随机样本的机会变异。通过提供一个估计区间而不是一个估计量,我们给自己一些回旋的余地。 + +在前面的例子中,我们看到我们的估计过程在 95% 的时间内产生了一个良好的区间,一个“良好”的区间就是包含这个参数的区间。对于这个过程的结果很好,我们说我们有 95% 的置信度(信心)。我们的估计区间称为参数的 95% 置信区间,95% 称为区间的置信度。 + +前一个例子中的情况有点不寻常。因为我们碰巧知道参数的值,所以我们能够检查一个区间是好还是不好,这反过来又帮助我们看到,我们的估计过程每 100 次中有 95 次捕获了参数。 + +但通常情况下,数据科学家不知道参数的值。这就是他们首先想要估计的原因。在这种情况下,他们通过使用一些方法,类似我们开发的方法,获得未知参数的估计区间。由于统计理论,和我们所看到的演示,数据科学家可以确信,他们产生区间的过程,会以已知百分比的几率,产生一个良好的区间。 + +### 总体中位数的置信区间:自举百分位数方法 + +现在我们使用自举法来估计未知总体的中位数。 数据来自大型医院系统中的新生儿样本; 我们将把它看作是一个简单的随机样本,虽然抽样分多个阶段完成。 Deborah Nolan 和 Terry Speed 的 Stat Labs 拥有一个大数据集的详细信息,这个样本是从中抽取的。 + +`baby`表中包含以下母婴偶对的数量:婴儿的出生体重(盎司),孕期天数,母亲的年龄,母亲身高(英寸),孕期体重(磅),母亲是否在孕期吸烟。 + +```py +baby = Table.read_table('baby.csv') +baby +``` + + +| Birth Weight | Gestational Days | Maternal Age | Maternal Height | Maternal Pregnancy Weight | Maternal Smoker | +| --- | --- | +| 120 | 284 | 27 | 62 | 100 | False | +| 113 | 282 | 33 | 64 | 135 | False | +| 128 | 279 | 28 | 64 | 115 | True | +| 108 | 282 | 23 | 67 | 125 | True | +| 136 | 286 | 25 | 62 | 93 | False | +| 138 | 244 | 33 | 62 | 178 | False | +| 132 | 245 | 23 | 65 | 140 | False | +| 120 | 289 | 25 | 62 | 125 | False | +| 143 | 299 | 30 | 66 | 136 | True | +| 140 | 351 | 27 | 68 | 120 | False | + +(省略了 1164 行) + +出生体重是新生儿健康的一个重要因素 - 较小的婴儿比较大的婴儿在初期需要更多的医疗护理。 因此,在婴儿出生前估计出生体重是有帮助的。 一种方法是检查出生体重和怀孕天数之间的关系。 + +这种关系的一个简单的衡量标准是出生体重与怀孕天数的比值。`ratios`表包含`baby`的前两列,以及一列`ratios`。 这一列的第一个条目按以下方式计算: + +![](http://latex.codecogs.com/gif.latex?%5Cfrac%7B120%7E%5Cmbox%7Bounces%7D%7D%7B284%7E%5Cmbox%7Bdays%7D%7D%20%7E%5Capprox%20%7E%200.4225%7E%20%5Cmbox%7Bounces%20per%20day%7D) + +```py +ratios = baby.select('Birth Weight', 'Gestational Days').with_column( + 'Ratio BW/GD', baby.column('Birth Weight')/baby.column('Gestational Days') +) +ratios +``` + + +| Birth Weight | Gestational Days | Ratio BW/GD | +| --- | --- | +| 120 | 284 | 0.422535 | +| 113 | 282 | 0.400709 | +| 128 | 279 | 0.458781 | +| 108 | 282 | 0.382979 | +| 136 | 286 | 0.475524 | +| 138 | 244 | 0.565574 | +| 132 | 245 | 0.538776 | +| 120 | 289 | 0.415225 | +| 143 | 299 | 0.478261 | +| 140 | 351 | 0.39886 | + +(省略了 1164 行) + +```py +ratios.select('Ratio BW/GD').hist() +``` + +一眼望去,直方图看起来相当对称,密度在 4opd 到 4.5opd 的区间内是最大的。 但仔细一看,就可以看出一些比例相当大。 比率的最大值刚好超过 0.78opd,几乎是通常值的两倍。 + +```py +ratios.sort('Ratio BW/GD', descending=True).take(0) +``` + + +| Birth Weight | Gestational Days | Ratio BW/GD | +| --- | --- | +| 116 | 148 | 0.783784 | + +中位数提供了通常比例的感觉,因为它不受非常大或非常小的比例的影响。 样本(比例)的中位数约为 0.429opd。 + +```py +np.median(ratios.column(2)) +0.42907801418439717 +``` + +但是总体中位数是多少? 我们不知道,所以我们会估计它。 + +我们的方法将与前一节完全相同。 我们将自举样本 5000 次,结果是 5000 个中位数的估计量。 我们 95% 的置信区间将是我们所有估计量的“中间 95%”。 + +回忆前一节定义的`bootstrap_median`函数。 我们将调用这个函数,并构造总体(比例)中位数的 95% 置信区间。请记住,`ratios`表包含来自我们的原始样本的相关数据。 + +```py +def bootstrap_median(original_sample, label, replications): + + """Returns an array of bootstrapped sample medians: + original_sample: table containing the original sample + label: label of column containing the variable + replications: number of bootstrap samples + """ + + just_one_column = original_sample.select(label) + medians = make_array() + for i in np.arange(replications): + bootstrap_sample = just_one_column.sample() + resampled_median = percentile(50, bootstrap_sample.column(0)) + medians = np.append(medians, resampled_median) + + return medians +# Generate the medians from 5000 bootstrap samples +bstrap_medians = bootstrap_median(ratios, 'Ratio BW/GD', 5000) +# Get the endpoints of the 95% confidence interval +left = percentile(2.5, bstrap_medians) +right = percentile(97.5, bstrap_medians) + +make_array(left, right) +array([ 0.42545455, 0.43262411]) +``` + +95% 置信区间是 0.425opd 到 0.433opd。 我们估计的总体(出生重量与怀孕天数的比值)中位数,在 0.425opd 到 0.433opd 的范围内。 + +基于原始样本的估计量 0.429 恰好在区间两端的中间,尽管这通常不是真的。 + +为了使我们的结果可视化,让我们画出我们自举的中位数的经验直方图,并将置信区间置于横轴上。 + +```py +resampled_medians = Table().with_column( + 'Bootstrap Sample Median', bstrap_medians +) +resampled_medians.hist(bins=15) +plots.plot(make_array(left, right), make_array(0, 0), color='yellow', lw=8); +``` + +这个直方图和区间就像我们在前一节中绘制的直方图和区间,只有一个很大的区别 - 没有显示参数的红点。 我们不知道这个点应该在哪里,或者它是否在区间中。 + +我们只是有一个估计区间。 这是估计量的 95% 置信区间,因为生成它的过程在 95% 的时间中产生了良好的区间。 那肯定是在随机猜测! + +请记住,这个区间是一个大约 95% 的置信区间。 计算中涉及到很多近似值。 近似值并不差,但并不准确。 + +### 总体均值的置信区间:自举百分位数方法 -- GitLab