Skip to contents

trendseries provides a unified interface to extract trends, cycles, and seasonal components from time series. Most filtering methods in R are designed for ts objects, but datasets typically come in a data.frame format with a date column, which makes applying filters cumbersome. trendseries bridges this gap: augment_trends(), decompose_series(), deseason_series(), and detrend_series() all work directly on data.frame/tibble objects, while extract_trends() provides the same methods for ts/xts/zoo objects when you need to stay in native time-series format.

Installation

trendseries is available on CRAN

install.packages("trendseries")

You can install the newest version of trendseries from R-Universe.

install.packages(
  'trendseries',
  repos = c(
    'https://viniciusoike.r-universe.dev',
    'https://cloud.r-project.org'
  )
)

Core Functions

Six core functions cover data.frame/tibble/data.table workflows.

Some functions like augment_trends() also have a ts/xts/zoo-native counterpart via extract_trends(), for workflows that stay in native time-series format.

Usage

The example below computes three filters (HP, STL, and moving average) on a quarterly index of construction activity. augment_trends() detects the frequency of the data and picks conventional defaults for the HP filter.

library(trendseries)
library(ggplot2)
data(gdp_construction)
# Computes multiple trends at once
series <- gdp_construction |>
  # Automatically detects frequency
  # Trends are added as new columns to the original dataset
  augment_trends(
    value_col = "index",
    methods = c("hp", "stl", "ma")
  )
#> Auto-detected quarterly (4 obs/year)

series
#> # A tibble: 124 × 5
#>    date       index trend_hp trend_stl trend_ma
#>    <date>     <dbl>    <dbl>     <dbl>    <dbl>
#>  1 1995-01-01 100       101.     102.      NA  
#>  2 1995-04-01 100       101.     101.      NA  
#>  3 1995-07-01 100       102.     100.      99.7
#>  4 1995-10-01 100       103.      99.4     99.6
#>  5 1996-01-01  97.8     103.     101.     101. 
#>  6 1996-04-01 101.      104.     102.     102. 
#>  7 1996-07-01 107.      104.     103.     103. 
#>  8 1996-10-01 103.      105.     104.     104. 
#>  9 1997-01-01 101.      106.     106.     106. 
#> 10 1997-04-01 108.      106.     109.     109. 
#> # ℹ 114 more rows
Construction Activity Index with the observed series and trend extracted using the Hodrick–Prescott filter.

An equivalent extract_trends() function is also available for ts objects.

stl_trend <- extract_trends(AirPassengers, methods = "stl")
#> Computing STL trend with s.window = periodic
plot.ts(AirPassengers)
lines(stl_trend, col = "#C53030")

Available Methods

The Trend Extraction Methods vignette describes each one — when to use it and which parameters it takes.

Method Description
hp Hodrick-Prescott filter
hamilton Hamilton regression filter
bn Beveridge-Nelson decomposition
ucm Unobserved components model
bk Baxter-King bandpass filter
cf Christiano-Fitzgerald bandpass filter
ma Simple moving average
wma Weighted moving average
ewma Exponentially weighted moving average
triangular Triangular moving average
median Median filter
gaussian Gaussian-weighted moving average
spencer Spencer’s 15-term moving average
henderson Henderson moving average
stl Seasonal-trend decomposition via Loess
loess Local polynomial regression
spline Smoothing splines
poly Polynomial trends
kernel Kernel smoother
kalman Kalman filter/smoother

Learn More

To learn more about the package be sure to visit the webiste

The vignettes below cover each function in detail.