Boxplot.stats R无法识别异常值

时间:2019-03-05 15:16:14

标签: r boxplot outliers

我已经使用boxplot.stats $ out来获取R中列表的异常值。但是,我注意到很多次它都无法识别异常值。例如:

list = c(3,4,7,500)
boxplot.stats(list)

$`stats`
[1]   3.0   3.5   5.5 253.5 500.0

$n
[1] 4

$conf
[1] -192  203

$out
numeric(0)

quantile(list)

    0%    25%    50%    75%   100% 
  3.00   3.75   5.50 130.25 500.00 

130.25+1.5*IQR(list) = 320

您可以看到boxplot.stats()函数未能找到异常值500,即使当我查看文档时,它们使用的是Q1 / Q3 +/- 1.5 * IQR方法。因此,应该将500确定为一个异常值,但显然找不到它,而且我不确定为什么吗?

我尝试使用5个元素而不是4个元素的列表进行尝试,或者使用很小而不是非常大的异常值进行尝试,但仍然遇到相同的问题。

2 个答案:

答案 0 :(得分:1)

如果您仔细阅读了帮助页面help("boxplot.stats"),则返回值部​​分将说明以下内容。我的重点。

  

统计信息
     一个长度为5的向量,其中包含下端的极值
     晶须,较低的“铰链”,中位数,较高的“铰链”和
     上胡须的末端

然后,在同一部分中,我再次强调。

  


      超出范围的任何数据点的值       胡须的终极(如果(不要这样做)。

您的数据有4分。在列表成员$stats中返回的上晶须的极值500.0,这是您数据的最大值。没有错误。

答案 1 :(得分:1)

请注意,“统计信息”部分的第三个数字是253.5,而不是130.25 boxplot.stats的文档说:

  

两个“铰链”是第一个和第三个四分位数的版本,即   接近分位数(x,c(1,3)/ 4)。铰链等于四分位数等于奇数   n(其中n <-length(x))并且偶数n也不同。而四分位数   对于n %% 4 == 1(n = 1 mod 4)仅相等的观察,铰链   所以另外对于n %% 4 == 2(n = 2 mod 4),并且位于中间   另外两个观察结果

换句话说,对于您的数据,它使用(500+7)/2作为Q3值
(顺便说一句,(3+4)/2 = 3.5是Q1,而不是您从中获得的3.75 quantile)。 Boxplot将使用边界253.5 + 1.5*(253.5 - 3.5) = 628.5