在 R 中识别数据集中的异常值
Identifying the outliers in a data set in R
所以,我有一个数据集,并且知道如何使用 summary 命令获取五个数字的摘要。现在我需要获取高于 Q3 + 1.5IQR 或低于 Q1 - 1.5IQR 的实例,因为这些只是数字 - 我如何 return 来自数据集的实例位于数字之上或之下?
如果您的数据集是 x
,您可以使用
获得这些数字
summary(x)[["1st Qu."]]
和
summary(x)[["3rd Qu."]]
然后你与这些数字进行比较以获得你想要的数字。
您可以使用 boxplot
获取此信息。如果你的变量是x,
OutVals = boxplot(x)$out
which(x %in% OutVals)
如果你对剧情感到厌烦,可以使用
OutVals = boxplot(x, plot=FALSE)$out
可以参考这个回答here中的函数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
}
如果您尝试使用 1.5 * IQR 标准识别数据集中的离群值,有一个简单的函数可以根据您的分组变量(均在Q1及以上Q3)。它还会创建数据的箱线图,从而深入了解数据的分布。
library(car)
Boxplot(DV ~ IV, data = datafile)
其中:
DV = measured variable
IV = grouping variable
所以,我有一个数据集,并且知道如何使用 summary 命令获取五个数字的摘要。现在我需要获取高于 Q3 + 1.5IQR 或低于 Q1 - 1.5IQR 的实例,因为这些只是数字 - 我如何 return 来自数据集的实例位于数字之上或之下?
如果您的数据集是 x
,您可以使用
summary(x)[["1st Qu."]]
和
summary(x)[["3rd Qu."]]
然后你与这些数字进行比较以获得你想要的数字。
您可以使用 boxplot
获取此信息。如果你的变量是x,
OutVals = boxplot(x)$out
which(x %in% OutVals)
如果你对剧情感到厌烦,可以使用
OutVals = boxplot(x, plot=FALSE)$out
可以参考这个回答here中的函数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
}
如果您尝试使用 1.5 * IQR 标准识别数据集中的离群值,有一个简单的函数可以根据您的分组变量(均在Q1及以上Q3)。它还会创建数据的箱线图,从而深入了解数据的分布。
library(car)
Boxplot(DV ~ IV, data = datafile)
其中:
DV = measured variable
IV = grouping variable