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
Oefeninstructies
- Maak een booleaanse mask voor waar
df[imp_var]ontbreekt en wijs die toe aanmissing_imp_var. - Fit een logistic-regressionmodel met de formula en data die de functie als argumenten krijgt, en zorg dat je de juiste
familyinstelt zodat er een logistic regression wordt gefit (geef deze zonder aanhalingstekens door); wijs het model toe aanlogreg_model. - Voorspel de respons met het model en wijs het toe aan
preds; vergeet niet het juistetypevoor de voorspelling in te stellen. - Gebruik
predssamen metmissing_imp_varom 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)
}