为何library(car)在此处识别出有影响的观测值?求解答
influencePlot会识别出看似“没问题”的有影响观测值? 嘿,这个问题真的很容易让人困惑——明明画出来的散点图里所有点都完美贴合一元线性回归线,怎么car包的influencePlot()就揪出了4个“有影响”的观测值呢?咱们来一步步拆解背后的逻辑:
先搞懂influencePlot的判断规则
influencePlot()标记“有影响观测值”的依据是三个核心指标:帽子值(杠杆)、学生化残差和Cook距离,默认会标记满足以下任一条件的点:
- 帽子值 >
2*p/n(其中p是模型参数总数,包括截距;n是样本量) - 学生化残差的绝对值 > 2
- Cook距离 > 1
在你的案例里,模型是lm(y ~ x),所以p=2(截距+ x的系数),n=100,帽子值的阈值就是2*2/100=0.04。
你的数据里的“高杠杆点”
你的x是seq(1, 5, len=100),也就是均匀分布在1到5之间的100个点。在简单线性回归中,帽子值衡量的是观测值在自变量空间中的“杠杆作用”——离自变量均值越远的点,杠杆越高,帽子值越大。
对于x的取值来说,最靠近1和5的几个点(比如第1、2、99、100个观测),它们离x的均值(3)最远,所以帽子值会显著高于中间的点,甚至超过0.04的阈值。你可以手动验证这一点:
model <- lm(y ~ x) # 查看帽子值最高的前4个点 sort(hatvalues(model), decreasing = TRUE)[1:4]
你会发现这四个值都超过了0.04的阈值。
为什么散点图看起来没问题?
因为你的噪声设置得极小(rnorm(..., 0, 0.00005)),这些高杠杆点的残差几乎为0,完全贴合回归直线,所以散点图上看不到任何异常。但influencePlot()会把高杠杆点也标记为“有影响”——因为这些点在自变量空间的极端位置,哪怕现在残差很小,如果它们的y值发生一点变化,对回归系数的影响会比中间的点大得多。
总结
influencePlot()标记的“有影响观测值”,不仅仅是离群点,还包括高杠杆点。你的数据里没有离群点,但两端的x值属于极端位置,杠杆作用大,所以被识别为有影响的观测值——这是工具的正常逻辑,不是数据或代码的问题。
内容的提问来源于stack exchange,提问作者UweM.

