CommencezCommencez gratuitement

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

Voir le cours

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 family pour 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 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 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)
}
Modifier et exécuter le code