我已经使用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个元素的列表进行尝试,或者使用很小而不是非常大的异常值进行尝试,但仍然遇到相同的问题。
答案 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