热卡片法(Hot-deck)插补

R 中的缺失值填补处理

Michal Oleszak

Machine Learning Engineer

热卡片法的由来

  • 可追溯至20世纪50年代,数据存储在穿孔卡上。
  • 来回浏览数据非常慢。
  • 美国人口普查局提出只需单次遍历的数据方法。

一张用于早期计算机编程的旧式穿孔卡。

1 Image source: https://en.wikipedia.org/wiki/Punched_card#/media/File:Used_Punchcard_(5151286161).jpg
R 中的缺失值填补处理

热卡片法(Hot-deck)插补

  • 对每个变量,用最近一次观测值替换其缺失值。
  • "热卡片"指正在处理中的穿孔卡片组。

缺点

  • 要求数据为 MCAR。
  • 朴素热卡片法可能破坏变量间关系。

优点

  • 快(仅一次遍历)。
  • 插补值非恒定。
  • 简单技巧可避免破坏关系。
R 中的缺失值填补处理

热卡片插补实操

nhanes_imp <- hotdeck(nhanes, variable = c("Height", "Weight"))
head(nhanes_imp)
  Age Gender Weight Height Diabetes TotChol Pulse PhysActive Height_imp Weight_imp
1  16   male   73.2  172.0    FALSE    3.00    76       TRUE      FALSE      FALSE
2  17   male   72.3  176.0    FALSE    2.61    74       TRUE      FALSE      FALSE
3  12   male   57.7  158.9    FALSE    4.27    80       TRUE      FALSE      FALSE
4  16   male   88.9  183.3    FALSE    3.62    58       TRUE      FALSE      FALSE
5  13 female   45.1  157.6    FALSE    2.66    92       TRUE      FALSE      FALSE
6  16 female   48.7  180.7    FALSE    4.32    58      FALSE       TRUE      FALSE
R 中的缺失值填补处理

在域内插补

包含两列:PhysActive 和 Weight。体重有一个缺失值。因行顺序随机,先出现 PhysActive=FALSE,再出现 PhysActive=TRUE 且体重缺失的行,展示了热卡片法将不活跃者的体重前推到活跃者。

包含两列:PhysActive 和 Weight。体重有一个缺失值。按 PhysActive 分组后,热卡片法将活跃者的体重前推到另一位活跃者。

nhanes_imp <- hotdeck(
    nhanes, 
    variable = "Weight", 
    domain_var = "PhysActive"
)
R 中的缺失值填补处理

按相关变量排序

包含身高和体重两列的表。体重有一个缺失值。因行顺序随机,先出现高个体,再出现身高较小且体重缺失的个体,展示了热卡片法将高个体的体重前推到矮个体。

包含身高和体重两列的表。体重有一个缺失值。按身高排序后,热卡片法将矮个体的体重前推到另一位矮个体。

nhanes_imp <- hotdeck(
    nhanes, 
    variable = "Weight"
    ord_var = "Height"
)
R 中的缺失值填补处理

一起练习热卡片插补!

R 中的缺失值填补处理

Preparing Video For Download...