在真实的世界中,缺失数据是经常出现的,并可能对分析的结果造成影响。在R中,经常使用VIM(Visualization and Imputation of Missing values)包来对缺失值进行可视化和插补。在使用VIM绘图时,有些绘图函数会对缺失值会自动进行插补。
缺失数据的分类:
- MCAR(完全随机缺失):若变量的缺失数据与其他任何观测或未观测的变量都不相关,则数据为MCAR.。
- MAR(随机缺失):若变量的缺失数据与其他观测变量相关,与未观测变量无关,则数据缺失是随机缺失。
- NMAR(非随机缺失):若缺失数据不属于MCAR和MAR,则数据是非随机缺失。
大部分处理缺失数据的方法都是假定数据是MCAR或MAR。
一,识别缺失值
R使用NA代表缺失值,NaN(不是一个数)代表不可能的值,符号Inf和-Inf分别代表正无穷和负无穷。
函数is.na()、is.nan()和is.infinite()分别用来识别缺失值,不可能值和无穷值。
函数complete.cases() 可以用来识别矩阵或数据框中的没有缺失值的行,若每行有一个或多个缺失值,则返回FALSE。注意,complete.cases()仅把NA和Nan识别为缺失值,无穷值(Inf和-Inf)被当作有效值。
二,探索缺失值的模式
在决定如何处理缺失数据前,了解哪些变量有缺失值、数目有多少、是什么组合等信息,是非常有用的。
1,列表显示缺失值
mice包中的md.pattern()函数可以生成一个以矩阵或数据框形式展示缺失值模式,0表示变量的列中存在缺失值,1则表示没有缺失值。注意,md.pattern()函数仅把NA识别为缺失值。
md.pattern(x, plot = TRUE)
例如,以VIM包提供的哺乳动物的睡眠数据(sleep,基础安装包中还有一个描述药效的sleep数据集)。
library(VIM)
library(mice)
data(sleep,package='VIM')
md.pattern(sleep, FALSE)
BodyWgt BrainWgt Pred Exp Danger Sleep Span Gest Dream NonD
42 1 1 1 1 1 1 1 1 1 1 0
9 1 1 1 1 1 1 1 1 0 0 2
3 1 1 1 1 1 1 1 0 1 1 1
2 1 1 1 1 1 1 0 1 1 1 1
1 1 1 1 1 1 1 0 1 0 0 3
1 1 1 1 1 1 1 0 0 1 1 2
2 1 1 1 1 1 0 1 1 1 0 2
2 1