Imputation par régression logistique
Un choix courant pour imputer des variables binaires est la régression logistique. Malheureusement, il n’existe pas de fonction similaire à impute_lm() qui le fasse. C’est pourquoi vous allez écrire cette fonction vous‑même !
Appelons la fonction impute_logreg(). Son premier argument sera un data frame df, dont les valeurs manquantes ont été initialisées et qui ne contient des valeurs manquantes que dans la colonne à imputer. Le second argument sera une formula pour le modèle de régression logistique.
La fonction fera ce qui suit :
- Conserver les emplacements des valeurs manquantes.
- Ajuster le modèle.
- Produire des prédictions.
- Remplacer les valeurs manquantes par les prédictions.
Ne vous inquiétez pas de la ligne qui crée imp_var : c’est simplement une manière d’extraire, depuis la formule, le nom de la colonne à imputer. Passons à un peu de programmation fonctionnelle !
Cet exercice fait partie du cours
Gérer les données manquantes avec des imputations en R
Instructions
- Créez un masque booléen indiquant où
df[imp_var]est manquant et affectez‑le àmissing_imp_var. - Ajustez un modèle de régression logistique en utilisant la formule et les données reçues par la fonction en arguments, en veillant à définir la bonne valeur de
familypour garantir l’ajustement d’une régression logistique (passez‑la sans guillemets) ; affectez le modèle àlogreg_model. - Prédisez la réponse avec le modèle et affectez‑la à
preds; n’oubliez pas de définir letypede prédiction approprié. - Utilisez
predsavecmissing_imp_varpour imputer les valeurs manquantes.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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)
}