0

我想使用分位数和 1.5*IQR 确定数据框中的异常值。我使用了箱线图函数,并将得到的异常值与使用分位数和 iqr 计算的异常值进行了比较。

我注意到这两种方法之间的区别。箱线图方法检测到的异常值少于 Q1-1.5*IQR、Q3+1.5*IQR 计算。我尝试将rangein boxplot 设置为 1.5,但它仍然检测到较少的异常值。range 是要设置的正确 boxplot 选项还是我需要设置的另一个选项?

任何帮助是极大的赞赏。

x <- c(-8.4849, -8.4848, -8.8485, -8.4848, -8.4848, -8.4848, -8.7879, -8.4848,
       -8.4849, -8.6061, -8.3838, -8.2424, -8.4849, -8.3636, -8.2424, -8.7273)
qnt = quantile(x, probs=c(.25, .75))
iqt = 1.5 * IQR(x)
x[x < (qnt[1] - iqt)]
[1] -8.8485 -8.7879 -8.6061 -8.7273
x[x > (qnt[2] + iqt)]
[1] -8.2424 -8.3636 -8.2424

boxplot(x, range = 1.5)$out
[1] -8.8485 -8.7879 -8.2424 -8.2424 -8.7273
4

1 回答 1

2

R 中的 quantile() 和 IQR() 函数都有一个“类型”参数。有 9(!) 种分位数。他们中的大多数为这个原本不连续的函数添加了一些平滑的行为。您可以在 quantile() 文档中阅读类型的完整定义。

boxplot() 中使用的分位数的确切定义可以在 boxplot.stats() 文档中找到,它接近类型 2 分位数。

所以,答案是没有选项可以让 boxplot() 表现得像 quantile(),但是有一个选项可以让 quantile() 表现得(几乎)像 boxplot()

于 2016-08-03T18:32:46.147 回答