Imputering med logistisk regression
Ett populärt val för imputering av binära variabler är logistisk regression. Tyvärr finns det ingen färdig funktion liknande impute_lm() som hanterar detta. Därför ska du skriva en sådan funktion själv!
Låt oss kalla funktionen impute_logreg(). Det första argumentet är en dataram df vars saknade värden har initierats och som endast innehåller saknade värden i den kolumn som ska imputeras. Det andra argumentet är en formula för den logistiska regressionsmodellen.
Funktionen ska göra följande:
- Spara platserna för de saknade värdena.
- Bygga modellen.
- Göra prediktioner.
- Ersätta saknade värden med prediktionerna.
Oro dig inte för raden som skapar imp_var – det är bara ett sätt att extrahera namnet på den kolumn som ska imputeras från formeln. Nu kör vi lite funktionell programmering!
Den här övningen är en del av kursen
Hantering av saknade värden med imputering i R
Övningsinstruktioner
- Skapa en boolesk mask för var
df[imp_var]saknar värden och tilldela den tillmissing_imp_var. - Anpassa en logistisk regressionsmodell med den formel och de data som funktionen tar emot som argument; kom ihåg att ange rätt
familyför att säkerställa att en logistisk regression anpassas (ange den utan citationstecken) och tilldela modellen tilllogreg_model. - Prediktera responsen med modellen och tilldela resultatet till
preds; kom ihåg att ange lämplig prediktionstyp medtype. - Använd
predstillsammans medmissing_imp_varför att imputera de saknade värdena.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)
}