首页 > 解决方案 > 消除异常值问题

问题描述

我尝试运行此代码以删除异常值,但仍然存在两个异常值。

newData <- read.csv(file = 'https://data.edmonton.ca/resource/f7ms-98xd.csv', header = T)
boxplot(newData$bachelor_s_degree)$out
no_outliers <- boxplot(newData$bachelor_s_degree)$out
print(no_outliers)
newData[which(newData$bachelor_s_degree %in% no_outliers),]
newData <- newData[-which(newData$bachelor_s_degree %in% no_outliers),]
boxplot(newData$bachelor_s_degree)

图为运行代码后仍然存在的两个变量。

在此处输入图像描述

我试图删除示例中的所有异常值,但由于某种原因,这两个变量仍然存在。是否有一种代码可以删除所有变量?

标签: routliers

解决方案


在删除异常值之前,您有:

IQR(newData$bachelor_s_degree)
[1] 265.25
median(newData$bachelor_s_degree)
[1] 127.5

所以异常值是那些大于

median(newData$bachelor_s_degree) + 1.5 * IQR(newData$bachelor_s_degree)
[1] 525.375

移除异常值后,中位数和 IQR 都会发生变化,因此:

median(newData$bachelor_s_degree)
[1] 121.5
IQR(newData$bachelor_s_degree)
[1] 249
median(newData$bachelor_s_degree) + 1.5 * IQR(newData$bachelor_s_degree)
[1] 495

您的数据集有几个点超出了的异常值范围,即它们小于 525.375(因此第一次没有被删除)但大于 495(因此它们现在算作异常值)。


推荐阅读