在 R 中,我使用了 outline=FALSE 参数在为特定集合绘制框和胡须时排除异常值。它的工作非常出色,但让我想知道它究竟是如何确定哪些元素是异常值。
boxplot(x, horizontal = TRUE, axes = FALSE, outline = FALSE)
盒须图术语中的“异常值”是数据集中任何点与中位数的距离超过指定距离,通常约为中位数与 0.25(下限)或 0.75(下限)之间差异的 2.5 倍(上)分位数。要到达那里,请参阅?boxplot.stats
:首先,查看out
输出中的定义
out
if(do.out)
: 超出胡须 ( )极值的任何数据点的值。
这些是“异常值”。
二、看胡须的定义,根据coef
参数,默认为1.5:
胡须延伸到最极端的数据点,该数据点不超过
coef
盒子距离盒子长度的倍数。
最后,看看“铰链”的定义,它们是盒子的两端:
两个“铰链”是第一个和第三个四分位数的版本,即接近 quantile(x, c(1,3)/4)。
把这些放在一起,你会得到异常值(大约)定义为离中位数比中位数和相关四分位数之间距离的 2.5 倍更远的点。这些有些令人费解的定义的原因(我认为)部分是历史性的,部分是希望图表的组成部分反映数据中存在的实际值(而不是说,两个数据点之间的中点)尽可能。(您可能需要返回帮助页面中引用的原始文献以获得完整的理由和解释。)
需要注意的是,由该算法定义为“异常值”的点不一定是通常统计意义上的异常值(例如,基于数据的特定统计模型而出人意料地极端的点)。特别是,如果您有一个大数据集,您必然会看到很多“异常值”(这表明您可能希望切换到更需要数据的图形摘要,例如小提琴图或豆状图)。
对于boxplot
,异常值是高于或低于“晶须”的点。默认情况下,这些数据点扩展到不超过四分位距乘以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
参数(或coef
for的参数boxplot.stats
),则 -1 不再被视为异常值:
boxplot(v, range=2)
boxplot.stats(v, coef=2)$out
numeric(0)
诚然,这并不能立即从boxplot()
. 看range
参数:
这决定了绘图胡须从盒子伸出多远。如果“范围”是正数,则须线延伸到最极端的数据点,该数据点不超过“范围”乘以方框的四分位间距。零值会导致晶须延伸到数据极值。
因此,range
使用 的值,连同四分位数范围和框(由四分位数给出)来确定胡须的结束位置。胡须之外的一切都是异常值。
我将是第一个同意这个定义不直观的人。可悲的是,它现在已经成立。