【问题标题】:Removing Outliers Issue [closed]消除异常值问题[关闭]
【发布时间】:2019-07-21 18:20:15
【问题描述】:

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

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)

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

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

【问题讨论】:

  • 我投票结束,因为我们没有您的数据来复制您的问题。但我会留下这个评论:删除所谓的“异常值”是一个迭代问题。删除其中一些后 - 突然,在查看数据时,其他一些点可能会变成“异常值”。我认为这就是你的情况。
  • @KarolisKoncevičius 正在从在线 CSV 中提取数据。如果您运行读取 csv 的行,它应该会为您提供数据。
  • @AK,我刚刚尝试了链接:data.edmonton.ca/resource/f7ms-%2098xd.csv,它给出了:“数据集丢失”错误。所以!此外,卡罗利斯关于异常值部分是正确的。但是,如果没有数据集,就很难提供帮助。
  • 所以我的印象是错误的——数据是可用的。但是破折号后有一个不必要的空间。但是,您的问题是,在删除原始“异常值”后,会出现新的“异常值”。如果您不想让他们再次运行异常值删除程序。我仍然投票结束,因为这个问题与编程无关。

标签: r outliers


【解决方案1】:

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

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(因此它们被视为异常值现在)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2022-01-13
    • 2019-05-07
    相关资源
    最近更新 更多