【问题标题】:How should I deal with outliers in multiple variables in R?我应该如何处理 R 中多个变量中的异常值?
【发布时间】:2019-10-29 18:49:52
【问题描述】:

我是统计编程的新手,我目前正在处理信用违约数据集中 19 个变量的 110 000 次观察的数据集,并希望创建一些模型,如逻辑回归和 rf,其中因变量是没有一家公司违约与否。然而,虽然大多数变量看起来是正态分布的,但有 3 个变量的箱线图甚至没有方框,并且存在许多极高的异常值。我试图忽略包含这些异常值的观察结果,但最终只有 20 000 个观察结果,我非常怀疑这是正确的。 这就是为什么我想知道是否有处理此类异常值的好方法,以及如何在 R 中实现它?请参阅下面的一个箱线图来说明我的观点:

【问题讨论】:

  • 您是否尝试过记录相关变量的日志?
  • 数据集是什么?您是否期望这些变量是正常的?为什么要改造它们使它们正常化?如果您过滤的数据集仅以约 18% 的数据结束,这意味着您的几乎所有数据在某个维度上都是“异常值”——如果是这种情况,我会提醒您不要将这些视为“异常值”而是将它们视为“数据”
  • “如何处理异常值”(或“这些异常值吗?”,或者“如何处理偏斜数据?”)是一个统计问题,而不是编程问题——很大程度上取决于您的目标、您使用的模型类型以及有关数据的上下文知识——属于 Cross Validated (stats.stackexchange)。一旦你知道你想做什么,如果你在 R 中遇到困难,那就是 Stack Overflow 的编程问题。
  • 不要删除“异常值”。想想这些变量的分布,以及如何对这些分布进行建模。
  • 这是一个信用违约数据集,我作为因变量是违约的二元变量,极值是自变量权益、总资产和收入

标签: r data-cleaning outliers


【解决方案1】:

您可以计算四分位数间距 (IQR) 并将任何大于或小于 1.5 倍的数值转换为 NA。


q_col <- quantile(df$col, probs= c(.25, .75), na.rm = T)
iqr_df <- IQR(df$col, na.rm = T)

df$col_new <- df$col
df$col_new[(df$col < q_col - 1.5*(iqr_df)) | (df$col > q_col + 1.5*(iqr_df))] <- NA

如果一个简单的实现不起作用,则尝试执行对数转换,然后执行上述 IQR 步骤:

df$col <- log10(df$col)

(... repeat the steps above)

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2014-02-21
    • 2011-02-24
    相关资源
    最近更新 更多