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
Instrukcje do ćwiczenia
- Utwórz maskę logiczną wskazującą miejsca, w których
df[imp_var]ma brakujące wartości, i przypisz ją domissing_imp_var. - Dopasuj model regresji logistycznej, używając formuły i danych przekazanych jako argumenty funkcji; pamiętaj, aby ustawić odpowiedni parametr
familyzapewniający dopasowanie regresji logistycznej (przekaż go bez cudzysłowów) i przypisz model dologreg_model. - Wyznacz predykcje odpowiedzi za pomocą modelu i przypisz je do
preds; pamiętaj, aby ustawić odpowiedni typ predykcji (type). - Użyj
predsrazem zmissing_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)
}