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
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語言資料分析專案精解、理論、方法、實戰》