缺失值、异常值的识别
一、缺失值查找的传统方法
1. is.na() 函数。用在识别某一列中是否有缺失值的情况居多,若x是数据框类型,则is.na(x),则把每一个元素的情况按照TRUE/FALSE的逻辑形式列出。
> data(sleep,package="VIM")
>h<-head(sleep)
> is.na(h)
BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
1 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
3 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
4 FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE FALSE FALSE
5 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
6 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
2. complete.case(). 表示完整的无缺失值的行的个数。
> complete.cases(sleep)
[1] FALSE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[13] FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE
[25] TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE FALSE
[37] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
[49] TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE TRUE
[61] TRUE FALSE
> sum(complete.cases(sleep))
[1] 42
> table(complete.cases(sleep))
FALSE TRUE
20 42
如果要看缺失值占比是多少呢?
>t<-complete.cases(sleep)
> prop.table(table(t))#注意是两个table。
t
FALSE TRUE
0.3225806 0.6774194
二、缺失值查找的酷炫模式
mice包中有md.pattern()函数即missing data pattern,可以识别缺失的形式。
最左端,表示和该行数据类型相一致的行数的个数;最右端,表示该行类型中缺失的变量的数量;最下面一行表示缺失的值的总个数。
library(VIM)
> aggr(sleep,prop=FALSE,numbers=TRUE)
可以看出,VIM包的aggr描述的和mice包中的md.pattern()的意义相似。该图也可以设计成比例类型。
>aggr(sleep,prop=TRUE,numbers=TRUE)
三、异常值查找的方法。
质量控制图:μ为均值,μ+3σ作为控制上限(Upper Control Limit,UCL),用μ-3σ作为控制下限(Lower Control Limit,LCL)
利用qcc绘制质量控制图。
head(orangejuice)
sample D size trial
1 1 12 50 TRUE
2 2 15 50 TRUE
3 3 8 50 TRUE
4 4 10 50 TRUE
5 5 4 50 TRUE
6 6 7 50 TRUE
q1<-qcc(D[trial],sizes =size[trial],type="p")
可以看出,有两个点是异常点,beyond limits=2
q1$violations$beyond.limits
[1] 15 23
如何剔除异常值?
> inc<-setdiff(which(trial),c(15,23))
> inc
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16
[16] 17 18 19 20 21 22 24 25 26 27 28 29 30
setdiff(x,y) 表示在x 中剔除和y相一致的数据。如上式,表示剔除了15和23.
另:若绘制某一列数的qcc图该怎么画呢?和上面一致吗?
r2<-sample(c(20:60),20,replace=TRUE)
qcc(r2,sizes = 20,type="xbar.one")
可见,type要进行变换,如果是数值型的,则type=“xbar.one”,如果是比例则type=”p”。详见help(qcc)。