Today, we examine some nontrivial use cases for ahead::dynrmf
forecasting. Indeed, the examples presented in the package’s README work quite smoothly – for randomForest::randomForest
and e1071::svm
– because:

the fitting function can handle matricial inputs (can be called as
fitting_func(x, y)
, also said to have ax/y
interface), and not only a formula input (can be called asfitting_func(y ~ ., data=df)
, the formula interface) 
the
predict
functions associated torandomForest::randomForest
ande1071::svm
do have a prototype likepredict(object, newx)
orpredict(object, newdata)
, which are both wellunderstood input formats forahead::dynrmf
.
After reading this post, you’ll know how to adjust hundreds of different Statistical/Machine Learning (ML) models to univariate time series, and you’ll get a better understanding of how ahead::dynrmf
works. If you’re not familiar with package ahead
yet, you should read the following posts first:

Forecasting with
ahead
(R version) 
Automatic Forecasting with
ahead::dynrmf
and Ridge regression (R version)
The demo uses ahead::dynrmf
in conjunction with R packages:

ranger
: random forests 
xgboost
: gradient boosted decision trees 
caret
: functions to streamline the model training process for complex regression problems.
Installing package ahead
options(repos = c(
techtonique = 'https://techtonique.runiverse.dev',
CRAN = 'https://cloud.rproject.org'))
install.packages("ahead")
Packages required for the demo
library(ahead)
library(forecast)
library(ranger)
library(xgboost)
library(caret)
library(gbm)
library(ggplot2)
Forecasting using ahead::dynrmf
’s default parameters
# ridge 
# default, with ridge regression's regularization parameter minimizing GCV
z < ahead::dynrmf(USAccDeaths, h=15, level=95)
autoplot(z)
Forecasting using ahead::dynrmf
and ranger
# ranger 
fit_func < function(x, y, ...)
{
df < data.frame(y=y, x) # naming of columns is mandatory for `predict`
ranger::ranger(y ~ ., data=df, ...)
}
predict_func < function(obj, newx)
{
colnames(newx) < paste0("X", 1:ncol(newx)) # mandatory, linked to df in fit_func
predict(object=obj, data=newx)$predictions # only accepts a named newx
}
z < ahead::dynrmf(USAccDeaths, h=15, level=95, fit_func = fit_func,
fit_params = list(num.trees = 500),
predict_func = predict_func)
autoplot(z)
Forecasting using ahead::dynrmf
and xgboost
# xgboost 
fit_func < function(x, y, ...) xgboost::xgboost(data = x, label = y, ...)
z < ahead::dynrmf(USAccDeaths, h=15, level=95, fit_func = fit_func,
fit_params = list(nrounds = 10,
verbose = FALSE),
predict_func = predict)
autoplot(z)
Forecasting using ahead::dynrmf
and gbm
through caret
’s unified interface
# caret gbm 
# unified interface, with hundreds of regression models
# https://topepo.github.io/caret/availablemodels.html
fit_func < function(x, y, ...)
{
df < data.frame(y=y, x)
caret::train(y ~ ., data=df,
method = "gbm",
trControl=caret::trainControl(method = "none"), # no cv
verbose = FALSE,
tuneGrid=data.frame(...))
}
predict_func < function(obj, newx)
{
colnames(newx) < paste0("X", 1:ncol(newx))
caret::predict.train(object=obj, newdata=newx, type = "raw")
}
z < ahead::dynrmf(USAccDeaths, h=15, level=95, fit_func = fit_func,
fit_params = list(n.trees=10, shrinkage=0.01,
interaction.depth = 1,
n.minobsinnode = 10),
predict_func = predict_func)
autoplot(z)
Forecasting using ahead::dynrmf
and glmnet
through caret
’s unified interface
# caret glmnet 
# unified interface, with hundreds of regression models
# https://topepo.github.io/caret/availablemodels.html
fit_func < function(x, y, ...)
{
df < data.frame(y=y, x)
caret::train(y ~ ., data=df,
method = "glmnet",
trControl=caret::trainControl(method = "none"), # no cv
verbose = FALSE,
tuneGrid=data.frame(...))
}
predict_func < function(obj, newx)
{
colnames(newx) < paste0("X", 1:ncol(newx))
caret::predict.train(object=obj, newdata=newx, type = "raw")
}
z < ahead::dynrmf(USAccDeaths, h=15, level=95, fit_func = fit_func,
fit_params = list(alpha=0.5, lambda=0.1),
predict_func = predict_func)
autoplot(z)