Omsampling och aggregering av observationer

Manipulera tidsseriedata i R

Harrison Brown

Graduate Researcher in Geography

Samplingsfrekvens

Frekvens:

  • Antal observationer per år
  • t.ex. veckovis, dagligen, månadsvis, ...

Temporal upplösning:

  • "Hög upplösning" samplas ofta
  • "Låg upplösning" samplas sällan
  • "Hög" och "låg" är subjektivt

Konceptuellt diagram med två rutnät: ett med låg upplösning och ett med hög upplösning. Diagrammet illustrerar idén om data som samplas mer eller mindre frekvent.

Manipulera tidsseriedata i R

Aggregering

  • Hög upplösning -> låg upplösning
  • Tillämpar en funktion som mean, sum, max på det valda intervallet
  • t.ex.:
    • Månadsvis sum av dagliga data
    • Veckans mean av timvärden
    • ...
  • Det går inte att "ångra" aggregering
  • Månadsvis total -> dagliga värden?
  • Ger statistik för att beskriva mönster i data
  • Aggregering minskar informationsmängden
Manipulera tidsseriedata i R

Aggregera data med xts

xts:

  • eXtensible Time Series
  • Utökar paketet zoo och klassen zoo
  • Funktionerna apply.*()
yearly_mean <-
  apply.yearly(x = maunaloa,
               FUN = mean)
autoplot(yearly_mean) + 
  labs(...)

Graf över Mauna Loa-datasetet aggregerat till ett årligt medelvärde. Till skillnad från originaldata, där det förekom stor variation inom varje år, är linjen i denna graf mycket jämn eftersom samplingsupplösningen är betydligt lägre.

Manipulera tidsseriedata i R

Aggregera data med xts

Graf över tidsserien för Mauna Loa, som visar koldioxidkoncentrationer samplade veckovis. Grafen har en generell uppåtgående trend med ett periodiskt, säsongsbetonat maximum varje år.

Graf över Mauna Loa-datasetet aggregerat till ett årligt medelvärde. Till skillnad från originaldata, där det förekom stor variation inom varje år, är linjen i denna graf mycket jämn eftersom samplingsupplösningen är betydligt lägre.

Manipulera tidsseriedata i R

apply-dot-funktioner

daily_total <-
  apply.daily(hourly_sales,
              FUN = sum)
weekly_max <-
  apply.weekly(daily_temperature,
               FUN = max)
monthly_average <-
  apply.monthly(daily_price,
               FUN = mean)
apply.quarterly(sales_report,
                FUN = sum)
apply.yearly(monthly_salary,
             FUN = sum)
Manipulera tidsseriedata i R

Endpoints och period.apply

xts::endpoints()

xts::period.apply()

biweekly_eps <-
  endpoints(x = daily_data,
            on = "weeks",
            k = 2)
biweekly_data <-
  period.apply(x = daily_data,
               INDEX = biweekly_eps,
               FUN = mean)
biweekly_data
2002-05-05 8.148611
2002-05-19 8.146776
2002-06-02 8.060020
2002-06-16 8.028224
2002-06-30 7.944792
2002-07-14 7.930159
...
Manipulera tidsseriedata i R

Nu kör vi en övning!

Manipulera tidsseriedata i R

Preparing Video For Download...