在统计建模中,理解每一条数据是如何影响整体全貌的至关重要。库克距离就是这样一种方法,用于衡量回归分析中的每一个点对最终结果的影响力。它以统计学家 R. Dennis Cook 的名字命名,帮助我们精确定位哪些数据点对分析结果产生了重大影响。通过向我们展示哪些点最为重要,库克距离能帮助我们针对数据和模型做出更明智的决策。
对于具有 p 个预测变量的回归模型,其第 i 次观测的库克距离 (( D_i )) 可以使用以下公式计算——
[ Di = \frac{\sum{j=1}^n (\hat{Y}{j(i)} – \hat{Y}j)^2}{p \times \text{MSE}} \times \left( \frac{h{ii}}{(1 – h{ii})^2} \right) ]
其中,
- ( \hat{Y}_{j(i)}) 是从模型中排除第 i 个观测值后,第 j 个观测值的预测值。
- ( \hat{Y}_j) 是基于完整模型(包含所有数据)的第 j 个观测值的预测值。
- ( h_{ii}) 是第 i 个观测值的杠杆值。
- MSE 是模型的均方误差。
现在,让我们在 R 编程语言中实现库克距离公式。
步骤 1:拟合线性回归模型
lm() 函数用于拟合线性回归模型,其中 mpg 是因变量,wt、hp 和 disp 是自变量。
R
CODEBLOCK_a53d9f25
步骤 2:计算库克距离
cooks.distance() 函数根据拟合的模型计算每个观测值的库克距离。变量 cooksd 将包含 mtcars 数据集中每个观测值的库克距离值。
R
CODEBLOCK_d0e2edac
输出:
Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive
1.152035e-02 4.621112e-03 1.598334e-02 1.283888e-04
Hornet Sportabout Valiant Duster 360 Merc 240D
1.839055e-03 1.560119e-02 1.053270e-02 1.313511e-02
Merc 230 Merc 280 Merc 280C Merc 450SE
2.525382e-03 3.671067e-03 2.606104e-02 1.551454e-03
Merc 450SL Merc 450SLC Cadillac Fleetwood Lincoln Continental
1.049983e-04 5.648180e-03 7.218880e-05 1.298764e-02
Chrysler Imperial Fiat 128 Honda Civic Toyota Corolla
3.199707e-01 1.196019e-01 9.092102e-03 1.529771e-01
Toyota Corona Dodge Challenger AMC Javelin Camaro Z28
2.215865e-02 4.218196e-02 4.909944e-02 7.181085e-03
Pontiac Firebird Fiat X1-9 Porsche 914-2 Lotus Europa
6.980693e-02 4.163138e-04 1.732523e-06 5.959750e-02
Ford Pantera L Ferrari Dino Maserati Bora Volvo 142E
7.279943e-03 1.100867e-02 3.402911e-01 8.796726e-03
这里的输出代表了 mtcars 数据集中每个观测值的库克距离值。
- 库克距离值较大的观测值对回归模型的影响更大。
- 库克距离值明显大于其他值的观测值可能被视为有影响力的异常值,应进一步调查。
- 我们可以分析这些值,以识别任何可能影响回归分析可靠性的有影响力的观测值。
步骤 3:可视化库克距离
现在,让我们在 R 中使用 mtcars 数据集可视化线性回归模型的库克距离,您可以创建一个突出显示影响力点的图表。以下是实现方法的一个示例:
R
CODEBLOCK_82416f52
输出:
!ghCook‘s Distance Formula
ggplot 用于创建库克距离的柱状图。
- 在 4?−?n−p4 处添加了一条红色的水平虚线作为阈值,用于识别潜在的有影响力的观测值,其中 ?n 是观测值的数量(原文此处截断,意指阈值为 4/(n-p))。