`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.*

## 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)
#> diff_vec(): Initial values: 1, 2, 3, 4
#> [1] 1 2 3 4 5 6 7 8 9 10
# --- VECTOR ----
# Get Change
1:10 %>% diff_vec()
#> diff_vec(): Initial values: 1
#> [1] NA 1 1 1 1 1 1 1 1 1
# Get Acceleration
1:10 %>% diff_vec(difference = 2)
#> diff_vec(): Initial values: 1, 2
#> [1] NA NA 0 0 0 0 0 0 0 0
# Get approximate rate of change
1:10 %>% diff_vec(log = TRUE) %>% exp() - 1
#> diff_vec(): Initial values: 1
#> [1] NA 1.0000000 0.5000000 0.3333333 0.2500000 0.2000000 0.1666667
#> [8] 0.1428571 0.1250000 0.1111111
# --- 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]
)
)
#> diff_vec(): Initial values: 2076.2
#> diff_vec(): Initial values: 1821.9
#> diff_vec(): Initial values: 9109.38
#> diff_vec(): Initial values: 5647.3
#> # A tibble: 9,743 × 5
#> # Groups: id [4]
#> id date value difference difference_inv
#> <fct> <date> <dbl> <dbl> <dbl>
#> 1 D10 2014-07-03 2076. NA 2076.
#> 2 D10 2014-07-04 2073. -2.80 2073.
#> 3 D10 2014-07-05 2049. -24.7 2049.
#> 4 D10 2014-07-06 2049. 0.200 2049.
#> 5 D10 2014-07-07 2006. -42.5 2006.
#> 6 D10 2014-07-08 2018. 11.2 2018.
#> 7 D10 2014-07-09 2019. 1.5 2019.
#> 8 D10 2014-07-10 2007. -11.7 2007.
#> 9 D10 2014-07-11 2010 2.60 2010
#> 10 D10 2014-07-12 2002. -8.5 2002.
#> # … with 9,733 more rows
#> # ℹ Use `print(n = ...)` to see more rows
```