Imputation par régression logistique
Un choix populaire pour imputer des variables binaires est la régression logistique. Malheureusement, il n'existe pas de fonction semblable à impute_lm() pour le faire. C'est pourquoi vous allez en écrire une vous-même!
Appelons la fonction impute_logreg(). Son premier argument sera une trame de données df, dont les valeurs manquantes ont été initialisées et qui ne contient des valeurs manquantes que dans la colonne à imputer. Le deuxième argument sera une formula pour le modèle de régression logistique.
La fonction fera ce qui suit :
- Conserver l'emplacement des valeurs manquantes.
- Construire 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 façon d'extraire le nom de la colonne à imputer à partir de la formule. Allons-y avec un peu de programmation fonctionnelle!
Cette activité fait partie du cours
Traitement des données manquantes par imputation dans R
Instructions de l’exercice
- 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 comme arguments, en n'oubliant pas de définir le bon
familypour obtenir une régression logistique (passez-le 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 ce code d’exemple.
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)
}