Missing Data Imputation for Time Series
step_ts_impute creates a specification of a recipe
step that will impute time series data.
step_ts_impute(
  recipe,
  ...,
  period = 1,
  lambda = NULL,
  role = NA,
  trained = FALSE,
  lambdas_trained = NULL,
  skip = FALSE,
  id = rand_id("ts_impute")
)
## S3 method for class 'step_ts_impute'
tidy(x, ...)recipe | 
 A   | 
... | 
 One or more selector functions to choose which
variables are affected by the step. See   | 
period | 
 A seasonal period to use during the transformation. If   | 
lambda | 
 A box cox transformation parameter. If set to   | 
role | 
 Not used by this step since no new variables are created.  | 
trained | 
 A logical to indicate if the quantities for preprocessing have been estimated.  | 
lambdas_trained | 
 A named numeric vector of lambdas. This is   | 
skip | 
 A logical. Should the step be skipped when the recipe
is baked by   | 
id | 
 A character string that is unique to this step to identify it.  | 
x | 
 A   | 
The step_ts_impute() function is designed specifically to handle time series
Imputation using Linear Interpolation
Three circumstances cause strictly linear interpolation:
Period is 1: With period = 1, a seasonality cannot be interpreted and therefore linear is used.
Number of Non-Missing Values is less than 2-Periods: Insufficient values exist to detect seasonality.
Number of Total Values is less than 3-Periods: Insufficient values exist to detect seasonality.
Seasonal Imputation using Linear Interpolation
For seasonal series with period > 1, a robust Seasonal Trend Loess (STL) decomposition is first computed.
Then a linear interpolation is applied to the seasonally adjusted data, and
the seasonal component is added back.
Box Cox Transformation
In many circumstances, a Box Cox transformation can help. Especially if the series is multiplicative
meaning the variance grows exponentially. A Box Cox transformation can be automated by setting lambda = "auto"
or can be specified by setting lambda = numeric value.
An updated version of recipe with the new step
added to the sequence of existing steps (if any). For the
tidy method, a tibble with columns terms (the
selectors or variables selected) and value (the
lambda estimate).
Time Series Analysis:
 Engineered Features: step_timeseries_signature(), step_holiday_signature(), step_fourier()
 Diffs & Lags step_diff(), recipes::step_lag()
 Smoothing: step_slidify(), step_smooth()
 Variance Reduction: step_box_cox()
 Imputation: step_ts_impute(), step_ts_clean()
 Padding: step_ts_pad()
Recipe Setup and Application:
recipes::recipe()
recipes::prep()
recipes::bake()
library(tidyverse)
library(tidyquant)
library(recipes)
library(timetk)
# Get missing values
FANG_wide <- FANG %>%
    select(symbol, date, adjusted) %>%
    pivot_wider(names_from = symbol, values_from = adjusted) %>%
    pad_by_time()
FANG_wide
# Apply Imputation
recipe_box_cox <- recipe(~ ., data = FANG_wide) %>%
    step_ts_impute(FB, AMZN, NFLX, GOOG, period = 252, lambda = "auto") %>%
    prep()
recipe_box_cox %>% bake(FANG_wide)
# Lambda parameter used during imputation process
recipe_box_cox %>% tidy(1)Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.