【问题标题】:Outlier cutoff in RR中的异常值截止
【发布时间】:2021-07-13 14:21:58
【问题描述】:

我正在尝试切断数据框变量的异常值,但它没有按预期执行:

outlier_cutoff1 <- quantile(myd$nov, 0.75) + 1.5 * IQR(myd$nov)
index_outlier1 <- which(myd$nov > outlier_cutoff1)
mydnov <- myd[-index_outlier1, ]

此代码不会出错,但不会更改异常值。

【问题讨论】:

  • 仅仅因为离群值位于分布的尾部,所以它几乎从来都不是一种有效的方法。大多数数据的本质都是有尾巴的,删除它们会伪造结果。异常值通常只有在有已知原因导致测量错误发生时才需要删除,因此我们不应该相信它们的有效性

标签: r dataframe outliers


【解决方案1】:

这里不需要which

查看您的代码,我认为您可以使用以下内容删除“异常值”:

outlier_cutoff1 <- quantile(myd$nov, 0.75) + 1.5 * IQR(myd$nov)
index_outlier1 <- (myd$nov > outlier_cutoff1)
mydnov <- myd[-index_outlier1, ]

这是一个可重复的示例,可验证工作(使用向量)。

set.seed(123)
nov <- rnorm(500)

outlier_cutoff1 <- quantile(nov, 0.75) + 1.5 * IQR(nov)
  #This is 2.574977 
index_outlier1 <- nov > outlier_cutoff1
  #This returns a logical vector inticating when each value is greater than 2.574977 

mydnov <- nov[-index_outlier1]

length(nov)  #500

length(mydnov)  #499, one was removed

【讨论】:

    【解决方案2】:

    我认为这就是您要寻找的。让我知道它对你有用。如果没有可重现的示例,我无法完全测试。

    myd_wo_outliers <- subset(myd, myd$nov > (Q[1] - 1.5*iqr) & myd$nov < (Q[2]+1.5*iqr))
    

    查看此page 了解更多详情。

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2012-10-03
      • 2012-05-21
      • 1970-01-01
      相关资源
      最近更新 更多