## ----include = FALSE---------------------------------------------------------- ok <- requireNamespace("rpart", quietly = TRUE) && requireNamespace("MASS", quietly = TRUE) knitr::opts_chunk$set(collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 4, dpi = 72, out.width = "100%", eval = ok) ## ----------------------------------------------------------------------------- library(SynthesizerPlus) library(rpart) ## ----------------------------------------------------------------------------- data(Boston, package = "MASS") rmse <- function(pred, obs) sqrt(mean((pred - obs)^2)) tree <- function(f, d) rpart(f, d, control = rpart.control(cp = 0.005, minsplit = 5)) one_split <- function(seed) { set.seed(seed) idx <- sample(nrow(Boston), 60) train <- Boston[idx, ] test <- Boston[-idx, ] big <- augment_data(train, n = 2000, seed = seed) # 60 real + 2000 synthetic c(tree_real = rmse(predict(tree(medv ~ ., train), test), test$medv), tree_augmented = rmse(predict(tree(medv ~ ., big), test), test$medv), lm_real = rmse(predict(lm(medv ~ ., train), test), test$medv), lm_augmented = rmse(predict(lm(medv ~ ., big), test), test$medv)) } res <- t(sapply(1:6, one_split)) round(colMeans(res), 2) mean(res[, "tree_augmented"] < res[, "tree_real"]) ## ----fig.height = 4.5--------------------------------------------------------- set.seed(1) train <- Boston[sample(nrow(Boston), 60), ] syn <- generate(fit_synthesizer(train), n = 2000, seed = 1) plot_marginals(train, syn, vars = c("medv", "lstat", "rm", "crim")) ## ----------------------------------------------------------------------------- lags <- 12 n_train <- 48 train_ts <- window(ldeaths, end = time(ldeaths)[n_train]) all_w <- ts_windows(ldeaths, lags = lags) test_w <- all_w[(n_train - lags + 1):nrow(all_w), ] # targets in the test period forecast_rmse <- function(seed) { series <- augment_data(train_ts, nsim = 50, order = 12, seed = seed) real_w <- ts_windows(series[1], lags = lags) aug_w <- ts_windows(series, lags = lags) real_w$series <- aug_w$series <- NULL c(tree_real = rmse(predict(tree(y ~ ., real_w), test_w), test_w$y), tree_augmented = rmse(predict(tree(y ~ ., aug_w), test_w), test_w$y), lm_real = rmse(predict(lm(y ~ ., real_w), test_w), test_w$y)) } round(colMeans(t(sapply(1:6, forecast_rmse))), 1) ## ----------------------------------------------------------------------------- fit_ts <- fit_synthesizer(train_ts, order = 12) plot_acf(train_ts, generate(fit_ts, n = 2000, seed = 3), lag_max = 24)