Imputazione con regressione logistica
Una scelta diffusa per imputare variabili binarie è la regressione logistica. Purtroppo, non esiste una funzione simile a impute_lm() che lo faccia. Ecco perché scriverai tu stesso una funzione!
Chiamiamo la funzione impute_logreg(). Il suo primo argomento sarà un data frame df, i cui valori mancanti sono stati inizializzati e che contiene valori mancanti solo nella colonna da imputare. Il secondo argomento sarà una formula per il modello di regressione logistica.
La funzione farà quanto segue:
- Mantieni le posizioni dei valori mancanti.
- Costruisci il modello.
- Fai le previsioni.
- Sostituisci i valori mancanti con le previsioni.
Non preoccuparti della riga che crea imp_var - è solo un modo per estrarre dal formula il nome della colonna da imputare. Facciamo un po' di programmazione funzionale!
Questo esercizio fa parte del corso
Gestione dei dati mancanti con imputazioni in R
Istruzioni dell'esercizio
- Crea una maschera booleana per i casi in cui
df[imp_var]è mancante e assegnala amissing_imp_var. - Stima un modello di regressione logistica usando la formula e i dati che la funzione riceverà come argomenti, ricordandoti di impostare il
familycorretto per assicurarti che venga stimata una regressione logistica (passalo senza virgolette); assegna il modello alogreg_model. - Predici la risposta con il modello e assegnala a
preds; ricorda di impostare iltypedi previsione appropriato. - Usa
predsinsieme amissing_imp_varper imputare i valori mancanti.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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)
}