Learn R Programming

Automatic forecasting and Bayesian modeling for time series

The bayesforecast package implements Bayesian estimation of structured time series models, using the Hamiltonian Monte Carlo method, implemented with Stan, a probabilistic language model in C++. The aim of this package is to provide an interface for forecasting and Bayesian modelling of the most popular time series models.

On the beta version 1.0.0, the available models are:

Additionally the forecast function is implemented for automatic forecast, by default a Generalized additive model from the prophet package is used.

Installation

This is still a beta version package, so currently installing it could be challenging, we recommend to install the current R version (R4.0) and the Rtools4.0. After that, install the package rstan, you can follow the installation procedure here.

To install the latest release version from CRAN use

install.packages("bayesforecast")

The current developmental version can be downloaded from github via:

if (!requireNamespace("remotes")) install.packages("remotes")

remotes::install_github("asael697/bayesforecast",dependencies = TRUE)

Case study: Analyzing the monthly live birth in U.S. an example

As an example, we provide a time series modelling for the monthly live births in the United States 1948-1979, published by Stoffer (2019). In figure 1 , the data has a seasonal behaviour that repeats every year. The series waves in the whole 40 years period (superior part). In addition, the partial (pacf) and auto-correlation (acf) functions are far from zero (middle part). After applying a difference to the data, the ACF and PACF plots still have some non-zero values every 12 lags (inferior part).

For start, a multiplicative Seasonal ARIMA model could give a good fit to the data, following Tsay (2010) recommendations for order selection using the auto-correlation functions, we define (p = 1, d = 1, q = 1) and for the seasonal part (P= 1, D = 1 and Q = 1). The fitted model is defined as follows

sf1 = stan_sarima(ts = birth,order = c(1,1,1),seasonal = c(1,1,1),
                  prior_mu0 = student(mu = 0,sd = 1,df = 7))

All fitted models are varstan objects, these are S3 classes with the stanfit results provided by the rstan package, and other useful elements that make the modeling process easier.

sf1
#> 
#> y ~ Sarima(1,1,1)(1,1,1)[12] 
#> 373 observations and 1 dimension 
#> Differences: 1 seasonal Differences: 1 
#> Current observations: 360 
#>  
#>              mean     se         5%        95%      ess   Rhat
#> mu0        0.0017 0.0019    -0.1973     0.2014 3358.708 0.9998
#> sigma0     7.3412 0.0043     6.9097     7.8165 3951.632 0.9998
#> ar        -0.2522 0.0013    -0.3717    -0.1176 3985.357 1.0004
#> ma        -0.0336 0.0014    -0.1853     0.0818 3928.152 1.0009
#> sar        0.0086 0.0014    -0.1515     0.1425 3982.520 1.0008
#> sma       -0.6750 0.0015    -0.7887    -0.4982 3869.922 1.0004
#> loglik -1231.6717 0.0307 -1235.4485 -1229.2336 3867.011 1.0021
#> 
#>  Samples were drawn using sampling(NUTS). For each parameter, ess
#>  is the effective sample size, and Rhat is the potential
#>  scale reduction factor on split chains (at convergence, Rhat = 1).

After fitting our model we can make a visual diagnostic of our parameters, check residuals and fitted values using the plot method. The package provides the posterior sample of every residual, but checking all of them is an exhausting task. An alternative, is checking the process generated by the residuals posterior estimate.

check_residuals(sf1)

A white noise behavior indicates a good model fit. The model’s residuals in figure 2, seems to follow a random noise, the auto-correlation in acf plots quickly falls to zero, indicating an acceptable model fit. Finally a forecast of the for the next year can be performed as:

autoplot(forecast(object = sf1,h = 12))

Automatic forecast with prophet

Automatic prediction is possible using the forecast function, by default the prediction is done using Generalized additive models from the prophet package.

library(astsa)
autoplot(object = forecast(cardox,h = 12),include = 100)

References

For further readings and references you can check:

  • Stan Development Team. 2018. Stan Modeling Language Users Guide and Reference Manual, Version 2.18.0. http://mc-stan.org

  • Forecasting: Principles and practice Monash University, Australia. Forecasting principles

  • Time Series Analysis and Its Applications, With R Examples — 4th Edition.astsa

  • facebook/prophet Quick start documentation. prophet

  • Orbit API Documentation and Examples. Orbit

Copy Link

Version

Install

install.packages('bayesforecast')

Monthly Downloads

484

Version

1.0.1

License

GPL-2

Maintainer

Asael Alonzo Matamoros

Last Published

