簡體   English   中英

R 排除統計數據中的異常值

[英]R excluding outliers in statistical data

我有鳥類的數據,我正在比較多年來和彼此之間的翅膀長度和重量。 我注意到從振鈴站收到的一些數據包含不准確的輸入。 例如,對於某個物種,機翼長度在 40-60 毫米之間,但是在 578 毫米處有一個異常值,這一定是輸入錯誤的結果。 是否可以從數據集中排除這些極端異常值?

您有 2 個選項:

  1. 完全刪除異常值。
max_believable_value=100
mydata = mydata[ mydata>max_believable_value ]

這通常不是很令人滿意,首先因為它會“無形地”刪除它們,因此您不會注意到是否系統地發生了更嚴重的事情,其次因為它會改變數據的形式。 如果您有 100 個樣本,並且特定樣本的一個觀察值被認為是“異常值”,但其他的都可以,那么您可能不想完全刪除整個樣本。

  1. 將異常值標記為“NA”。
mydata[ mydata>max_believable_value ] = NA

這正是“NA”值的含義(“不可用”值),大多數 R 函數包含允許您指定如何處理 NA 值(包括刪除它們)的選項。
這種方法清楚地表明您有多少“異常值”(或其他可疑值),並且即使一個或多個觀察結果看起來無效,您也可以將樣本保留在數據中。

您可以使用類似的東西從 dataframe 中刪除這些值

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM