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
Instrucciones del ejercicio
- Crea una máscara booleana para donde
df[imp_var]tenga valores faltantes y asígnala amissing_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
familycorrecto para asegurar que se ajuste una regresión logística (pásalo sin comillas); asigna el modelo alogreg_model. - Predice la respuesta con el modelo y asígnala a
preds; recuerda establecer eltypede predicción apropiado. - Usa
predsjunto conmissing_imp_varpara 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)
}