Learn R Programming

onlineforecast (version 1.0.0)

lm_optim: Optimize parameters for onlineforecast model fitted with LM

Description

Optimize parameters (transformation stage) of LM model

Usage

lm_optim(
  model,
  data,
  kseq = NA,
  scorefun = rmse,
  cachedir = "",
  cachererun = FALSE,
  printout = TRUE,
  method = "L-BFGS-B",
  ...
)

Arguments

model

The onlineforecast model, including inputs, output, kseq, p

data

The data.list including the variables used in the model.

kseq

The horizons to fit for (if not set, then model$kseq is used)

scorefun

The function to be score used for calculating the score to be optimized.

cachedir

A character specifying the path (and prefix) of the cache file name. If set to "", then no cache will be loaded or written. See https://onlineforecasting.org/vignettes/nice-tricks.html for examples.

cachererun

A logical controlling whether to run the optimization even if the cache exists.

printout

A logical determining if the score function is printed out in each iteration of the optimization.

method

The method argument for optim.

...

Additional parameters to optim

Value

Result object of optim(). Parameters resulting from the optimization can be found from result$par

Details

This is a wrapper for optim to enable easy use of bounds and caching in the optimization.

See Also

link{optim} for how to control the optimization and rls_optim which works very similarly.

Examples

Run this code
# NOT RUN {
# Take data
D <- subset(Dbuilding, c("2010-12-15", "2011-01-01"))
D$y <- D$heatload
# Define a simple model 
model <- forecastmodel$new()
model$add_inputs(Ta = "lp(Ta, a1=0.9)",
                 mu = "one()")
# Before fitting the model, define which points to include in the evaluation of the score function
D$scoreperiod <- in_range("2010-12-20", D$t)
# And the sequence of horizons to fit for
model$kseq <- 1:6

# Now we can fit the model and get the score, as it is
lm_fit(model=model, data=D, scorefun=rmse, returnanalysis=FALSE)
# Or we can change the low-pass filter coefficient
lm_fit(c(Ta__a1=0.99), model, D, rmse, returnanalysis=FALSE)

# This could be passed to optim() (or any optimizer).
# See \code{forecastmodel$insert_prm()} for more details.
optim(c(Ta__a1=0.98), lm_fit, model=model, data=D, scorefun=rmse, returnanalysis=FALSE,
      lower=c(Ta__a1=0.4), upper=c(Ta__a1=0.999), method="L-BFGS-B")

# lm_optim is simply a helper it makes using bounds easiere and enables caching of the results
# First add bounds for lambda (lower, init, upper)
model$add_prmbounds(Ta__a1 = c(0.4, 0.98, 0.999))

# Now the same optimization as above can be done by
val <- lm_optim(model, D)
val


# }

Run the code above in your browser using DataLab