Today, give a try to Techtonique web app, a tool designed to help you make informed, data-driven decisions using Mathematics, Statistics, Machine Learning, and Data Visualization
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")
Comments powered by Talkyard.