Zacznij terazZacznij za darmo

Imputacja regresją logistyczną

Popularnym wyborem do imputacji zmiennych binarnych jest regresja logistyczna. Niestety nie istnieje funkcja analogiczna do impute_lm(), która zrobiłaby to za ciebie. Dlatego napiszesz taką funkcję samodzielnie!

Nazwijmy ją impute_logreg(). Jej pierwszy argument to ramka danych df, w której brakujące wartości zostały już zainicjalizowane i brakujące dane występują tylko w kolumnie przeznaczonej do imputacji. Drugi argument to formula dla modelu regresji logistycznej.

Funkcja będzie wykonywać następujące kroki:

  • Zapamiętanie lokalizacji brakujących wartości.
  • Zbudowanie modelu.
  • Wyznaczenie predykcji.
  • Zastąpienie brakujących wartości predykcjami.

Nie przejmuj się linią tworzącą imp_var – to po prostu sposób na wyodrębnienie z formuły nazwy kolumny przeznaczonej do imputacji. Czas na trochę programowania funkcyjnego!

To ćwiczenie jest częścią kursu

Obsługa brakujących danych z imputacją w R

Zobacz kurs

Instrukcje do ćwiczenia

  • Utwórz maskę logiczną wskazującą miejsca, w których df[imp_var] ma brakujące wartości, i przypisz ją do missing_imp_var.
  • Dopasuj model regresji logistycznej, używając formuły i danych przekazanych jako argumenty funkcji; pamiętaj, aby ustawić odpowiedni parametr family zapewniający dopasowanie regresji logistycznej (przekaż go bez cudzysłowów) i przypisz model do logreg_model.
  • Wyznacz predykcje odpowiedzi za pomocą modelu i przypisz je do preds; pamiętaj, aby ustawić odpowiedni typ predykcji (type).
  • Użyj preds razem z missing_imp_var, aby uzupełnić brakujące wartości.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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)
}
Edytuj i uruchom kod