Ontbrekende waarden imputeren

Tijdreeksgegevens bewerken in R

Harrison Brown

Graduate Researcher in Geography

Reguliere en irreguliere tijdreeksen

Reguliere tijdreeksen:

  • Geen ontbrekende of NA-waarden
  • Gelijke afstand tussen intervallen

Problemen in de praktijk:

  • Sensor- of apparaatstoring
  • Weersomstandigheden
  • ...

Aggregatie:

  • Resampled naar lagere tijdsresolutie
  • Minder detail
  • bijv. maandtotaal van dagwaarden

Imputatie:

  • Vult ontbrekende waarden aan
  • Verschillende methoden om waarden te bepalen
Tijdreeksgegevens bewerken in R

Imputatie

Grafiek van een deel van de Mauna Loa-dataset. In deze versie ontbreken punten, wat ‘gaten’ in de lijn geeft. Deze gaten zijn NA-waarden.

Ingezoomde versie van de vorige Mauna Loa-grafiek. De gaten in de lijngrafiek zijn duidelijker.

Tijdreeksgegevens bewerken in R

Waarden imputeren met zoo

na-dot-functies uit zoo:

  • zoo::na.fill()

  • zoo::na.locf()

  • zoo::na.approx()

Tijdreeksgegevens bewerken in R

Ontbrekende waarden bepalen

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
Tijdreeksgegevens bewerken in 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

Een grafiek van een fictieve tijdreeks met per dag het aantal 'observations'. Er zitten gaten tussen punten door ontbrekende NA-waarden in de dataset.

Tijdreeksgegevens bewerken in 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)

Dit is een 'opgevulde' versie van de grafiek 'Daily observations' — ontbrekende NA-waarden zijn vervangen door nullen met de methode Constant Fill.

Tijdreeksgegevens bewerken in R

na.locf

autoplot(scores)
Warning message:
Removed 12 row(s) containing
missing values (geom_path).

Grafiek van de fictieve tijdreeks 'Monthly Test Scores'. De lijn stopt abrupt: na een bepaald punt ontbreken NA-waarden. De scores lopen van 2005 tot 2008 en hebben een stijgende trend. Na 2007 ontbreken waarden.

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

‘Opgevulde’ versie van 'Monthly Test Scores' met LOCF (Last Observation Carried Forward). Na 2007 zijn waarden vervangen door de laatste niet-NA-waarde.

Tijdreeksgegevens bewerken in R

Lineaire interpolatie

na.approx()

Slide 1 van een ‘animatie’ van lineaire interpolatie. Conceptuele grafiek met x- en y-as en waarden op een lijn. Er is een grote ‘kloof’ waar de gegevens NA zijn.

Tijdreeksgegevens bewerken in R

Lineaire interpolatie

na.approx()

Slide 2 van de ‘animatie’ van lineaire interpolatie. De kloof wordt overbrugd door een rode stippellijn: verbindt de dichtstbijzijnde niet-NA-waarden aan weerszijden.

Tijdreeksgegevens bewerken in R

Lineaire interpolatie

na.approx()

Slide 3 van de ‘animatie’ van lineaire interpolatie. De rode stippellijn is vervangen door een zwarte volle lijn: de ontbrekende waarden zijn geïnterpoleerd.

Tijdreeksgegevens bewerken in R

na.approx

maunaloa_approx <-
  na.approx(maunaloa_missing)

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

Plot van de Mauna Loa-tijdreeks, waarbij ontbrekende NA-waarden zijn ‘opgevuld’ met lineaire interpolatie. Het is bijna niet te zien waar de gaten zaten — dit duidt op de nauwkeurigheid van deze imputatiemethode.

Tijdreeksgegevens bewerken in R

Laten we oefenen!

Tijdreeksgegevens bewerken in R

Preparing Video For Download...