均值填补

R 中的缺失值填补处理

Michal Oleszak

Machine Learning Engineer

填补术语

Imputation(填补) = 对缺失值进行合理估计

  • 基于供体的填补:用其他完整观测填入缺失值。
  • 基于模型的填补:用统计或机器学习模型预测缺失值。

本章关注基于供体的方法:

  • 均值填补
  • 热牌填补(Hot-deck)
  • kNN 填补
R 中的缺失值填补处理

均值填补

一张包含两列的表:左列为原始数据,含一个缺失值;右列为填补后数据,用均值填补了该缺失值。

当时间序列围绕长期均值随机波动时,均值填补效果尚可。

对截面数据,均值填补往往很差:

  • 破坏变量间关系。
  • 填补值无方差。
R 中的缺失值填补处理

均值填补实操

任务:对 NHANES 的 HeightWeight 做均值填补。

  • 为每个原始缺失值创建二元指示变量。
nhanes <- nhanes %>% 
  mutate(Height_imp = ifelse(is.na(Height), TRUE, FALSE)) %>% 
  mutate(Weight_imp = ifelse(is.na(Weight), TRUE, FALSE))
  • 用各自均值替换 HeightWeight 的缺失值。
nhanes_imp <- nhanes %>% 
  mutate(Height = ifelse(is.na(Height), mean(Height, na.rm = TRUE), Height)) %>% 
  mutate(Weight = ifelse(is.na(Weight), mean(Weight, na.rm = TRUE), Weight))
R 中的缺失值填补处理

NHANES 均值填补后的数据

nhanes_imp %>%
    select(Weight, Height, Height_imp, Weight_imp) %>%
    head()
     Weight   Height Height_imp Weight_imp
1  73.20000 166.2499       TRUE      FALSE
2  72.30000 166.2499       TRUE      FALSE
3  57.70000 158.9000      FALSE      FALSE
4  88.90000 183.3000      FALSE      FALSE
5  45.10000 157.6000      FALSE      FALSE
6  66.77065 158.4000      FALSE       TRUE
R 中的缺失值填补处理

评估填补质量:边际图

nhanes_imp %>% select(Weight, Height, Height_imp, Weight_imp) %>% marginplot(delimiter="imp")

一个边际图:"Height" 对 "Weight" 的散点图,在任一变量中被填补的值以不同颜色标示。

R 中的缺失值填补处理

均值填补的问题

破坏变量关系:

  • HeightWeight 做均值填补后,正相关会变弱。
  • 用其中一个预测另一个的模型会被离群的填补值误导,产生偏差结果。

填补数据无变异:

  • 方差变小会低估标准误,无法可靠地做假设检验和置信区间计算。
R 中的缺失值填补处理

中位数与众数填补

  • 可用中位数或众数替代均值进行填补。
  • 有离群值时,中位数填补更合适。
  • 分类变量无法计算均值或中位数,改用众数。
  • 中位数和众数填补与均值填补有相同缺点。

一个边际图:"Height" 对 "Weight" 的散点图,在任一变量中被填补的值以不同颜色标示。

R 中的缺失值填补处理

Let's practice!

R 中的缺失值填补处理

Preparing Video For Download...