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

