Coder Social home page Coder Social logo

ggseas's Introduction

ggseas R package

seasonal adjustment on the fly extension for ggplot2

Convenience functions that let you easily do seasonal adjustment on the fly with ggplot.

Depends on the seasonal package to give you access to X13-SEATS-ARIMA.

Travis-CI Build Status CRAN version CRAN RStudio mirror downloads

Installation

Install the stable version the usual way from CRAN:

install.packages("ggseas")

or the latest version (bugs and all) from GitHub:

devtools::install_github("ellisp/ggseas/pkg")

Usage - seasonal adjustment on the fly

So far there are three types of seasonal adjustment possible to be incorporated into a usual ggplot() command, substituting for where you'd normally have geom_line().

X13-SEATS-ARIMA

library(ggseas)
## Loading required package: seasonal
## Loading required package: ggplot2
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
# make demo data with the convenience "time series to data.frame" function tsdf()
ap_df <- tsdf(AirPassengers)

# SEATS with defaults
ggplot(ap_df, aes(x = x, y = y)) +
   geom_line(colour = "grey80") +
   stat_seas() +
   ggtitle("SEATS seasonal adjustment - international airline passengers") +
   ylab("International airline passengers per month")
## Calculating starting date of 1949 from the data.
## Calculating frequency of 12 from the data.

plot of chunk unnamed-chunk-3

# X11 with no outlier treatment
ggplot(ap_df, aes(x = x, y = y)) +
   geom_line(colour = "grey80") +
   stat_seas(x13_params = list(x11 = "", outlier = NULL)) +
   ggtitle("X11 seasonal adjustment - international airline passengers") +
   ylab("International airline passengers per month")
## Calculating starting date of 1949 from the data.
## Calculating frequency of 12 from the data.

plot of chunk unnamed-chunk-3

ggplot(ldeaths_df, aes(x = YearMon, y = deaths, colour = sex)) +
   geom_point(colour = "grey50") +
   geom_line(colour = "grey50") +
   facet_wrap(~sex) +
   stat_seas(size = 2) +
   ggtitle("Seasonally adjusted lung deaths in the UK 1974 - 1979") +
   ylab("Deaths") +
   xlab("(light grey shows original data;\ncoloured line is seasonally adjusted)") +
   theme(legend.position = "none")
## Calculating starting date of 1974 from the data.
## Calculating frequency of 12 from the data.
## Calculating starting date of 1974 from the data.
## Calculating frequency of 12 from the data.

plot of chunk unnamed-chunk-3

STL (LOESS-based decomposition)

# periodic if fixed seasonality; doesn't work well:
ggplot(ap_df, aes(x = x, y = y)) +
   geom_line(colour = "grey80") +
   stat_stl(s.window = "periodic")
## Calculating frequency of 12 from the data.

plot of chunk unnamed-chunk-4

# seasonality varies a bit over time, works better:
ggplot(ap_df, aes(x = x, y = y)) +
   geom_line(colour = "grey80") +
   stat_stl(s.window = 7)
## Calculating frequency of 12 from the data.

plot of chunk unnamed-chunk-4

Classical decomposition

# default additive decomposition (doesn't work well in this case!):
ggplot(ap_df, aes(x = x, y = y)) +
   geom_line(colour = "grey80") +
   stat_decomp()
## Calculating frequency of 12 from the data.

plot of chunk unnamed-chunk-5

# multiplicative decomposition, more appropriate:
ggplot(ap_df, aes(x = x, y = y)) +
   geom_line(colour = "grey80") +
   stat_decomp(type = "multiplicative")
## Calculating frequency of 12 from the data.

plot of chunk unnamed-chunk-5

Usage - seasonal decomposition on the fly

From version 0.2.0 I introduce a summary graphic decomposition, similar to what you'd get with plot(stats::decompose(x)), but in the ggplot2 environment. As well as allowing ggplot2 look and feel of plots, you can also map a variable to the colour (or color) aesthetic, to allow two difference decompositions on the same graphic.

ggsdc(ap_df, aes(x = x, y = y), method = "decompose") +
   geom_line()
## Calculating frequency of 12 from the data.
## Warning: Removed 6 rows containing missing values (geom_path).

plot of chunk unnamed-chunk-6

ggsdc(ap_df, aes(x = x, y = y), method = "stl", s.window = 7) +
   labs(x = "", y = "Air passenger numbers") +
   geom_point()
## Calculating frequency of 12 from the data.

plot of chunk unnamed-chunk-6

ggsdc(ldeaths_df, aes(x = YearMon, y = deaths, colour = sex), method = "seas") +
      geom_line()
## Calculating starting date of 1974 from the data.
## Calculating frequency of 12 from the data.
## Calculating starting date of 1974 from the data.
## Calculating frequency of 12 from the data.

plot of chunk unnamed-chunk-6

library(scales) # for label= comma
serv <- subset(nzbop, Account == "Current account" & 
                  Category %in% c("Services; Exports total", "Services; Imports total"))

ggsdc(serv, aes(x = TimePeriod, y = Value, colour = Category),
      method = "seas", start = c(1971, 2), frequency = 4) +
   geom_line() +
   scale_y_continuous("NZ$ millions\ndecomposition by X13-SEATS-ARIMA", label = comma) +
   labs(x = "") +
   ggtitle("New Zealand services balance of payments -\ngreater seasonality in exports than imports") +
   theme_light()

plot of chunk unnamed-chunk-6

ggseas's People

Contributors

ellisp avatar

Watchers

James Cloos avatar Fernando Gonzalez Prada avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.