在R中识别数据集中的异常值

6

所以,我有一个数据集并知道如何使用summary命令获取五数概括。现在我需要获取Q3 + 1.5IQR以上或Q1 - 1.5IQR以下的实例,由于这些只是数字-如何从数据集中返回位于该数字上方或下方的实例?


这是单变量数据吗?你能提供样本数据吗? - akash87
@akash87 对不起,我不确定什么是单变量数据。 - Diante
2
单变量数据是指单个向量的数据,而不是矩阵或数据框架。 - akash87
4个回答

22

您可以使用boxplot来获取这个。如果您的变量是x,

OutVals = boxplot(x)$out
which(x %in% OutVals)

如果您对剧情感到烦恼,您可以使用

OutVals = boxplot(x, plot=FALSE)$out

3
你可以参考这个答案中的remove_outliers函数(链接在此)。它恰好符合你的需要。
remove_outliers <- function(x, na.rm = TRUE, ...) {
    qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
    H <- 1.5 * IQR(x, na.rm = na.rm)
    y <- x
    y[x < (qnt[1] - H)] <- NA
    y[x > (qnt[2] + H)] <- NA
    y
}

3
如果你的数据集是x,你可以使用以下方法获取这些数字。
summary(x)[["1st Qu."]]

并且。
summary(x)[["3rd Qu."]]

然后,您可以将其与这些数字进行比较,以获取所需的数字。

0
如果您正在尝试使用1.5 * IQR标准来识别数据集中的异常值,那么有一个简单的函数可以根据您的分组变量为每个异常情况提供行号(在Q1以下和Q3以上)。它还将创建一个箱线图,以便更好地了解数据的分布情况。
library(car)

Boxplot(DV ~ IV, data = datafile)

在哪里:

DV = measured variable
IV = grouping variable

请分享您的代码和数据集。审稿人对清晰的问题尤其是带有代码的问题感兴趣。 - Hamed Baziyad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接