通过自助法进行多重插补

R 中的缺失值填补处理

Michal Oleszak

Machine Learning Engineer

插补带来的不确定性

  • 插补通常是分析或建模前的第一步。
  • 缺失值的估计存在不确定性。
  • 在对插补数据进行任何分析时,都应计入这种不确定性。

Ranjit Lall 论文《How Multiple Imputation Makes a Difference》的标题页页眉。

近一半研究中的关键结果会消失

R 中的缺失值填补处理

自助法(Bootstrap)

自助法 = 有放回抽样行以获得与原始数据同规模的数据

两个模拟数据框。左侧"原始数据"中每行颜色不同,表示取值不同。右侧"自助样本"中,有些来自"原始数据"的彩色行出现多次,另一些未出现。

R 中的缺失值填补处理

通过自助法进行多重插补

一张图示展示通过自助法进行多重插补的五个阶段。从名为"原始数据"的模拟数据框出发,三条箭头指向三个标注为"不同自助样本"的数据框。各自再指向"插补"。随后指向"建模/分析"。最后汇聚到"结果分布"。

R 中的缺失值填补处理

自助插补:优缺点

优点:

  • 兼容任何插补方法。
  • 可近似难以解析计算的量。
  • 适用于 MCAR 与 MAR 数据。

缺点:

  • 重复次数多或计算耗时长时较慢。
R 中的缺失值填补处理

自助法实操

calc_correlation <- function(data, indices) {






  # 返回相关系数
  return(corr_coeff)
}
R 中的缺失值填补处理

自助法实操

calc_correlation <- function(data, indices) {
  # 获取自助样本
  data_boot <- data[indices, ]




  # 返回相关系数
  return(corr_coeff)
}
R 中的缺失值填补处理

自助法实操

calc_correlation <- function(data, indices) {
  # 获取自助样本
  data_boot <- data[indices, ]
  # 用 kNN 插补
  data_imp <- kNN(data_boot)


  # 返回相关系数
  return(corr_coeff)
}
R 中的缺失值填补处理

自助法实操

calc_correlation <- function(data, indices) {
  # 获取自助样本
  data_boot <- data[indices, ]
  # 用 kNN 插补
  data_imp <- kNN(data_boot)
  # 计算 Weight 与 TotChol 的相关性
  corr_coeff <- cor(data_imp$Weight, data_imp$TotChol)
  # 返回相关系数
  return(corr_coeff)
}
R 中的缺失值填补处理

自助法实操

library(boot)
boot_results <- boot(nhanes, statistic = calc_correlation, R = 50)
print(boot_results)
ORDINARY NONPARAMETRIC BOOTSTRAP

Call:
boot(data = nhanes, statistic = calc_correlation, R = 50)

Bootstrap Statistics :
      original      bias    std. error
t1* 0.03028306 0.007385452  0.04207152
R 中的缺失值填补处理

绘制自助法结果

plot(boot_results)

一个直方图和 Q-Q 图,展示自助法结果的分布。两图均表明分布接近正态。

R 中的缺失值填补处理

自助法置信区间

boot_ci <- boot.ci(boot_results, conf = 0.95, type = "norm")
print(boot_ci)
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 50 bootstrap replicates

CALL : 
boot.ci(boot.out = boot_results, conf = 0.95, type = "norm")

Intervals : 
Level      Normal        
95%   (-0.0596,  0.1054 )  
Calculations and Intervals on Original Scale
R 中的缺失值填补处理

Vamos praticar!

R 中的缺失值填补处理

Preparing Video For Download...