From aff5f768228f5dbbb7507da59ee43ce1ed2f0a3a Mon Sep 17 00:00:00 2001 From: Maximilian Muecke Date: Sat, 25 Jan 2025 11:25:22 +0100 Subject: [PATCH] refactor: rename lag arg to lags --- R/ForecastLearner.R | 20 ++++++++-------- R/PipeOpFcstLag.R | 32 +++++++++++++------------- README.Rmd | 10 ++++---- README.md | 46 ++++++++++++++++++------------------- man/ForecastLearner.Rd | 8 +++---- man/mlr_pipeops_fcst.lag.Rd | 2 +- 6 files changed, 59 insertions(+), 59 deletions(-) diff --git a/R/ForecastLearner.R b/R/ForecastLearner.R index fe04107..20246ae 100644 --- a/R/ForecastLearner.R +++ b/R/ForecastLearner.R @@ -8,18 +8,18 @@ ForecastLearner = R6::R6Class("ForecastLearner", #' The learner learner = NULL, - #' @field lag (`integer()`)\cr - #' The lag - lag = NULL, + #' @field lags (`integer()`)\cr + #' The lags + lags = NULL, #' @description #' Creates a new instance of this [R6][R6::R6Class] class. #' @param task ([Task])\cr #' @param learner ([Learner])\cr - #' @param lag (`integer(1)`)\cr - initialize = function(learner, lag) { + #' @param lags (`integer(1)`)\cr + initialize = function(learner, lags) { self$learner = assert_learner(as_learner(learner, clone = TRUE)) - self$lag = assert_integerish(lag, lower = 1L, any.missing = FALSE, coerce = TRUE) + self$lags = assert_integerish(lags, lower = 1L, any.missing = FALSE, coerce = TRUE) super$initialize( id = learner$id, @@ -80,14 +80,14 @@ ForecastLearner = R6::R6Class("ForecastLearner", }, .lag_transform = function(dt, target) { - lag = self$lag - nms = sprintf("%s_lag_%i", target, lag) + lags = self$lags + nms = sprintf("%s_lag_%i", target, lags) dt = copy(dt) key_cols = private$.task$col_roles$key if (length(key_cols) > 0L) { - dt[, (nms) := shift(.SD, lag), by = key_cols, .SDcols = target] + dt[, (nms) := shift(.SD, lags), by = key_cols, .SDcols = target] } else { - dt[, (nms) := shift(.SD, lag), .SDcols = target] + dt[, (nms) := shift(.SD, lags), .SDcols = target] } dt }, diff --git a/R/PipeOpFcstLag.R b/R/PipeOpFcstLag.R index fe5496b..881d824 100644 --- a/R/PipeOpFcstLag.R +++ b/R/PipeOpFcstLag.R @@ -7,7 +7,7 @@ #' @section Parameters: #' The parameters are the parameters inherited from [mlr3pipelines::PipeOpTaskPreproc], #' as well as the following parameters: -#' * `lag` :: `integer()`\cr +#' * `lags` :: `integer()`\cr #' The lags to create. #' #' @export @@ -24,9 +24,9 @@ PipeOpFcstLag = R6Class("PipeOpFcstLag", #' otherwise be set during construction. Default `list()`. initialize = function(id = "fcst.lags", param_vals = list()) { param_set = ps( - lag = p_uty(tags = c("train", "predict"), custom_check = check_integerish) + lags = p_uty(tags = c("train", "predict"), custom_check = check_integerish) ) - param_set$set_values(lag = 1L) + param_set$set_values(lags = 1L) super$initialize( id = id, @@ -41,37 +41,37 @@ PipeOpFcstLag = R6Class("PipeOpFcstLag", private = list( .train_task = function(task) { pv = self$param_set$get_values(tags = "train") - lag = pv$lag + lags = pv$lags target = task$target_names key_cols = task$col_roles$key order_cols = task$col_roles$order dt = task$data() - self$state = list(dt = dt[(.N - max(lag)):.N]) - nms = sprintf("%s_lag_%i", target, lag) + self$state = list(dt = dt[(.N - max(lags)):.N]) + nms = sprintf("%s_lag_%i", target, lags) if (length(key_cols) > 0L) { setorderv(dt, c(key_cols, order_cols)) - dt[, (nms) := shift(.SD, lag), by = key_cols, .SDcols = target] + dt[, (nms) := shift(.SD, lags), by = key_cols, .SDcols = target] } else { setorderv(dt, order_cols) - dt[, (nms) := shift(.SD, lag), .SDcols = target] + dt[, (nms) := shift(.SD, lags), .SDcols = target] } task$select(task$feature_names)$cbind(dt) }, .predict_task = function(task) { pv = self$param_set$get_values(tags = "predict") - lag = pv$lag + lags = pv$lags target = task$target_names key_cols = task$col_roles$key order_cols = task$col_roles$order dt = rbind(self$state$dt, task$data()) - nms = sprintf("%s_lag_%i", target, lag) + nms = sprintf("%s_lag_%i", target, lags) if (length(key_cols) > 0L) { setorderv(dt, c(key_cols, order_cols)) - dt[, (nms) := shift(.SD, lag), by = key_cols, .SDcols = target] + dt[, (nms) := shift(.SD, lags), by = key_cols, .SDcols = target] } else { setorderv(dt, order_cols) - dt[, (nms) := shift(.SD, lag), .SDcols = target] + dt[, (nms) := shift(.SD, lags), .SDcols = target] } dt = dt[(.N - task$nrow + 1L):.N] task$select(task$feature_names)$cbind(dt) @@ -110,10 +110,10 @@ PipeOpFcstLag = R6Class("PipeOpFcstLag", # this wouldn't allow sorting since we don't get the task here, # as well as getting the target name pv = self$param_set$get_values() - lag = pv$lag - nms = sprintf("target_lag_%i", lag) + lags = pv$lags + nms = sprintf("target_lag_%i", lags) dt[, target := target] - dt[, (nms) := shift(.SD, lag), .SDcols = "target"] + dt[, (nms) := shift(.SD, lags), .SDcols = "target"] dt[, target := NULL] dt }, @@ -125,4 +125,4 @@ PipeOpFcstLag = R6Class("PipeOpFcstLag", ) #' @include zzz.R -register_po("fcst.lag", PipeOpFcstLag) +register_po("fcst.lags", PipeOpFcstLag) diff --git a/README.Rmd b/README.Rmd index cc8b7ec..ce975b7 100644 --- a/README.Rmd +++ b/README.Rmd @@ -254,12 +254,12 @@ library(mlr3learners) library(mlr3pipelines) task = tsk("airpassengers") -pop = po("fcst.lag", lag = 1:12) +pop = po("fcst.lag", lags = 1:12) new_task = pop$train(list(task))[[1L]] new_task$data() task = tsk("airpassengers") -graph = po("fcst.lag", lag = 1:12) %>>% +graph = po("fcst.lag", lags = 1:12) %>>% ppl("convert_types", "Date", "POSIXct") %>>% po("datefeatures", param_vals = list( @@ -295,7 +295,7 @@ trafo = po("targetmutate", ) ) -graph = po("fcst.lag", lag = 1:12) %>>% +graph = po("fcst.lag", lags = 1:12) %>>% ppl("convert_types", "Date", "POSIXct") %>>% po("datefeatures", param_vals = list( @@ -315,7 +315,7 @@ prediction$score(msr("regr.rmse")) ``` ```{r, eval = FALSE} -graph = po("fcst.lag", lag = 1:12) %>>% +graph = po("fcst.lag", lags = 1:12) %>>% ppl("convert_types", "Date", "POSIXct") %>>% po("datefeatures", param_vals = list( @@ -328,7 +328,7 @@ graph = po("fcst.lag", lag = 1:12) %>>% task = tsk("airpassengers") flrn = ForecastRecursiveLearner$new(lrn("regr.ranger")) glrn = as_learner(graph %>>% flrn) -trafo = po("fcst.targetdiff", lag = 12L) +trafo = po("fcst.targetdiff", lags = 12L) pipeline = ppl("targettrafo", graph = glrn, trafo_pipeop = trafo) glrn = as_learner(pipeline)$train(task) prediction = glrn$predict(task, 142:144) diff --git a/README.md b/README.md index 36510d3..9737540 100644 --- a/README.md +++ b/README.md @@ -99,32 +99,32 @@ prediction = flrn$predict_newdata(newdata, task) prediction #> for 3 observations: #> row_ids truth response -#> 1 NA 436.1867 -#> 2 NA 437.4089 -#> 3 NA 456.8410 +#> 1 NA 438.6738 +#> 2 NA 438.2207 +#> 3 NA 457.2237 prediction = flrn$predict(task, 142:144) prediction #> for 3 observations: #> row_ids truth response -#> 1 461 459.1495 -#> 2 390 414.8433 -#> 3 432 430.2693 +#> 1 461 456.8032 +#> 2 390 412.9617 +#> 3 432 432.0672 prediction$score(msr("regr.rmse")) #> regr.rmse -#> 14.41767 +#> 13.4766 flrn = ForecastLearner$new(lrn("regr.ranger"), 1:12) resampling = rsmp("forecast_holdout", ratio = 0.9) rr = resample(task, flrn, resampling) rr$aggregate(msr("regr.rmse")) #> regr.rmse -#> 48.97126 +#> 48.4789 resampling = rsmp("forecast_cv") rr = resample(task, flrn, resampling) rr$aggregate(msr("regr.rmse")) #> regr.rmse -#> 25.19211 +#> 25.08963 ``` Or with some feature engineering using mlr3pipelines: @@ -146,7 +146,7 @@ glrn = as_learner(graph %>>% flrn)$train(task) prediction = glrn$predict(task, 142:144) prediction$score(msr("regr.rmse")) #> regr.rmse -#> 15.58057 +#> 14.22429 ``` ### Example: forecasting electricity demand @@ -176,13 +176,13 @@ prediction = glrn$predict_newdata(newdata, task) prediction #> for 14 observations: #> row_ids truth response -#> 1 NA 187595.7 -#> 2 NA 196608.6 -#> 3 NA 189152.0 +#> 1 NA 189375.9 +#> 2 NA 199550.0 +#> 3 NA 188647.1 #> --- --- --- -#> 12 NA 222400.3 -#> 13 NA 226494.8 -#> 14 NA 226568.4 +#> 12 NA 221192.0 +#> 13 NA 225456.5 +#> 14 NA 227090.1 ``` ### Example: global forecasting (longitudinal data) @@ -220,14 +220,14 @@ flrn = ForecastLearner$new(lrn("regr.ranger"), 1:3)$train(task) prediction = flrn$predict(task, 4460:4464) prediction$score(msr("regr.rmse")) #> regr.rmse -#> 22604.48 +#> 22055.26 flrn = ForecastLearner$new(lrn("regr.ranger"), 1:3) resampling = rsmp("forecast_holdout", ratio = 0.9) rr = resample(task, flrn, resampling) rr$aggregate(msr("regr.rmse")) #> regr.rmse -#> 92125.26 +#> 92992 ``` ### Example: global vs local forecasting @@ -293,12 +293,12 @@ library(mlr3learners) library(mlr3pipelines) task = tsk("airpassengers") -pop = po("fcst.lag", lag = 1:12) +pop = po("fcst.lag", lags = 1:12) new_task = pop$train(list(task))[[1L]] new_task$data() task = tsk("airpassengers") -graph = po("fcst.lag", lag = 1:12) %>>% +graph = po("fcst.lag", lags = 1:12) %>>% ppl("convert_types", "Date", "POSIXct") %>>% po("datefeatures", param_vals = list( @@ -338,7 +338,7 @@ trafo = po("targetmutate", ) ) -graph = po("fcst.lag", lag = 1:12) %>>% +graph = po("fcst.lag", lags = 1:12) %>>% ppl("convert_types", "Date", "POSIXct") %>>% po("datefeatures", param_vals = list( @@ -358,7 +358,7 @@ prediction$score(msr("regr.rmse")) ``` ``` r -graph = po("fcst.lag", lag = 1:12) %>>% +graph = po("fcst.lag", lags = 1:12) %>>% ppl("convert_types", "Date", "POSIXct") %>>% po("datefeatures", param_vals = list( @@ -371,7 +371,7 @@ graph = po("fcst.lag", lag = 1:12) %>>% task = tsk("airpassengers") flrn = ForecastRecursiveLearner$new(lrn("regr.ranger")) glrn = as_learner(graph %>>% flrn) -trafo = po("fcst.targetdiff", lag = 12L) +trafo = po("fcst.targetdiff", lags = 12L) pipeline = ppl("targettrafo", graph = glrn, trafo_pipeop = trafo) glrn = as_learner(pipeline)$train(task) prediction = glrn$predict(task, 142:144) diff --git a/man/ForecastLearner.Rd b/man/ForecastLearner.Rd index e27dcc3..17bf6ea 100644 --- a/man/ForecastLearner.Rd +++ b/man/ForecastLearner.Rd @@ -17,8 +17,8 @@ Forecast Learner \item{\code{learner}}{(\link{Learner})\cr The learner} -\item{\code{lag}}{(\code{integer()})\cr -The lag} +\item{\code{lags}}{(\code{integer()})\cr +The lags} } \if{html}{\out{}} } @@ -51,7 +51,7 @@ The lag} \subsection{Method \code{new()}}{ Creates a new instance of this \link[R6:R6Class]{R6} class. \subsection{Usage}{ -\if{html}{\out{
}}\preformatted{ForecastLearner$new(learner, lag)}\if{html}{\out{
}} +\if{html}{\out{
}}\preformatted{ForecastLearner$new(learner, lags)}\if{html}{\out{
}} } \subsection{Arguments}{ @@ -59,7 +59,7 @@ Creates a new instance of this \link[R6:R6Class]{R6} class. \describe{ \item{\code{learner}}{(\link{Learner})\cr} -\item{\code{lag}}{(\code{integer(1)})\cr} +\item{\code{lags}}{(\code{integer(1)})\cr} \item{\code{task}}{(\link{Task})\cr} } diff --git a/man/mlr_pipeops_fcst.lag.Rd b/man/mlr_pipeops_fcst.lag.Rd index d4d2c51..8cf6b7c 100644 --- a/man/mlr_pipeops_fcst.lag.Rd +++ b/man/mlr_pipeops_fcst.lag.Rd @@ -12,7 +12,7 @@ The parameters are the parameters inherited from \link[mlr3pipelines:PipeOpTaskPreproc]{mlr3pipelines::PipeOpTaskPreproc}, as well as the following parameters: \itemize{ -\item \code{lag} :: \code{integer()}\cr +\item \code{lags} :: \code{integer()}\cr The lags to create. } }