R排除统计数据中的异常值

R excluding outliers in statistical data

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

您可以使用类似

的方式从数据框中删除这些值
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

使用dplyr,您可以使用

过滤数据
library(dplyr)
df <- filter(df, wing_length < 500)

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

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

您有 2 个选择:

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

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

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

这正是 'NA' 值所要表示的('Not Available' 值),并且大多数 R 函数包含允许您指定如何处理 NA 值的选项(包括通过删除他们!)。
这种方法可以清楚地表明您拥有多少 'outliers'(或其他可疑值),并且即使一个或多个观察结果看起来无效,也允许您在数据中保留样本。