Gestione dei missing values con R

/, R/Gestione dei missing values con R

Gestione dei missing values con R

In questo post vediamo i metodi migliori per la gestione dei missing values con R. I missing values non sono altro che dati che mancano all’interno di un dataset. Capita spesso che un dataset non sia del tutto completo, per le più svariate ragioni: ad esempio, nei questionari, i rispondenti possono dimenticare o saltare una domanda, oppure stancarsi di un questionario molto lungo, oppure trovare una domanda lesiva della privacy. I missing values sono quindi un elemento che dobbiamo saper gestire quando analizziamo i nostri dati.

La strategia più semplice quando abbiamo a che fare con i missing values è spesso quella di ignorarli o di cancellarli. Questa strategia può andare bene se abbiamo un dataset molto grande e pochi dati mancanti, possibilmente ben distribuiti sulle variabili.

Per cancellare i casi con valori mancanti non abbiamo strettamente bisogno di scrivere del codice apposito, ma possiamo utilizzare la funzione na.omit().

 


# per prima cosa creiamo un dataset che contenga dei valori mancanti

df <- data.frame(name = c("Laura", "Simon", "Katherine", "Francis", "Joseph", "Rosie"), heights = c(NA,NA, 180, 165, NA, 178), sex = c("f", "m", "f", "m", "m", "f"), value = rnorm(6))

# abbiamo quindi un dataset che contiene 3 missing values nella variabile heights, che misura l'altezza dei soggetti

df
 name heights sex value
1 Laura NA f 0.3048918
2 Simon NA m 0.2796277
3 Katherine 180 f -1.3166927
4 Francis 165 m 0.8742224
5 Joseph NA m 0.4164021
6 Rosie 178 f -1.4663630

# possiamo utilizzare la funzione na.omit() per eliminare i casi che contengono missing values

na.omit(df)

 name heights sex value
3 Katherine 180 f 0.48274132
4 Francis 165 m 0.13328901
6 Rosie 178 f 0.03893108

# la funzione na.omit() elimina i casi che contengono valori mancanti, lasciando solo i casi completi

Quando abbiamo molti dati mancanti, oppure quando i missing values sono concentrati su poche variabili, dobbiamo trovare un’altra maniera per gestirli. Uno dei metodi classici è quello di imputare al posto dei valori mancanti la media o la mediana.


# imputiamo al posto dei missing values la media della variabile che contiene i missing values

df$heights[is.na(df$heights)] <- mean(df$heights, na.rm = TRUE)

df
 name heights sex value
1 Laura 174.3333 f -0.05421946
2 Simon 174.3333 m -0.17579960
3 Katherine 180.0000 f 0.48274132
4 Francis 165.0000 m 0.13328901
5 Joseph 174.3333 m -0.58811117
6 Rosie 178.0000 f 0.03893108

 

Uno dei pacchetti più utilizzati per l’imputazione dei dati mancanti è mice. Il pacchetto mice basa l’imputazione su procedure di tipo bayesiano. 

 


# per prima cosa installiamo e richiamiamo il pacchetto mice

install.packages("mice")

library(mice)
# usiamo la funzione mice per creare un oggetto che contenga le imputazioni

# il valore dopo la virgola è il numero di imputazioni possibili create da mice, in questo caso 2, ma di default sono 5. Questo significa che mice crea 2 possibili esempi di dataset con i missing values riempiti

ms <- mice(df, 2)

# completiamo il dataset con il primo esempio di imputazione, creando un oggetto df2

df2 <- complete(ms,1)

# stampiamo il df2

df2
 name heights sex value
1 Laura 165 f -1.5531374
2 Simon 178 m -1.5977095
3 Katherine 180 f 1.8050975
4 Francis 165 m -0.4816474
5 Joseph 178 m 0.6203798
6 Rosie 178 f 0.6121235

 

In questo post abbiamo imparato alcuni dei metodi per la gestione dei missing values con R. Esistono ancora moltissimi metodi e pacchetti per la gestione dei missing values, ad esempio si può utilizzare il machine learning per predire i missing values in base al resto dei casi di un dataset. Puoi approfondire il discorso sulla gestione dei missing values ad esempio nel corso di introduzione al machine learning, oppure nel libro. Puoi anche proseguire con una lezione sul blog relativa all’analisi esplorativa dei dati, o vedere come effettuare un’analisi di text mining con R. 

 

By | 2017-05-08T16:28:33+00:00 gennaio 19th, 2017|Data mining, R|0 Comments

About the Author:

Leave A Comment