欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第18章 处理缺失数据的高级方法

程序员文章站 2022-03-22 23:02:22
...

注:R语言的再复习之路
 
 

1. 处理缺失值的步骤

  • 识别缺失数据
  • 检查导致数据缺失的原因
  • 删除包含缺失值的实例或用合理的数值代替缺失值

第18章 处理缺失数据的高级方法
 
 

2. 识别缺失值

函数complete.cases()可以用来识别矩阵或数据框中没有缺失值的行。若每行都包含完整的实例,则返回TRUE的逻辑向量;若每行有一个或多个缺失值,则返回FALSE。

## 列出没有缺失值的行
sleep[complete.cases(sleep), ]

## 列出有一个或多个缺失值的行
sleep[!complete.cases(sleep), ]

## 排除缺失值求均值
mean(!complete.cases(sleep))

 
 

3. 探索缺失值模式

3.1 列表探究缺失值数据

library(mice)
data(sleep, package = 'VIM')
md.pattern(sleep)
  • 第一列表示各缺失值模式的实例个数
  • 最后一列表示各模式中有缺失值的变量的个数
  • 最后一行表示每个变量中缺失值的数目

3.2 图形探究缺失值数据

## 方法1
library('VIM')
aggr(sleep, prop = FALSE, numbers = TRUE)

## 方法2
matrixplot(sleep)

## 方法3
marginplot(sleep[c('Gest', 'Dream')], pch = 20, col = c('darkgrey', 'red', 'blue'))

3.3 用相关性探索缺失值

x <- as.data.frame(abs[is.na(sleep)))
y <- x[which(apply(x, 2, sum) > 0)]
cor(y)

注:我们平时就可以用abs()函数将TRUE和FLASE换成1和0。
 
 

4. 理性处理不完整数据

4.1 完整实例分析(行删除)

## 方法1
newdata <- mydata[complete.cases(mydata), ]

## 方法2
newdata <- na.omit(mydata)

4.2 多重插补

## 格式
library(mice)
imp <- mice(data, m)
fit <- with(imp, analysis)
pooled <- pool(fit)
summary(pooled)

## 例子
imp <- mice(sleep, seed = 1234)
fit <- with(imp, lm(Dream ~ Span + Gest))
pooled <- pool(fit)
summary(pooled)