Imputera saknade värden

Manipulera tidsseriedata i R

Harrison Brown

Graduate Researcher in Geography

Reguljära och oregelbundna tidsserier

Reguljära tidsserier:

  • Inga saknade värden eller NA
  • Jämnt avstånd mellan intervall

Verkliga problem:

  • Sensor- och utrustningsfel
  • Väderförhållanden
  • ...

Aggregering:

  • Samplar om data till lägre tidsmässig upplösning
  • Minskar informationen
  • t.ex. månadssumma av dagliga värden

Imputering:

  • Fyller i saknade värden
  • Olika metoder för att bestämma värden
Manipulera tidsseriedata i R

Imputering

Graf över en del av Mauna Loa-datamängden. Den här versionen av grafen har saknade punkter i data, vilket skapar "hål" eller glapp i linjen. Dessa hål representerar NA-värden i data.

En inzoomad version av föregående graf över Mauna Loa-datamängden. Glappen i linjediagrammet syns tydligare här.

Manipulera tidsseriedata i R

Imputera värden med zoo

na-funktioner från zoo:

  • zoo::na.fill()

  • zoo::na.locf()

  • zoo::na.approx()

Manipulera tidsseriedata i R

Identifiera saknade värden

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
Manipulera tidsseriedata i 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

Graf över en fiktiv tidsserie där y-axeln visar antal observationer per dag. Det finns glapp mellan observationerna, orsakade av saknade NA-värden i datamängden.

Manipulera tidsseriedata i 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)

En ifylld version av grafen "Dagliga observationer" – de saknade NA-värdena har ersatts med nollor med hjälp av konstant fyllningsimputering.

Manipulera tidsseriedata i R

na.locf

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

Graf över den fiktiva tidsserien "Månadsresultat". Linjen slutar abrupt, vilket indikerar att det finns saknade NA-värden från en viss punkt. Grafen visar fiktiva testresultat från 2005 till 2008 med en generell uppåtgående trend. Efter 2007 saknas värdena.

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

Ifylld version av grafen "Månadsresultat" med LOCF (Last Observation Carried Forward). Efter 2007 ersätts de saknade värdena med det senaste icke-NA-värdet.

Manipulera tidsseriedata i R

Linjär interpolering

na.approx()

Bild 1 i en "animation" som visar den konceptuella processen för linjär interpolering. Bilden visar ett konceptuellt diagram med x- och y-axlar och värden längs en linje. Det finns ett stort "glapp" mellan en grupp värden till vänster och en grupp till höger, där datavärden är NA.

Manipulera tidsseriedata i R

Linjär interpolering

na.approx()

Bild 2 i en "animation" som visar den konceptuella processen för linjär interpolering. Glappet mellan de två halvorna av data överbryggas av en röd streckad linje, vilket visar att linjär interpolering kopplar samman de två närmaste icke-NA-värdena på vardera sida om det saknade datat.

Manipulera tidsseriedata i R

Linjär interpolering

na.approx()

Bild 3 i en "animation" som visar den konceptuella processen för linjär interpolering. Den röda streckade linjen ersätts av en heldragen svart linje, vilket indikerar att de saknade värdena har ersatts med linjär interpolering.

Manipulera tidsseriedata i R

na.approx

maunaloa_approx <-
  na.approx(maunaloa_missing)

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

Graf över Mauna Loa-tidsserien där de saknade NA-värdena har fyllts i med linjär interpolering. Det är nästan omöjligt att avgöra var de saknade värdena befann sig, vilket visar hur träffsäker linjär interpolering är som imputeringsmetod.

Manipulera tidsseriedata i R

Nu kör vi en övning!

Manipulera tidsseriedata i R

Preparing Video For Download...