【问题标题】:outlier treatment in r for extreme outliersr中的异常值处理极端异常值
【发布时间】:2020-08-23 11:03:48
【问题描述】:

我正在做一个学校项目,我在我的一个专栏中找到了一些异常值。我相信这些异常值正在损害我的相关性测试。我已经使用以下代码来识别它们,

boxplot(df$col)
boxplot(df$col)$out
outliers <- boxplot(df$col)$out

鉴定后,我应该如何对待他们?您能否提供一些我可以插入的代码来自动处理它们。我知道有两个极端异常值。你们会建议只治疗那些并留下其余的吗?如果是这样,代码会是什么...它们超过 2000 并且是唯一超过 100 的两个数字。

【问题讨论】:

  • 如何处理异常值总是与上下文相关的(有时是个人的)。即使我将它们从绘图中移除(例如,为了保持轴刻度易于管理),我仍然标记它们已被取出(如果不是绘图极端处的空心点,则以书面形式)。
  • 我想用平均值替换它,因为我需要保持数据的完整性以进行回归/相关分析。我该怎么做呢?我发现了它们,我的心是要以平均的方式对待它们。

标签: r statistics outliers


【解决方案1】:
# Nullify outliers: out_free_df => data.frame 
out_free_df <- within(df, {
    col <- ifelse(col %in% boxplot.stats(col)$out, NA, x)
    }
  )

# Impute outliers with mean: imputed_df => data.frame
imputed_df <- within(out_free_df, {col <- ifelse(is.na(col), mean(col, na.rm = TRUE), col)}

【讨论】:

  • 如果您使用df$col(向量),则不需要sapply。直接到向量操作。 (如果您想保留sapply,则将ifelse 替换为传统的if/else 语句。)此外,由于您是within(df, ...),因此您不需要在其中的任何地方使用df$。另外,我建议您一次计算您的箱线图统计数据并重复使用它,无需重新计算nrow(df) 次。
猜你喜欢
  • 2015-03-11
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 2020-06-26
相关资源
最近更新 更多