diff_vec: Differencing Transformation

View source: R/vec-diff.R

diff_vecR Documentation

Differencing Transformation

Description

diff_vec() applies a Differencing Transformation. diff_inv_vec() inverts the differencing transformation.

Usage

diff_vec(
  x,
  lag = 1,
  difference = 1,
  log = FALSE,
  initial_values = NULL,
  silent = FALSE
)

diff_inv_vec(x, lag = 1, difference = 1, log = FALSE, initial_values = NULL)

Arguments

x

A numeric vector to be differenced or inverted.

lag

Which lag (how far back) to be included in the differencing calculation.

difference

The number of differences to perform.

  • 1 Difference is equivalent to measuring period change.

  • 2 Differences is equivalent to measuring period acceleration.

log

If log differences should be calculated. Note that difference inversion of a log-difference is approximate.

initial_values

Only used in the diff_vec_inv() operation. A numeric vector of the initial values, which are used to invert differences. This vector is the original values that are the length of the NA missing differences.

silent

Whether or not to report the initial values used to invert the difference as a message.

Details

Benefits:

This function is NA padded by default so it works well with dplyr::mutate() operations.

Difference Calculation

Single differencing, diff_vec(x_t) is equivalent to: x_t - x_t1, where the subscript _t1 indicates the first lag. This transformation can be interpereted as change.

Double Differencing Calculation

Double differencing, diff_vec(x_t, difference = 2) is equivalent to: ⁠(x_t - x_t1) - (x_t - x_t1)_t1⁠, where the subscript _t1 indicates the first lag. This transformation can be interpereted as acceleration.

Log Difference Calculation

Log differencing, diff_vec(x_t, log = TRUE) is equivalent to: log(x_t) - log(x_t1) = log(x_t / x_t1), where x_t is the series and x_t1 is the first lag.

The 1st difference diff_vec(difference = 1, log = TRUE) has an interesting property where diff_vec(difference = 1, log = TRUE) %>% exp() is approximately 1 + rate of change.

Value

A numeric vector

See Also

Advanced Differencing and Modeling:

  • step_diff() - Recipe for tidymodels workflow

  • tk_augment_differences() - Adds many differences to a data.frame (tibble)

Additional Vector Functions:

  • 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()

Examples

library(dplyr)

# --- USAGE ----

diff_vec(1:10, lag = 2, difference = 2) %>%
    diff_inv_vec(lag = 2, difference = 2, initial_values = 1:4)

# --- VECTOR ----

# Get Change
1:10 %>% diff_vec()

# Get Acceleration
1:10 %>% diff_vec(difference = 2)

# Get approximate rate of change
1:10 %>% diff_vec(log = TRUE) %>% exp() - 1


# --- MUTATE ----

m4_daily %>%
    group_by(id) %>%
    mutate(difference = diff_vec(value, lag = 1)) %>%
    mutate(
        difference_inv = diff_inv_vec(
            difference,
            lag = 1,
            # Add initial value to calculate the inverse difference
            initial_values = value[1]
        )
    )




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