如何使用R从数据集中删除下部和上部1%数据点异常值?

时间:2014-12-21 06:37:40

标签: r

我有一个包含噪点的数据集。如何使用R?

删除低1%和高1%的数据点

1,200,211,259,177,188,1000,2,188,203,200,198

1,2和100是异常值

1 个答案:

答案 0 :(得分:0)

方法1:Pauta准则或3σ准则

data<-c(1,200,211,259,177,188, 1000, 2,188,203,200,198)
while(1){ 
  s_data<-(data-mean(data))/sd(data) #standardized
  m<-mean(s_data)
  s<- sd(s_data)
  if (length(data)==length(data[(s_data<m+3*s)&(s_data>m-3*s)])){
    break; #if data do not change and loop will stop
  }else{
    data<-data[(s_data<m+3*s)&(s_data>m-3*s)]
  }
}
data

## [1]   1 200 211 259 177 188   2 188 203 200 198

如您所见,此方法无法拒绝异常值1和2。 所以,这里是方法2:使用grubbs方法

library(outliers)
grubbs.test(data,type=11)

这是方法3: 使用kmeans聚类方法(将数据分为三部分,第一部分是最低部分,第二部分是最高值,第三部分是正常值)

kmeans(data,3)
#Clustering vector:
# [1] 2 3 3 3 3 3 1 2 3 3 3 3