CommencerCommencer gratuitement

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

Afficher le cours

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 family pour 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 le type de prédiction approprié.
  • Utilisez preds avec missing_imp_var pour 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)
}
Modifier et exécuter le code