Imputer les valeurs manquantes

Manipuler des séries temporelles en R

Harrison Brown

Graduate Researcher in Geography

Séries temporelles régulières et irrégulières

Séries temporelles régulières :

  • Aucune valeur manquante ni NA
  • Intervalles espacés de façon uniforme

Problèmes réels :

  • Pannes de capteurs/équipements
  • Conditions météo
  • ...

Agrégation :

  • Ré-échantillonne en résolution temporelle plus faible
  • Réduit l'information
  • ex. : somme mensuelle de valeurs quotidiennes

Imputation :

  • Remplit les valeurs manquantes
  • Plusieurs méthodes pour estimer les valeurs
Manipuler des séries temporelles en R

Imputation

Graphique d'une partie du jeu de données de Mauna Loa. Cette version comporte des points manquants, ce qui crée des « trous » dans la courbe. Ces trous représentent des valeurs NA.

Zoom du graphique précédent du jeu de données de Mauna Loa. Les lacunes de la courbe sont plus visibles.

Manipuler des séries temporelles en R

Imputer avec zoo

Fonctions na-dot de zoo :

  • zoo::na.fill()

  • zoo::na.locf()

  • zoo::na.approx()

Manipuler des séries temporelles en R

Identifier les valeurs manquantes

observations
2017-01-01 NA
2017-01-02  2
2017-01-03  2
2017-01-04  2
2017-01-05  4
2017-01-06  2
2017-01-07 NA
2017-01-08  1
2017-01-09  2
2017-01-10  2
...
sum(is.na(observations))
[1] 23
Manipuler des séries temporelles en R

na.fill

observations
2017-01-01 NA
2017-01-02  2
2017-01-03  2
2017-01-04  2
2017-01-05  4
...
table(observations, useNA = 'ifany')
   1    2    3    4    5    6 <NA> 
  43   29   17   13    1    2   23

Graphique d'une série temporelle fictive où l'axe des ordonnées indique le nombre d'« observations » par jour. Des lacunes apparaissent à cause des valeurs NA manquantes.

Manipuler des séries temporelles en R

na.fill

observations_fill <-
  na.fill(object = observations,
          fill = 0)

table(observations_fill)
 0  1  2  3  4  5  6 
23 43 29 17 13  1  2
autoplot(observations_fill)

Version « complétée » du graphique « Observations quotidiennes » : les valeurs NA ont été remplacées par des zéros via l'imputation par remplissage constant.

Manipuler des séries temporelles en R

na.locf

autoplot(scores)
Message d'avertissement :
12 ligne(s) supprimée(s)
valeurs manquantes (geom_path).

Graphique de la série fictive « Monthly Test Scores ». La courbe s'arrête net, signe de valeurs NA manquantes après un certain point. Données fictives de 2005 à 2008 avec une tendance à la hausse. Après 2007, les valeurs manquent.

scores_locf <- na.locf(scores)
autoplot(scores_locf)

Version « complétée » du graphique « Monthly Test Scores » en utilisant LOCF (Last Observation Carried Forward). Après 2007, les valeurs sont remplacées par la dernière valeur non NA.

Manipuler des séries temporelles en R

Interpolation linéaire

na.approx()

Diapositive 1 d'une « animation » illustrant l'interpolation linéaire. Un graphique conceptuel avec axes x et y et des points sur une ligne. Un grand « trou » sépare deux ensembles : les valeurs sont NA.

Manipuler des séries temporelles en R

Interpolation linéaire

na.approx()

Diapositive 2 de l'« animation » sur l'interpolation linéaire. L'écart est comblé par une ligne rouge pointillée, reliant les deux valeurs non NA les plus proches de part et d'autre.

Manipuler des séries temporelles en R

Interpolation linéaire

na.approx()

Diapositive 3 de l'« animation » sur l'interpolation linéaire. La ligne rouge pointillée est remplacée par une ligne noire continue : les valeurs manquantes ont été estimées par interpolation linéaire.

Manipuler des séries temporelles en R

na.approx

maunaloa_approx <-
  na.approx(maunaloa_missing)

autoplot(maunaloa_approx) +
  labs(
    x = "Index",
    y = "CO2 Concentration",
    title = "Approximated Data Points"
  )

Courbe de la série de Mauna Loa où les valeurs NA ont été « comblées » par interpolation linéaire. Il est presque impossible de voir où étaient les valeurs manquantes, signe de la précision de la méthode.

Manipuler des séries temporelles en R

Passons à la pratique !

Manipuler des séries temporelles en R

Preparing Video For Download...