outline=FALSE使用什么方法来确定离群值?

4
在R中,当我绘制特定数据集的箱线图时,我使用了outline = FALSE参数来排除异常值。这个方法非常有效,但是让我想知道它是如何确定哪些元素是异常值的。
boxplot(x, horizontal = TRUE, axes = FALSE, outline = FALSE)

1
你可以在这里阅读生成计算异常值的函数:'grDevices::boxplot.stats'但我还无法完全理解它在做什么! - Tom Evans
相关链接:https://dev59.com/1W445IYBdhLWcg3wR4NN#4947033 - csgillespie
3个回答

8
在箱线图的术语中,“异常值”是指数据集中距离中位数超过特定距离的任何点,通常是中位数与0.25(下限)或0.75(上限)分位数之间差异的2.5倍左右。要了解更多信息,请参见“?boxplot.stats”:首先,查看输出中“out”的定义:
“out”:超出须端点(如果(do.out))的任何数据点的值。
这些就是“异常值”。其次,查看基于coef参数的须的定义,默认情况下为1.5:
须延伸到离盒子不超过coef倍盒子长度的最极端数据点。
最后,查看“hinges”的定义,它们是盒子的两个端点:
两个“hinges”是第一和第三四分位数的版本,即接近quantile(x,c(1,3)/4)。
将它们结合起来,您会发现异常值被定义为(大约)比相应四分位数中位数距离的2.5倍远的点。这些有些复杂的定义的原因在于(我认为)部分是历史原因,部分是希望绘图组件尽可能反映存在于数据中的实际值(而不是例如两个数据点之间的中点)。 (您可能需要回到帮助页面引用的原始文献中,以获取完整的证明和解释。)
需要注意的是,通过此算法定义为“异常值”的点未必在通常的统计意义上是异常值(例如,基于特定数据模型的统计意义上极端的点)。特别是,如果您有一个大数据集,您将必然看到很多“异常值”(这表明您可能需要切换到更耗费数据的图形摘要,例如小提琴图或beanplot)。

2
对于boxplot,离群值是指在"须"(whiskers)之上或之下的点。默认情况下,须的长度为数据点与箱子之间四分位数距离(interquartile range)乘以range参数。默认的range值为1.5,但您可以更改它,从而也可以更改离群值列表。

您还可以使用boxplot.stats函数查看其计算过程,该函数执行图形所使用的计算。

例如,如果您有以下向量:

v <- c(runif(10), -0.5, -1)
boxplot(v)

输入图像描述

默认情况下,只有-1的值被视为异常值。您可以通过boxplot.stats来查看:

boxplot.stats(v)$out
[1] -1

但是如果您更改range参数(或boxplot.statscoef参数),那么-1将不再被视为异常值:

boxplot(v, range=2)

enter image description here

boxplot.stats(v, coef=2)$out
numeric(0)

1
这一点从boxplot()中并不明显。请看range参数:
这决定了箱线图的须延伸到哪里。如果“range”是正数,则须延伸到最极端的数据点,其距离箱线图的四分位距不超过“range”倍。值为零会导致须延伸到数据极端。
因此,range的值与四分位距和箱子(由四分位数给出)一起用于确定须的结束位置。而须之外的所有内容都是异常值。
我将首先同意这个定义不直观。可悲的是,它现在已经得到确认。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接