Learn R Programming

timetk (version 2.9.0)

box_cox_vec: Box Cox Transformation

Description

This is mainly a wrapper for the BoxCox transformation from the forecast R package. The box_cox_vec() function performs the transformation. box_cox_inv_vec() inverts the transformation. auto_lambda() helps in selecting the optimal lambda value.

Usage

box_cox_vec(x, lambda = "auto", silent = FALSE)

box_cox_inv_vec(x, lambda)

auto_lambda( x, method = c("guerrero", "loglik"), lambda_lower = -1, lambda_upper = 2 )

Value

Returns a numeric vector that has been transformed.

Arguments

x

A numeric vector.

lambda

The box cox transformation parameter. If set to "auto", performs automated lambda selection using auto_lambda().

silent

Whether or not to report the automated lambda selection as a message.

method

The method used for automatic lambda selection. Either "guerrero" or "loglik".

lambda_lower

A lower limit for automatic lambda selection

lambda_upper

An upper limit for automatic lambda selection

Details

The Box Cox transformation is a power transformation that is commonly used to reduce variance of a time series.

Automatic Lambda Selection

If desired, the lambda argument can be selected using auto_lambda(), a wrapper for the Forecast R Package's forecast::BoxCox.lambda() function. Use either of 2 methods:

  1. "guerrero" - Minimizes the non-seasonal variance

  2. "loglik" - Maximizes the log-likelihood of a linear model fit to x

References

See Also

  • Box Cox Transformation: box_cox_vec()

  • Lag Transformation: lag_vec()

  • Differencing Transformation: diff_vec()

  • Rolling Window Transformation: slidify_vec()

  • Loess Smoothing Transformation: smooth_vec()

  • Fourier Series: fourier_vec()

  • Missing Value Imputation for Time Series: ts_impute_vec(), ts_clean_vec()

Other common transformations to reduce variance: log(), log1p() and sqrt()

Examples

Run this code
library(dplyr)
d10_daily <- m4_daily %>% dplyr::filter(id == "D10")

# --- VECTOR ----

value_bc <- box_cox_vec(d10_daily$value)
value    <- box_cox_inv_vec(value_bc, lambda = 1.25119350454964)

# --- MUTATE ----

m4_daily %>%
    dplyr::group_by(id) %>%
    dplyr::mutate(value_bc = box_cox_vec(value))

Run the code above in your browser using DataLab