【发布时间】:2020-08-23 06:51:56
【问题描述】:
在 R 中创建一个函数后,该函数应该返回一个用 NA 代替某些数据的异常值向量,我得到的异常值保持在最大值附近:
kill_outliers <- function(data, na.rm=TRUE){
q <- quantile(data, probs=c(0.25, 0.75), na.rm=na.rm)
killed <- data
intq <- 1.5 * IQR(data, na.rm=na.rm)
killed[x < (q[1]-intq)] <- NA
killed[x > (q[2]+intq)] <- NA
killed
}
使用此函数后boxplot(killed)显示:
为什么会有异常值?我试过了:
killed[x > (q[2] + intq)] <- NA
假设这是小于或等于的问题,但它并没有改变任何东西。
(q[2] + intq) == 216.87,删除后排序数据集中的最后一个值是216.16,应该适合。
另外,我不明白为什么,当我使用第三分位数(q[3] + intq) 时,它根本没有排除任何异常值......
编辑
如机器所示,问题在于使用新 IQR 创建新数据集。因此我得出结论, boxplot() 为每个数据集创建了一个估计 IQR 的新图。附加问题:有没有办法将新数据集拟合到由箱线图创建的先前图,以便将值拟合到以前的分位数?
【问题讨论】:
-
不是一个直接的答案,但如果您更改数据只是为了绘制箱线图而不显示异常值,您可以通过简单地使用
boxplot(x,outline=F)更轻松地实现这一点