R Grubbs检验 和Dixon检验 找出异常值
1、Grubbs检验
#---------------代码范例
#Grubbs检验
代码实例:
######################################################################
#函数功能:Grubbs检验
#参数说明:x:要进行判断的数据
#####################################################################
library(outliers)
grubbs<-function(x){
x<-round(x,4)
grubbs_outliers<-c()
grubbs_p.value<-c()
grubbs_g.value<-c()
grubbs_g<-c()
grubbs_minormax<-c()
grubbs_pvalue<-c()
#设定初始值判断值
grubbs_p<-0
while(grubbs_p<0.05){
grubbs_outliers<-c(grubbs_outliers,grubbs_minormax)
grubbs_p.value<-c(grubbs_p.value,grubbs_pvalue)
grubbs_g<-c(grubbs_g,grubbs_g.value)
#去除最大、最小值然后再进行检验
if(sum(x==grubbs_minormax)!=0)x<-x[-which(x==grubbs_minormax)]
#若数据各值都相等则跳出
if(sd(x)==0) break
#进行grubbs检验
grubbs_test<-grubbs.test(x,type=10,opposite=F,two.sided=F)
grubbs_p<-grubbs_test$p.value
grubbs_pvalue<-grubbs_test$p.value
grubbs_g.value<-grubbs_test$statistic[1]
grubbs_a<-strsplit(grubbs_test$alternative," ",fixed=T)
grubbs_minormax<-as.numeric(unlist(grubbs_a)[3])
}
outliner_res<-data.frame(outliers=grubbs_outliers,gvalue=grubbs_g,pvalue=grubbs_p.value)
return(outliner_res)
}
grubbs(tt)
运行结果:
异常值14
2、Dixon检验
#Dixon检验
代码实例:
######################################################################
#函数功能:Dixon检验
#参数说明:x:要进行判断的数据
#####################################################################
library(outliers)
dixon<-function(x){
dixon_p.value<-c()
dixon_q.value<-c()
dixon_q<-c()
dixon_pvalue<-c()
dixon_outliers<-c()
dixon_minormax<-c()
dixon_p<-0
while(dixon_p<0.05){
dixon_outliers<-c(dixon_outliers,dixon_minormax)
dixon_p.value<-c(dixon_p.value,dixon_pvalue)
dixon_q<-c(dixon_q,dixon_q.value)
if(sum(x==dixon_minormax)!=0)x<-x[-which(x==dixon_minormax)]
if(sd(x)==0) break
dixon_test<-dixon.test(x,type=0,opposite=F,two.sided=F)
dixon_p<-dixon_test$p.value
dixon_pvalue<-dixon_test$p.value
dixon_q.value<-dixon_test$statistic[1]
dixon_a<-strsplit(dixon_test$alternative," ",fixed=T)
dixon_minormax<-as.numeric(unlist(dixon_a)[3])
}
outliner_res<-data.frame(outliers=dixon_outliers,qvalue=dixon_q,pvalue=dixon_p.value)
return(outliner_res)
}
tt<-c(8.3,5.5,14,7.5,4.7,9,6.5,10.2,7.7,6.2)
dixon(tt)
运行结果:
没有异常值
代码转自:《R语言数据分析项目精解、理论、方法、实战》