Learn R Programming

NNS (version 10.9.2)

NNS.ARMA.optim: NNS ARMA Optimizer

Description

Wrapper function for optimizing any combination of a given seasonal.factor vector in NNS.ARMA. Minimum sum of squared errors (forecast-actual) is used to determine optimum across all NNS.ARMA methods.

Usage

NNS.ARMA.optim(
  variable,
  h = NULL,
  training.set = NULL,
  seasonal.factor,
  negative.values = FALSE,
  obj.fn = expression(mean((predicted - actual)^2)/(NNS::Co.LPM(1, predicted, actual,
    target_x = mean(predicted), target_y = mean(actual)) + NNS::Co.UPM(1, predicted,
    actual, target_x = mean(predicted), target_y = mean(actual)))),
  objective = "min",
  linear.approximation = TRUE,
  pred.int = 0.95,
  print.trace = TRUE,
  plot = FALSE
)

Value

Returns a list containing:

  • $period a vector of optimal seasonal periods

  • $weights the optimal weights of each seasonal period between an equal weight or NULL weighting

  • $obj.fn the objective function value

  • $method the method identifying which NNS.ARMA method was used.

  • $shrink whether to use the shrink parameter in NNS.ARMA.

  • $nns.regress whether to smooth the variable via NNS.reg before forecasting.

  • $bias.shift a numerical result of the overall bias of the optimum objective function result. To be added to the final result when using the NNS.ARMA with the derived parameters.

  • $errors a vector of model errors from internal calibration.

  • $results a vector of length h.

  • $lower.pred.int a vector of lower prediction intervals per forecast point.

  • $upper.pred.int a vector of upper prediction intervals per forecast point.

Arguments

variable

a numeric vector.

h

integer; NULL (default) Number of periods to forecast out of sample. If NULL, h = length(variable) - training.set.

training.set

integer; NULL (default) Sets the number of variable observations as the training set. See Note below for recommended uses.

seasonal.factor

integers; Multiple frequency integers considered for NNS.ARMA model, i.e. (seasonal.factor = c(12, 24, 36))

negative.values

logical; FALSE (default) If the variable can be negative, set to (negative.values = TRUE). It will automatically select (negative.values = TRUE) if the minimum value of the variable is negative.

obj.fn

expression; expression(cor(predicted, actual, method = "spearman") / sum((predicted - actual)^2)) (default) Rank correlation / sum of squared errors is the default objective function. Any expression(...) using the specific terms predicted and actual can be used.

objective

options: ("min", "max") "max" (default) Select whether to minimize or maximize the objective function obj.fn.

linear.approximation

logical; TRUE (default) Uses the best linear output from NNS.reg to generate a nonlinear and mixture regression for comparison. FALSE is a more exhaustive search over the objective space.

pred.int

numeric [0, 1]; 0.95 (default) Returns the associated prediction intervals for the final estimate. Constructed using the maximum entropy bootstrap NNS.meboot on the final estimates.

print.trace

logical; TRUE (default) Prints current iteration information. Suggested as backup in case of error, best parameters to that point still known and copyable!

plot

logical; FALSE (default)

Author

Fred Viole, OVVO Financial Systems

References

Viole, F. and Nawrocki, D. (2013) "Nonlinear Nonparametric Statistics: Using Partial Moments" (ISBN: 1490523995)

Examples

Run this code

## Nonlinear NNS.ARMA period optimization using 2 yearly lags on AirPassengers monthly data
if (FALSE) {
nns.optims <- NNS.ARMA.optim(AirPassengers[1:132], training.set = 120,
seasonal.factor = seq(12, 24, 6))

## To predict out of sample using best parameters:
NNS.ARMA.optim(AirPassengers[1:132], h = 12, seasonal.factor = seq(12, 24, 6))

## Incorporate any objective function from external packages (such as \code{Metrics::mape})
NNS.ARMA.optim(AirPassengers[1:132], h = 12, seasonal.factor = seq(12, 24, 6),
obj.fn = expression(Metrics::mape(actual, predicted)), objective = "min")
}

Run the code above in your browser using DataLab