当我们在数据集中缺少值时,重要的是考虑为什么它们会丢失以及它们对分析的影响。有时忽略丢失的数据会降低功耗,但更重要的是,有时它会使答案有偏差,并有可能误导错误的结论。因此,重要的是要考虑丢失的数据机制是什么,以便对其进行处理。 Rubin(1976)区分了三种类型的误报机制:
- 完全随机缺失(MCAR)Missing completely at random:当可以将缺少值的案件视为所有案件的随机样本时;在实践中很少发生MCAR
- 随机丢失(MAR)Missing at random :以我们拥有的所有数据为条件时,任何剩余的丢失都是完全随机的;也就是说,它不依赖于某些缺少的变量。因此,可以使用观察到的数据对缺失进行建模。然后,我们可以对可用数据使用专门的缺失数据分析方法,以纠正缺失的影响。
- 非随机丢失(MNAR)Missing not at random:当数据既不是MCAR也不是MAR时。这种情况通常很难处理,因为它将需要对缺失模式进行强有力的假设。
缺失数据的常见处理方法
- 人们尝试处理丢失数据的一种常见方法是删除所有缺少值的情况。这种方法称为完整案例分析(CC:Complete cases)。但是,CC仅在数据为MCAR时有效。
- 另一种方法是多重插补(MI:multiple imputation),这是一种 (monte carlo) 蒙特卡洛方法,它模拟多个值以插补(填充)每个缺失值,然后分别分析每个插补数据集,最后将结果汇总在一起。我们多次估算缺失的数据,以解决我们对缺失数据的真实(未知)值的不确定性。
- 在处理示例数据集时,我们对多重插补更加满意。从理论上讲,多重插补可以处理所有三种类型的缺失。但是,执行多重插补通常不适合MNAR情况。MNAR类型的数据的数据分析更加复杂,这里我们假设数据是属于 MAR 数据。
实际数据操作
# required libraries
library(mice)
## Warning: package 'mice' was built under R version 3.6.3
##
## Attaching package: 'mice'
## The following objects are masked from 'package:base':
##
## cbind, rbind
library(VIM)
## Warning: package 'VIM' was built under R version 3.6.3
## Loading required package: colorspace
## Loading required package: grid
## Loading required package: data.table
## VIM is ready to use.
## Since version 4.0.0 the GUI is in its own package VIMGUI.
##
## Please use the package to use the new (and old) GUI.
## Suggestions and bug-reports can be submitted at: https://github.com/alexkowa/VIM/issues
##
## Attaching package: 'VIM'
## The following object is masked from 'package:datasets':
##
## sleep
library(lattice)
载入数据
- 这是一个25行四列的数据
- A data frame with 25 observations on the following 4 variables.
- age:Age group (1=20-39, 2=40-59, 3=60+)
- bmi:Body mass index (kg/m**2)
- hyp:Hypertensive (1=no,2=yes)
- chl:Total serum cholesterol (mg/dL)
# load data
data(nhanes2)
dim(nhanes2)
## [1] 25 4
head(nhanes2)
## age bmi hyp chl
## 1 20-39 NA <NA> NA
## 2 40-59 22.7 no 187
## 3 20-39 NA no 187
## 4 60-99 NA <NA> NA
## 5 20-39 20.4 no 113
## 6 60-99 NA <NA> 184
md.pattern可视化缺失模式
md.pattern(nhanes2)
## age hyp bmi chl
## 13 1 1 1 1 0
## 3 1 1 1 0 1
## 1 1 1 0 1 1
## 1 1 0 0 1 2
## 7 1 0 0 0 3
## 0 8 9 10 27
VIM包对缺失数据可视化
- aggr函数可视化
library(VIM)
nhanes2_aggr = aggr(nhanes2,
col=mdc(1:2), # 颜色设置
numbers=TRUE,
sortVars=TRUE,
labels=names(nhanes2),
cex.axis=.7, gap=3,
ylab=c("Proportion of missingness","Missingness Pattern"))