Aan de slagGa gratis aan de slag

Imputatie met logistic regression

Een populaire keuze om binaire variabelen te imputeren is logistic regression. Helaas is er geen functie zoals impute_lm() die dit doet. Daarom ga je zo'n functie zelf schrijven!

Noem de functie impute_logreg(). Het eerste argument is een data frame df, waarvan de missende waarden zijn geïnitialiseerd en dat alleen nog missende waarden bevat in de kolom die je gaat imputeren. Het tweede argument is een formula voor het logistic-regressionmodel.

De functie doet het volgende:

  • De locaties van missende waarden bewaren.
  • Het model bouwen.
  • Voorspellingen maken.
  • Missende waarden vervangen door voorspellingen.

Maak je geen zorgen over de regel die imp_var aanmaakt — dit is alleen een manier om de naam van de kolom die je gaat imputeren uit de formula te halen. Tijd voor wat functioneel programmeren!

Deze oefening maakt deel uit van de cursus

Omgaan met missende data met imputaties in R

Cursus bekijken

Oefeninstructies

  • Maak een booleaanse mask voor waar df[imp_var] ontbreekt en wijs die toe aan missing_imp_var.
  • Fit een logistic-regressionmodel met de formula en data die de functie als argumenten krijgt, en zorg dat je de juiste family instelt zodat er een logistic regression wordt gefit (geef deze zonder aanhalingstekens door); wijs het model toe aan logreg_model.
  • Voorspel de respons met het model en wijs het toe aan preds; vergeet niet het juiste type voor de voorspelling in te stellen.
  • Gebruik preds samen met missing_imp_var om missende waarden te imputeren.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

impute_logreg <- function(df, formula) {
  # Extract name of response variable
  imp_var <- as.character(formula[2])
  # Save locations where the response is missing
  missing_imp_var <- ___
  # Fit logistic regression mode
  logreg_model <- ___(___, data = ___, family = ___)
  # Predict the response and convert it to 0s and 1s
  preds <- predict(___, type = ___)
  preds <- ifelse(preds >= 0.5, 1, 0)
  # Impute missing values with predictions
  df[missing_imp_var, imp_var] <-___[___]
  return(df)
}
Code bewerken en uitvoeren