From a51c29c1ca7fb4a10f619affab31f57ad76f1ab0 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Thu, 18 Jan 2018 20:10:07 +0800 Subject: [PATCH] ch14pic --- 14.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/14.md b/14.md index ddebe8a..6f1add1 100644 --- a/14.md +++ b/14.md @@ -46,6 +46,8 @@ draw_and_compare(4, -5, 10) ``` +![](img/14-1.png) + 实际上,我们当然不会看到真实直线。 模拟结果表明,如果回归模型看起来合理,并且如果我们拥有大型样本,那么回归线就是真实直线的一个良好近似。 ## 真实斜率的推断 @@ -80,6 +82,8 @@ slope(baby, 'Gestational Days', 'Birth Weight') 这里是来自样本的原始散点图,以及自举重采样过程的四个复制品。 请注意,重采样散点图通常比原始图稀疏一点。 这是因为一些原始的点没有在样本中被选中。 +![](img/14-3.png) + ### 估计真实斜率 我们可以多次自举散点图,并绘制穿过每个自举图的回归线。 每条线都有一个斜率。 我们可以简单收集所有的斜率并绘制经验直方图。 回想一下,在默认情况下,`sample`方法带放回地随机抽取,次数与表中的行数相同。 也就是说,`sample`默认生成一个自举样本。 @@ -93,6 +97,8 @@ for i in np.arange(5000): Table().with_column('Bootstrap Slopes', slopes).hist(bins=20) ``` +![](img/14-4.png) + 然后,我们可以使用`percentile `方法,为真实直线的斜率构建约 95% 置信区间。 置信区间从 5000 个自举斜率的第 2.5 百分位数,延伸到第 97.5 百分位数。 ```py @@ -142,6 +148,8 @@ Approximate 95%-confidence interval for the true slope: 0.378663152966 0.555005146304 ``` +![](img/14-5.png) + 现在我们有一个函数,可以自动完成估计在回归模型中展示斜率的过程,我们也可以在其他变量上使用它。 例如,我们来看看出生体重与母亲身高的关系。 更高的女性往往有更重的婴儿吗? @@ -152,6 +160,8 @@ Approximate 95%-confidence interval for the true slope: scatter_fit(baby, 'Maternal Height', 'Birth Weight') ``` +![](img/14-6.png) + ```py correlation(baby, 'Maternal Height', 'Birth Weight') 0.20370417718968034 @@ -166,6 +176,8 @@ Approximate 95%-confidence interval for the true slope: 1.0403083964 1.91576886223 ``` +![](img/14-7.png) + 真实斜率的 95% 置信区间,从约 1 延伸到约 1.9 盎司每英寸。 ### 真实斜率可能为 0 嘛? @@ -182,6 +194,8 @@ Approximate 95%-confidence interval for the true slope: draw_and_compare(0, 10, 25) ``` +![](img/14-8.png) + 运行模拟几次,每次保持真实直线的斜率为 0 。你会注意到,虽然真实直线的斜率为 0,但回归线的斜率通常不为 0。回归线有时会向上倾斜,有时会向下倾斜,每次都给我们错误的印象,即这两个变量是相关的。 为了确定我们所看到的斜率是否真实,我们想测试以下假设: @@ -209,6 +223,8 @@ slope(baby, 'Maternal Age', 'Birth Weight') scatter_fit(baby, 'Maternal Age', 'Birth Weight') ``` +![](img/14-9.png) + 我们可以使用`bootstrap_slope`来估计真实直线的斜率。 计算表明,真实斜率的约 95% 的自举置信区间左端为负,右端为正 - 换句话说,区间包含 0。 ```py @@ -218,6 +234,8 @@ Approximate 95%-confidence interval for the true slope: -0.104335243815 0.272791852339 ``` +![](img/14-10.png) + 因为区间包含 0,所以我们不能拒绝原假设,母亲年龄与新生儿出生体重之间的真实线性关系的斜率为 0。基于此分析,使用母亲年龄作为预测变量,基于回归模型预测出生体重是不明智的。 ## 预测区间 @@ -232,6 +250,7 @@ Approximate 95%-confidence interval for the true slope: 下图显示了预测位于回归线上的位置。红线是`x = 300`。 +![](img/14-11.png) 红线与回归线的相交点的高度是孕期天数 300 的拟合值。 @@ -258,6 +277,8 @@ fit_300 为此,我们必须生成新的样本。 我们可以像上一节那样,通过自举散点图来实现。 然后,我们为每个散点图的复制品拟合回归线,并根据每一行进行预测。 下图显示了 10 条这样的线,以及孕期天数 300 对应的出生体重预测。 +![](img/14-12.png) + ```py lines ``` @@ -330,6 +351,8 @@ Approximate 95%-confidence interval: 127.300774171 131.361729528 ``` +![](img/14-13.png) + 上图显示了基于 5000 次重复的自举过程,孕期天数 300 的预测出生体重的自举经验直方图。经验分布大致是正泰的。 我们已经通过预测的“中间 95%”,即预测的第 2.5 百分位数到第 97.5 百分位数的区间,构建了分数的约 95% 的预测区间。 区间范围从大约 127 到大约 131。基于原始样本的预测是大约 129,接近区间的中心。 @@ -345,6 +368,8 @@ Approximate 95%-confidence interval: 121.177089926 123.291373304 ``` +![](img/14-14.png) + 请注意,这个区间比孕妇天数 300 的预测区间更窄。 让我们来调查其原因。 孕妇天数均值约为 279 天: @@ -358,6 +383,8 @@ np.mean(baby.column('Gestational Days')) 你可以在下面的图中看到这一点,它显示了 10 个自举复制品中每一个的`x = 285`和`x = 300`的预测值。 通常情况下,直线在`x = 300`处比`x = 285`处相距更远,因此`x = 300`的预测更加可变。 +![](img/14-15.png) + ### 注意事项 我们在本章中进行的所有预测和测试,都假设回归模型是成立的。 具体来说,这些方法假设,散点图中的点由直线上的点产生,然后通过添加随机正态噪声将它们推离直线。 -- GitLab