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)

}


tt<-c(8.3,5.5,14,7.5,4.7,9,6.5,10.2,7.7,6.2)

grubbs(tt)

运行结果:


异常值14

R Grubbs检验 和Dixon检验 找出异常值_第1张图片


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语言数据分析项目精解、理论、方法、实战》

你可能感兴趣的:(R语言)