我有一个包含噪点的数据集。如何使用R?
删除低1%和高1%的数据点1,200,211,259,177,188,1000,2,188,203,200,198
1,2和100是异常值
答案 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