【问题标题】:R excluding outliers in statistical dataR 排除统计数据中的异常值
【发布时间】:2020-05-14 12:58:40
【问题描述】:

我有鸟类的数据,我在这些数据中比较了多年来和彼此之间的翅膀长度和重量。我注意到从振铃站收到的一些数据包含不准确的输入。例如,对于某个物种,机翼长度在 40-60 毫米之间,但是在 578 毫米处有一个异常值,这一定是输入错误的结果。是否可以从数据集中排除这些极端异常值?

【问题讨论】:

  • 请提供您的数据集或虚拟示例。你可以使用dput(your_data_frame)

标签: r outliers


【解决方案1】:

你有两个选择:

  1. 完全删除异常值。
max_believable_value=100
mydata = mydata[ mydata>max_believable_value ]

这通常不是很令人满意,首先因为它会“无形地”删除它们,因此您不会注意到是否系统地发生了更严重的事情,其次因为它会改变您的数据形式。如果您有 100 个样本,并且特定样本的一个观察值被认为是“异常值”,但其他的都可以,那么您可能不想完全删除整个样本。

  1. 将异常值标记为“NA”。
mydata[ mydata>max_believable_value ] = NA

这正是“NA”值的含义(“不可用”值),并且大多数 R 函数都包含允许您指定如何处理 NA 值(包括删除它们!)的选项。 这种方法清楚地表明您有多少“异常值”(或其他可疑值),并且即使一个或多个观察结果看起来无效,您也可以将样本保留在数据中。

【讨论】:

    【解决方案2】:

    您可以使用类似的方式从数据框中删除这些值

    df <- df[-which(df$wing_length > 500), ]
    

    一个例子:

    > df <- data.frame(a=1:10, b=11:20)
    > df
        a  b
    1   1 11
    2   2 12
      ...
    9   9 19
    10 10 20
    > df <- df[ - which(df$a>5), ]
    > df
      a  b
    1 1 11
    2 2 12
    3 3 13
    4 4 14
    5 5 15
    

    【讨论】:

    • 我认为负号应该在which语句之外。
    【解决方案3】:

    使用dplyr,您可以使用过滤数据

    library(dplyr)
    df <- filter(df, wing_length < 500)
    

    有时,真正的交易是选择使用什么数字作为排除异常值的限制。有些人使用 3 倍数据的标准差:

    library(dplyr)
    df <- filter(df, wing_length < (sd(df$wave_length)*3))
    

    【讨论】:

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