ComenzarEmpieza gratis

Imputación con regresión logística

Una opción muy habitual para imputar variables binarias es la regresión logística. Por desgracia, no hay una función similar a impute_lm() que lo haga. ¡Por eso vas a escribir tú mismo/a esa función!

Llamemos a la función impute_logreg(). Su primer argumento será un data frame df, cuyos valores faltantes ya se hayan inicializado y que solo contenga valores faltantes en la columna a imputar. El segundo argumento será una formula para el modelo de regresión logística.

La función hará lo siguiente:

  • Guardar las ubicaciones de los valores faltantes.
  • Ajustar el modelo.
  • Hacer predicciones.
  • Sustituir los valores faltantes por las predicciones.

No te preocupes por la línea que crea imp_var: solo sirve para extraer el nombre de la columna a imputar a partir de la fórmula. ¡Vamos a hacer un poco de programación funcional!

Este ejercicio forma parte del curso

Tratamiento de datos faltantes con imputaciones en R

Ver curso

Instrucciones del ejercicio

  • Crea una máscara booleana para donde df[imp_var] tenga valores faltantes y asígnala a missing_imp_var.
  • Ajusta un modelo de regresión logística usando la fórmula y los datos que la función recibe como argumentos, recordando establecer el family correcto para asegurar que se ajuste una regresión logística (pásalo sin comillas); asigna el modelo a logreg_model.
  • Predice la respuesta con el modelo y asígnala a preds; recuerda establecer el type de predicción apropiado.
  • Usa preds junto con missing_imp_var para imputar los valores faltantes.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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)
}
Editar y ejecutar código