R: Differencing Transformation

diff_vec {timetk} | R 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)
    library(timetk)

    # --- 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]
            )
        )

[Package timetk version 2.4.0 Index]