Com tractar els NA

Author

Mireia Camacho

Els NA

Quan treballem amb bases de dades és molt comú trobar NA en alguna part del dataset. En el món de la programació, NA significa “Not Available” i representa un valor que falta o que és desconegut.

Depenent de l’estructura del dataset o el tipus de dades que el formen ens pot donar pistes de què la informació no s’ha recopilat correctament o, per contra, ens pot aportar informació addicional sobre el context de les dades.

Per exemple, podem comptar amb un dataset que recopili els registres de diferents contaminants en diverses estacions meteorològiques. Observant els NA descobrim que l’estació A té tots els valors del contaminant NOX buits. Fent una petita recerca, descobrim que l’estació A no disposa dels dispositius necessaris per recopilar informació sobre les partícules NOX a l’aire.

Un altre exemple podria ser que tinguem registres diaris dels contaminants, però el dia 10 de novembre tots els registres de l’estació meteorològica B són NA. Preguntant als responsables ens diuen que aquell dia es va estar fent manteniment a l’estació i no es va registrar cap valor.

Què fer quan tenim NAs al nostre dataset

Sempre depenent de l’objectiu que tinguem entre mans, podem lidiar d’una o altra forma amb els valors faltants.

1. Eliminar els NA

En els casos en què els NA segueixen un patró que ens resulta irrellevant a l’hora d’analitzar o treballar les dades, la pràctica més comuna és directament eliminar-los.

Per exemple, si tenim una base de dades que sabem que no s’actualitzarà més i que compta amb una columna completament buida (plena d’NA), que no ens aporta cap mena d’informació, podem simplement eliminar-la.

D’altra banda, si tenim files amb NA constants en alguns registres (per exemple, si l’estació A té un registre NA a totes les files on el contaminant és NOX) podem eliminar aquestes files i facilitar el processament computacional de la base de dades.

2. Omplir manualment els valors faltants

A vegades no ens és possible eliminar les files o columnes que contenen NA perquè segons en quins contextos necessitem comptar amb totes les dades possibles. És per això que haurem d’omplir les cel·les buides amb valors aproximats.

Què podem considerar valors aproximats?

  • Valors estadístics: Podem omplir els valors que faltin amb la mitjana, mediana o moda dels registres que comparteixin característiques semblants al que volem afegir.

    Per exemple, si a l’estació meteorològica B el dia 10 de novembre no tenim dades del contaminant NOX, podem fer la mitjana dels registres NOX que ha captat l’estació B durant la resta de dies de novembre.

  • Valors més propers: Podem omplir els NA amb el valor de la fila anterior o posterior del dataset.

    Seguint amb l’exemple anterior, si el dia 9 de novembre va haver-hi un registre de 10 mg/m3 de NOX en l’aire i el dia 11 se’n van registrar 8, podem escollir si omplir el NA del dia 10 de novembre amb un 10 o un 8.

  • Afegir un valor fix: Donat que si volem fer operacions amb els valors d’una columna (per exemple una mitjana) els NA afecten els resultats convertint sempre el resultat de l’operació en un NA, podem establir un valor fix que simplement tingui l’objectiu de què l’operació es faci sense veure’s afectada per NA.

    El valor fix pot ser diferent segons el tipus de context en què ens trobem i el que vulguem fer amb les dades.

Cal remarcar que aquesta pràctica només es pot dur a terme quan els valors faltants són relativament pocs i el context ens permet fer-ho.

Per exemple, NO podríem omplir les files de l’estació meteorològica A per al contaminant NOX amb valors del contaminant SO2 per molt que els registres siguin de la mateixa estació perquè parlem de coses completament diferents.

Sempre s’ha de tenir en compte el context de les dades i si ens és necessari omplir els buits o no.

3. Altres tècniques més avançades

En aquest cas aquestes tècniques no les haureu d’utilitzar pràcticament mai, però us les afegeixo perquè les conegueu o mínimament us sonin:

  • Interpolació: És un mètode estadístic que consisteix a omplir els NA a partir dels rangs que comprenen les dades que sí que existeixen assumint que hi ha un patró o tendència.

    És molt habitual utilitzar mètodes d’interpolació per a fer mapes del temps, ja que els registres es prenen en punts concrets (estacions meteorològiques) però es vol estimar les temperatures dels voltants.

Estacions de mesura de l’AEMET. Font: AEMET

Interpolació de temperatures a partir de les estacions. Font: AEMET

  • Imputació múltiple: És un altre mètode estadístic que consisteix a generar diversos valors per a cada NA segons el seu context i selecciona el més adequat.

  • Models predictius: Mètode de Machine Learning que el que fa és entrenar un model amb els registres recopilats anteriorment i prediu el valor faltant en funció d’altres variables del dataset.

4. Ignorar els NA i treballar amb ells

Si els NA no ens molesten a l’hora de treballar i ens trobem davant un context on té sentit tenir NA, podem deixar-los tal com estan i seguir treballant amb les dades tal com estan des d’un principi.

El paquet {naniar}

El paquet d’R {naniar} conté múltiples funcions que ens permeten lidiar amb els NA de diverses formes.

Des de permetre’ns explorar els NA de cada variable amb la funció gg_miss_var(), visualitzar patrons entre els NA de les variables (si X té NA, Y també tindrà NA) unint les funcions as_shadow_upset() i UpSetR::upset() ; fins a reemplaçar algun valor per NA amb la funció naniar::replace_with_na() (en contraposició de la funció tidyr::replace_na() que canvia els NA per el valor que li especifiquem).

library(naniar)
library(UpSetR)
library(ggplot2)

## Exemple de codi per visualitzar els patrons d'NA entre variables
riskfactors %>%
   as_shadow_upset() %>%
   UpSetR::upset()

Més informació del paquet {naniar}