Hot-deck 插補

在 R 中以插補處理遺漏值

Michal Oleszak

Machine Learning Engineer

Hot-deck 的歷史

  • 可追溯至 1950 年代,當時資料存放在穿孔卡片上。
  • 來回瀏覽資料非常慢。
  • 美國人口普查局提出只需單次掃過資料的方法。

一張早期用於電腦程式設計的穿孔卡片。

1 Image source: https://en.wikipedia.org/wiki/Punched_card#/media/File:Used_Punchcard_(5151286161).jpg
在 R 中以插補處理遺漏值

Hot-deck 插補

  • 對每個變數,以最後觀察到的值替換每個遺漏值。
  • Hot-deck 指的是正在處理的一疊穿孔卡片。

缺點

  • 需要資料為 MCAR。
  • 基本版 hot-deck 可能破壞變數間關係。

優點

  • 快速(資料只需掃過一次)。
  • 插補後的值不會全都相同。
  • 可用簡單技巧避免破壞關係。
在 R 中以插補處理遺漏值

Hot-deck 實作示例

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。Weight 有一個遺漏值。因列順序隨機,PhysActive=FALSE 的列在前,接著是 PhysActive=TRUE 且缺少 Weight 的列。這顯示 hot-deck 會把非活躍者的體重值往後傳到活躍者。

兩欄表格:PhysActive 與 Weight。Weight 有一個遺漏值。因資料依 PhysActive 分組,hot-deck 會將活躍者的體重值傳給另一位活躍者。

nhanes_imp <- hotdeck(
    nhanes, 
    variable = "Weight", 
    domain_var = "PhysActive"
)
在 R 中以插補處理遺漏值

依相關變數排序

兩個變數:Height 與 Weight。Weight 有一個遺漏值。因列順序隨機,身高較高者在前,接著是身高較矮且缺少體重者。這顯示 hot-deck 將高個的體重傳給矮個。

兩個變數:Height 與 Weight。Weight 有一個遺漏值。因資料依 Height 排序,hot-deck 會把矮個的體重值傳給另一位矮個。

nhanes_imp <- hotdeck(
    nhanes, 
    variable = "Weight"
    ord_var = "Height"
)
在 R 中以插補處理遺漏值

一起來練習吧!

在 R 中以插補處理遺漏值

Preparing Video For Download...