tk_stl_diagnostics: Group-wise STL Decomposition (Season, Trend, Remainder)

View source: R/diagnostics-tk_stl_diagnostics.R

tk_stl_diagnosticsR Documentation

Group-wise STL Decomposition (Season, Trend, Remainder)


tk_stl_diagnostics() is the preprocessor for plot_stl_diagnostics(). It helps by automating frequency and trend selection.


  .frequency = "auto",
  .trend = "auto",
  .message = TRUE



A tibble or data.frame with a time-based column


A column containing either date or date-time values


A column containing numeric values


Controls the seasonal adjustment (removal of seasonality). Input can be either "auto", a time-based definition (e.g. "2 weeks"), or a numeric number of observations per frequency (e.g. 10). Refer to tk_get_frequency().


Controls the trend component. For STL, trend controls the sensitivity of the lowess smoother, which is used to remove the remainder.


A boolean. If TRUE, will output information related to automatic frequency and trend selection (if applicable).


The tk_stl_diagnostics() function generates a Seasonal-Trend-Loess decomposition. The function is "tidy" in the sense that it works on data frames and is designed to work with dplyr groups.

STL method:

The STL method implements time series decomposition using the underlying stats::stl(). The decomposition separates the "season" and "trend" components from the "observed" values leaving the "remainder".

Frequency & Trend Selection

The user can control two parameters: .frequency and .trend.

  1. The .frequency parameter adjusts the "season" component that is removed from the "observed" values.

  2. The .trend parameter adjusts the trend window (t.window parameter from stl()) that is used.

The user may supply both .frequency and .trend as time-based durations (e.g. "6 weeks") or numeric values (e.g. 180) or "auto", which automatically selects the frequency and/or trend based on the scale of the time series.


A tibble or data.frame with Observed, Season, Trend, Remainder, and Seasonally-Adjusted features



m4_daily %>%
    group_by(id) %>%
    tk_stl_diagnostics(date, box_cox_vec(value))

# ---- CUSTOM TREND ----
m4_weekly %>%
    group_by(id) %>%
    tk_stl_diagnostics(date, box_cox_vec(value), .trend = "2 quarters")

timetk documentation built on Nov. 2, 2023, 6:18 p.m.