The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
The goal of trendseries is to provide a modern,
pipe-friendly interface for exploratory analysis of time series data in
conventional data.frame format.
You can install the development version of trendseries from GitHub with:
# install.packages("pak")
pak::pak("viniciusoike/trendseries")The package provides two main functions:
augment_trends(): adds trend columns
to tibbles/data.framesextract_trends(): extracts trends from
ts/xts/zoo objectsTime series have a specific structure in R (ts) and most
filtering methods are designed for ts objects. However,
datasets come as data frames with date columns, which can make applying
filters cumbersome.
The usual workflow involves (1) converting individual columns to
ts, (2) applying the filter, (3) and then converting back
to a data.frame. This can be cumbersome, especially when
working with multiple series or grouped data. Merging back the results
with the original data can also be error-prone due to misalignment of
dates and additional NA values introduced by some
filters.
trendseries aims to make this process easier by keeping
the data in a data.frame format. The example below computes
three filters (HP, STL, and moving average) on a quarterly index of
construction activity. Note that the augment_trends()
function automatically detects the frequency of the data and uses
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)
#> Computing HP filter (two-sided) with lambda = 1600
#> Computing STL trend with s.window = periodic
#> Computing 2x4-period MA (auto-adjusted for even-window centering)
series
#> # A tibble: 122 × 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. 99.7
#> 3 1995-07-01 100 102. 100. 99.6
#> 4 1995-10-01 100 103. 99.4 101.
#> 5 1996-01-01 97.8 103. 101. 102.
#> 6 1996-04-01 101. 104. 102. 103.
#> 7 1996-07-01 107. 104. 103. 104.
#> 8 1996-10-01 103. 105. 104. 106.
#> 9 1997-01-01 101. 106. 106. 109.
#> 10 1997-04-01 108. 106. 109. 111.
#> # ℹ 112 more rowsggplot(series, aes(date)) +
geom_line(aes(y = index), color = "#2c3e50", lwd = 0.6, alpha = 0.6) +
geom_line(aes(y = trend_hp), color = "#2c3e50", lwd = 1) +
labs(
title = "Construction Activity Index",
subtitle = "Trend extraction using HP Filter",
x = NULL,
y = "Index (1995 = 100)") +
theme_bw()An equivalent extract_trends() function is also
available for ts objects.
loess <- extract_trends(AirPassengers, methods = "stl")
#> Computing STL trend with s.window = periodic
plot.ts(AirPassengers)
lines(loess, col = "red")trendseries supports many trend estimation methods. The
overall goal is to support the most commonly used methods in
econometrics and statistics.
| Method | Description |
|---|---|
loess |
Local polynomial regression |
spline |
Smoothing splines |
poly |
Polynomial trends |
median |
Median filter |
stl |
Seasonal-trend decomposition |
ma |
Simple moving average |
wma |
Weighted moving average |
ewma |
Exponential weighted moving average |
kalman |
Kalman filter/smoother |
ucm |
Unobserved components model |
kernel |
Kernel smoother |
hp |
Hodrick-Prescott filter |
hamilton |
Hamilton regression filter |
bk |
Baxter-King bandpass filter |
bn |
Beveridge-Nelson decomposition |
cf |
Christiano-Fitzgerald filter |
See the vignettes for detailed examples and usage patterns: - Introduction to trendseries - Economic Filters - Moving Averages
MIT + file LICENSE
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.