Multipel imputation med bootstrapping

Hantering av saknade värden med imputering i R

Michal Oleszak

Machine Learning Engineer

Osäkerhet från imputation

  • Imputation är vanligtvis ett första steg innan analys eller modellering.
  • Saknade värden uppskattas med viss osäkerhet.
  • Denna osäkerhet bör beaktas i alla analyser som utförs på imputerade data.

Titelsidan på artikeln av Ranjit Lall med titeln "How Multiple Imputation Makes a Difference."

I nästan hälften av studierna försvann viktiga resultat

Hantering av saknade värden med imputering i R

Bootstrap

Bootstrapping = sampling av rader med återläggning för att få data i originalstorlek

Två illustrativa dataramar. Den vänstra, märkt "original data", har varje rad i olika färg för att visa att de innehåller olika värden. Den högra, märkt "bootstrapped sample", visar att vissa färgade rader från originaldata förekommer flera gånger, medan andra saknas helt.

Hantering av saknade värden med imputering i R

Multipel imputation med bootstrapping

Ett diagram med fem steg för imputation med bootstrapping. Från en illustrativ dataram kallad "original data" pekar tre pilar mot tre andra dataramar märkta "different bootstrap samples". Från var och en pekar en pil mot ett "Imputation"-steg. Därifrån pekar pilar mot steget "Modeling / analysis". Därifrån pekar pilar mot en gemensam slutnod kallad "Distribution of results".

Hantering av saknade värden med imputering i R

Bootstrappad imputation: för- och nackdelar

Fördelar:

  • Fungerar med alla imputationsmetoder.
  • Kan approximera kvantiteter som är svåra att beräkna analytiskt.
  • Fungerar med MCAR- och MAR-data.

Nackdelar:

  • Långsamt vid många replikat eller tidskrävande beräkningar.
Hantering av saknade värden med imputering i R

Bootstrapping i praktiken

calc_correlation <- function(data, indices) {






  # Return the correlation coefficient
  return(corr_coeff)
}
Hantering av saknade värden med imputering i R

Bootstrapping i praktiken

calc_correlation <- function(data, indices) {
  # Get bootstrap sample
  data_boot <- data[indices, ]




  # Return the correlation coefficient
  return(corr_coeff)
}
Hantering av saknade värden med imputering i R

Bootstrapping i praktiken

calc_correlation <- function(data, indices) {
  # Get bootstrap sample
  data_boot <- data[indices, ]
  # Impute with kNN imputation
  data_imp <- kNN(data_boot)


  # Return the correlation coefficient
  return(corr_coeff)
}
Hantering av saknade värden med imputering i R

Bootstrapping i praktiken

calc_correlation <- function(data, indices) {
  # Get bootstrap sample
  data_boot <- data[indices, ]
  # Impute with kNN imputation
  data_imp <- kNN(data_boot)
  # Calculate correlation between Weight and TotChol
  corr_coeff <- cor(data_imp$Weight, data_imp$TotChol)
  # Return the correlation coefficient
  return(corr_coeff)
}
Hantering av saknade värden med imputering i R

Bootstrapping i praktiken

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
Hantering av saknade värden med imputering i R

Visualisera bootstrappade resultat

plot(boot_results)

Ett histogram och ett Q-Q-diagram som visar fördelningen av bootstrappade resultat. Båda diagrammen tyder på att fördelningen är nära normalfördelad.

Hantering av saknade värden med imputering i R

Bootstrappade konfidensintervall

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
Hantering av saknade värden med imputering i R

Nu kör vi en övning!

Hantering av saknade värden med imputering i R

Preparing Video For Download...