June 17th, 2021

Functions in bayesforecast (1.0.1)

Holt

A constructor for a Holt trend state-space model.
aic

Computes posterior sample of the pointwise AIC method from a varstan object
air

Air Transport Passengers Australia
Hw

A constructor for a Holt-Winters state-space model.
Sarima

Constructor a Multiplicative Seasonal ARIMA model.
LKJ

Define a LKJ matrix prior distribution
AICc

Computes posterior sample of the pointwise corrected AIC method from a varstan object
LocalLevel

A constructor for local level state-space model.
as.stan

Convert to a stanfit object.
SVM

Constructor of an Stochastic volatility model object
beta

Define a beta prior distribution
bayesforecast-package

Bayesian Time Series Modeling with Stan.
forecast.varstan

Forecasting varstan objects
bayes_factor.varstan

Bayes Factors from Marginal Likelihoods.
fitted.varstan

Expected Values of the Posterior Predictive Distribution
autoplot.varstan

autoplot methods for varstan models.
autoplot.ts

Automatically create a ggplot for time series objects.
demgbp

DEM/GBP exchange rate log-returns
chisq

Define a chi square prior distribution
get_prior

Get the prior distribution of a model parameter
ggacf

acf plot
aust

International Tourists to Australia: Total visitor nights.
bridge_sampler.varstan

Log Marginal Likelihood via Bridge Sampling.
birth

U.S. Monthly Live Births.
gghist

Histogram with optional normal density functions
loo.varstan

Leave-one-out cross-validation
ggnorm

qqplot with normal qqline
plot.varstan

plot methods for varstan models.
get_parameters

Get parameters of a varstan object
oildata

Annual oil production in Saudi Arabia
normal

Define a normal prior distribution
jeffrey

Define a non informative Jeffrey's prior for the degree freedom hyper parameter
inverse.chisq

Define an inverse gamma prior distribution
garch

A constructor for a GARCH(s,k,h) model.
auto.sarima

Automatic estimate of a Seasonal ARIMA model
check_residuals

Visual check of residuals in a varstan object.
cauchy

Define a Cauchy prior distribution
log_lik.varstan

Extract posterior sample of the pointwise log-likelihood from a varstan object.
print.LocalLevel

Print a Local Level model
set_prior

Set a prior distribution to a model parameter.
loglik

Extract posterior sample of the accumulated log-likelihood from a varstan object
print.Hw

Print a Holt-Winter model
stan_Holt

Fitting an Holt state-space model.
ssm

A constructor for a Additive linear State space model.
stan_Hw

Fitting a Holt-Winters state-space model.
posterior_epred.varstan

Expected Values of the Posterior Predictive Distribution
report

Print a full report of the time series model in a varstan object.
residuals.varstan

Generic function and method for extract the residual of a varstan object
laplace

Define a Laplace prior distribution
predictive_error.varstan

Out-of-sample predictive errors
print.Holt

Print a Holt model
stan_LocalLevel

Fitting a Local level state-space model.
uniform

Define a uniform prior distribution
stan_SVM

Fitting a Stochastic volatility model
varstan

Constructor of a varstan object.
exponential

Define an exponential prior distribution
posterior_interval

Posterior uncertainty intervals
extract_stan

Extract chains of an stanfit object implemented in rstan package
mcmc_plot.varstan

MCMC Plots Implemented in bayesplot
print.ssm

Print a state-space model
print.varstan

Print a varstan object
print.garch

Print a garch model
bic

Computes posterior sample of the pointwise BIC method from a varstan object
model

Print the defined model of a varstan object.
naive

Naive and Random Walk models.
ggpacf

pacf plot.
inverse.gamma

Define an inverse gamma prior distribution
gamma

Define a gamma prior distribution
print.SVM

Print a Stochastic Volatility model
fourier

Fourier terms for modeling seasonality.
print.naive

Print a naive model
stan_sarima

Fitting a Multiplicative Seasonal ARIMA model.
ipc

Monthly inflation coefficients from 1980-2018.
posterior_predict.varstan

Draw from posterior predictive h steps ahead distribution
stan_naive

Naive and Random Walk models.
stan_garch

Fitting for a GARCH(s,k,h) model.
stan_ssm

Fitting an Additive linear State space model.
reexports

Objects exported from other packages
print.Sarima

Print a Sarima model
prior_summary.varstan

Generic function for extracting information about prior distributions
student

Define a t student prior distribution
summary.varstan

Summary method for a varstan object
waic.varstan

Widely Applicable Information Criterion (WAIC)