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