无论用论坛大佬之前给的代码,还是自己手搓的奇形怪状的轮子运行Tukey法剔除异常值,结果都是一样的:
exampe
大佬的代码:
Tukey_outlier2<-function(x){
# caculate Tukey quartiles:
b<-fivenum(x)
Tukey_Critical<-b[4]+1.5*(b[4]-b[2])
x[x > Tukey_Critical] <- NA
return(x)
}
手搓的代码:
# Tukey method outlier rmoval
Tukey_outlier<-function(x){
n<-length(x)
x<-sort(x, decreasing = TRUE)
i<-1
# caculate Tukey quartiles:
b<-fivenum(x)
Tukey_Critical<-b[4]+1.5*(b[4]-b[2])
for(i in 1:n){
if(x[i]>Tukey_Critical){
x[i]<-NA
i<-i+1
}
else {
break
}
}
return(x)
}
运行的结果都是剔除后最大值为18.8
> fivenum(d1)
[1] 0.0 1.8 4.6 8.6 86.8
> 8.6+1.5*(8.6-1.8)
[1] 18.8
但是两个R script跑的结果是18.3,即把计算得到的Tukey_Critical也剔除了:
> r1<-sort(r1)
> head(r1)
[1] 0 0 0 0 0 0
> tail(r1)
[1] 17.4 18.0 18.0 18.0 18.3 18.3
但是看两段代码,不应该剔除啊?