我正在执行多重回归分析,我不确定是否应该删除数据中的异常值。我关心的数据在 SPSS 箱线图中显示为“圆圈”,但是没有星号(这让我认为它们并没有“那么糟糕”)。我担心的案例确实出现在输出的“案例诊断”表下 - 因此我应该删除这些案例吗?
执行多元回归时是否删除统计软件标记为异常值的案例?
标记异常值不是一个判断调用(或者在任何情况下都不需要是一个判断调用)。给定一个统计模型,异常值有一个精确、客观的定义:它们是不遵循大多数数据模式的观察结果。这样的观察需要在任何分析开始时分开,因为它们与大量数据的距离确保它们将对任何由最大似然拟合的多变量模型(或实际上任何其他凸损失函数)施加不成比例的拉力。
重要的是要指出,使用最小二乘拟合(或任何其他由 ML 估计的模型,或任何其他凸损失函数)的残差无法可靠地检测到多变量异常值。简而言之,多变量异常值只能使用它们的残差来可靠地检测到,该模型使用一种不易受它们影响的估计程序拟合的模型。
异常值必须在经典拟合的残差中脱颖而出的信念与其他难以揭穿的统计禁忌相比,例如将 p 值解释为证据的衡量标准或从有偏见的样本中对总体进行推断。除了这个可能更老:高斯本人建议使用稳健的估计量,如中值和 mad(而不是经典的均值和标准差)来估计来自噪声观察的正态分布的参数(甚至去就推导 mad(1) 的一致性因子而言。
为了给出一个基于真实数据的简单可视化示例,请考虑臭名昭著的CYG 星数据。这里的红线描绘了最小二乘拟合,蓝线是使用稳健的线性回归拟合获得的拟合。这里的稳健拟合即 FastLTS (2) 拟合,是 LS 拟合的替代方案,可用于检测异常值(因为它使用的估计过程确保任何观察对估计系数的影响是有界的)。重现它的 R 代码是:
library(robustbase)
data(starsCYG)
plot(starsCYG)
lm.stars <- lm(log.light ~ log.Te, data = starsCYG)
abline(lm.stars$coef,col="red",lwd=2)
lts.stars <- ltsReg(log.light ~ log.Te, data = starsCYG)
abline(lts.stars$coef,col="blue",lwd=2)
有趣的是,左侧的 4 个离群观测值甚至没有关于 LS 拟合的最大残差和 LS 拟合残差的 QQ 图(或从它们派生的任何诊断工具,例如库克距离或dfbeta) 未能将其中任何一个显示为有问题的。这实际上是常态:不超过两个异常值(无论样本大小)以这样的方式拉出 LS 估计,使异常值不会在残差图中突出。这被称为掩蔽效应并且有据可查。也许 CYGstars 数据集唯一值得注意的是它是双变量的(因此我们可以使用目视检查来确认稳健拟合的结果)并且实际上可以很好地解释为什么左侧的这四个观察结果如此异常。
顺便说一句,这是一个例外而不是规则:除了涉及小样本和少量变量的小型试点研究以及进行统计分析的人也参与数据收集过程之外,我从未遇到过这样的案例,即先前的信念关于异常值的身份实际上是真实的。顺便说一句,这很容易验证。无论是否使用异常值检测算法或研究人员的直觉识别了异常值,异常值根据定义是对从 LS 拟合获得的系数具有异常杠杆作用(或“拉动”)的观察值。换句话说,离群值是从样本中移除的观察值应该严重影响 LS 拟合。
虽然我也从未亲身经历过这种情况,但文献中有一些有据可查的案例,其中异常值检测算法标记为异常值的观察结果后来被发现是严重错误或由不同的过程生成。无论如何,仅在可以以某种方式理解或解释异常值时才删除它们既不科学,也不明智。如果一小部分观察结果与数据主体相去甚远,以至于它可以单枪匹马地单独提取统计过程的结果,那么明智的(我可能会添加自然)将其分开处理,无论是否并非这些数据点碰巧也因其他原因而受到怀疑。
(1):参见 Stephen M. Stigler,《统计史:1900 年之前的不确定性测量》。
(2):计算大型数据集的 LTS 回归 (2006) PJ Rousseeuw, K. van Driessen。
(3): High-Breakdown Robust Multivariate Methods (2008)。Hubert M.、Rousseeuw PJ 和 Van Aelst S. 资料来源:Statist。科学。第 23 卷,第 92-119 卷。
总的来说,我对删除“异常值”持谨慎态度。回归分析可以在存在非正态分布误差、表现出异方差性的误差或预测变量/自变量的值与其他变量“相距甚远”的情况下正确应用。异常值的真正问题是它们不遵循所有其他数据点遵循的线性模型。你怎么知道是不是这样?你没有。
如果有的话,您不想寻找异常值的变量值;相反,您想查找异常值的残差值。看看这些数据点。他们的变量记录正确吗?他们是否有任何理由不遵循与您的其他数据相同的模型?
当然,这些观察结果可能显示为异常值的原因(根据残差诊断)可能是因为您的模型是错误的。我有一位教授喜欢说,如果我们扔掉异常值,我们仍然会相信行星围绕太阳旋转成完美的圆圈。开普勒本可以扔掉火星,而圆形轨道的故事看起来会很不错。火星提供了这个模型不正确的关键见解,如果他忽略那个星球,他就会错过这个结果。
您提到删除异常值不会太大改变您的结果。这可能是因为相对于您的样本,您只有极少数的观察值被删除,或者它们与您的模型相当一致。这可能表明,虽然变量本身可能看起来与其他变量不同,但它们的残差并不那么突出。我会把它们留在里面,而不是试图证明我决定向我的批评者删除一些观点是正确的。
+1 给@Charlie 和@PeterFlom;你在那里得到了很好的信息。也许我可以通过挑战问题的前提在这里做出一点贡献。箱线图通常(软件可能会有所不同,我不确定 SPSS 在做什么)将超过(下)第三(第一)四分位数的四分位间距的 1.5 倍以上的点标记为“异常值”。然而,我们可以问,当我们知道所有点都来自同一个分布这一事实时,我们应该期望多久找到至少一个这样的点?一个简单的模拟可以帮助我们回答这个问题:
set.seed(999) # this makes the sim reproducable
outVector = vector(length=10000) # to store the results
N = 100 # amount of data per sample
for(i in 1:10000){ # repeating 10k times
X = rnorm(N) # draw normal sample
bp = boxplot(X, plot=FALSE) # make boxplot
outVector[i] = ifelse(length(bp$out)!=0, 1, 0) # if there are 'outliers', 1, else 0
}
mean(outVector) # the % of cases w/ >0 'outliers'
[1] 0.5209
这表明,即使没有任何问题,这些点也可以预期在样本大小为 100 的情况下经常出现(>50% 的时间)。正如最后一句话所暗示的,通过箱线图策略找到虚假“异常值”的概率将取决于样本量:
N probability
10 [1] 0.2030
50 [1] 0.3639
100 [1] 0.5209
500 [1] 0.9526
1000 [1] 0.9974
还有其他自动识别异常值的策略,但任何此类方法有时会将有效点误识别为“异常值”,有时会将真正的异常值误识别为“有效点”。(您可以将这些视为I 型和 II 型错误。)我对这个问题的思考(对于它的价值)是关注包含/排除问题点的影响。如果您的目标是预测,您可以使用交叉验证来确定是否/多少包括有问题的点会增加预测的均方根误差。如果您的目标是解释,您可以查看dfBeta(即,根据是否包含相关点,查看模型的 beta 估计值有多少变化)。另一种观点(可以说是最好的)是避免必须选择是否应该丢弃异常点,而只使用稳健分析。
您应该首先查看残差图:它们是否遵循(大致)正态分布?它们是否显示出异方差的迹象?也看看其他的图(我不使用 SPSS,所以不能准确地说明如何在该程序中执行此操作,也不能说明您正在查看哪些箱线图;但是,很难想象星号的意思是“没那么糟糕”,它们可能意味着根据某些标准,这些是非常不寻常的点)。
然后,如果您有异常值,请查看它们并尝试找出原因。
然后,您可以尝试使用和不使用异常值的回归。如果结果相似,生活是美好的。用脚注报告完整的结果。如果不相似,那么您应该解释两个回归。