缺失值、异常值的识别

来源:互联网 发布:安卓上的绘画软件 编辑:程序博客网 时间:2024/06/10 00:17

一、缺失值查找的传统方法

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)。

1 0
原创粉丝点击