# diff_vec: Differencing Transformation In timetk: A Tool Kit for Working with Time Series

 diff_vec 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

• `step_diff()` - Recipe for `tidymodels` workflow

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

• 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.