Multiple examples of Machine Learning forecasting with ahead
[This article was first published on T. Moudiki's Webpage - R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
You can also read this preprint.
Install ahead in \textsf{R}
options(repos = c(
techtonique = 'https://techtonique.r-universe.dev',
CRAN = 'https://cloud.r-project.org'))
utils::install.packages("rmarkdown", repos = c(CRAN="https://cloud.r-project.org"))
utils::install.packages("remotes", repos = c(CRAN="https://cloud.r-project.org"))
utils::install.packages("forecast", repos = c(CRAN="https://cloud.r-project.org"))
utils::install.packages("fpp", repos = c(CRAN="https://cloud.r-project.org"))
utils::install.packages("ggplot2", repos = c(CRAN="https://cloud.r-project.org"))
utils::install.packages("e1071", repos = c(CRAN="https://cloud.r-project.org"))
utils::install.packages("randomForest", repos = c(CRAN="https://cloud.r-project.org"))
remotes::install_github("Techtonique/ahead")
utils::install.packages("dfoptim")
library(ahead)
library(forecast)
library(ggplot2)
library(randomForest)
library(e1071)
Use ahead::ridge2f
Use ahead::ridge2f for univariate time series forecasting
x <- fdeaths # input dataset xreg <- ahead::createtrendseason(x) # add seasonality and trend z <- ahead::ridge2f(x, xreg = xreg, h=20L) # forecasting h-steps ahead ggplot2::autoplot(z) # plot forecast

data(EuStockMarkets)
EuStocks <- ts(EuStockMarkets[1:100, ],
start = start(EuStockMarkets),
frequency = frequency(EuStockMarkets)) # original data
EuStocksLogReturns <- ahead::getreturns(EuStocks, type = "log") # obtain log-returns
res <- ahead::ridge2f(EuStocksLogReturns[, "DAX"], h = 20L,
type_pi = "movingblockbootstrap",
show_progress = FALSE)
ggplot2::autoplot(res) # plot forecast

Use ahead::dynrmf for univariate time series forecasting
- Forecasting with randomForest::randomForest
# Plotting forecasts
# With Random Forest regressor, horizon of 20,
# 95% prediction interval
fit_rf <- dynrmf(fdeaths, h=20, level=95, fit_func = randomForest::randomForest,
fit_params = list(ntree = 50), predict_func = predict)
ggplot2::autoplot(fit_rf)

Check in-sample residuals:
forecast::checkresiduals(fit_rf) Ljung-Box test data: Residuals from DynRM 1,1[12] Q* = 9.8649, df = 12, p-value = 0.6278 Model df: 0. Total lags used: 12

- Forecasting with e1071::svm (Support Vector Machines)
# With Support Vector Machine regressor, horizon of 20, # 95% prediction interval fit_svm <- ahead::dynrmf(fdeaths, h=20, level=95, fit_func = e1071::svm, fit_params = list(kernel = "linear"), predict_func = predict) ggplot2::autoplot(fit_svm)

Check in-sample residuals:
forecast::checkresiduals(fit_svm) Ljung-Box test data: Residuals from DynRM 1,1[12] Q* = 27.351, df = 12, p-value = 0.006875 Model df: 0. Total lags used: 12

- Use of an external regressor (trend)
h <- 20L
res6 <- ahead::dynrmf(AirPassengers, xreg_fit = 1:length(AirPassengers),
xreg_predict = (length(AirPassengers)+1):(length(AirPassengers)+h),
h=h)
ggplot2::autoplot(res6)

ahead::ridge2f for multivariate time series forecasting
objective_function <- function(xx)
{
ahead::loocvridge2f(fpp::insurance,
h = 20L,
type_pi="blockbootstrap",
lambda_1=10^xx[1],
lambda_2=10^xx[2],
show_progress = FALSE,
)$loocv
}
start <- proc.time()[3]
(opt <- dfoptim::nmkb(fn=objective_function,
lower=c(-10,-10),
upper=c(10,10),
par=c(0.1, 0.1)))
print(proc.time()[3]-start)
Forecasting using the optimal regularization parameters
start <- proc.time()[3]
res <- ahead::ridge2f(fpp::insurance, h = 20L,
type_pi="blockbootstrap",
B = 100L, # number of predictive simulations
lambda_1=10^opt$par[1], # 'optimal' parameters
lambda_2=10^opt$par[2]) # 'optimal' parameters
print(proc.time()[3]-start)
par(mfrow=c(2, 2))
plot(res, "Quotes", type = "sims",
main = "predictive simulations")
plot(res, "TV.advert", type = "sims",
main = "predictive simulations")
plot(res, "Quotes", type = "dist",
main = "prediction intervals")
plot(res, "TV.advert", type = "dist",
main = "prediction intervals")

To leave a comment for the author, please follow the link and comment on their blog: T. Moudiki's Webpage - R.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.