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.