Main function used to fit a QRNN model or ensemble of QRNN models

Share:

Description

Function used to fit a QRNN model or ensemble of QRNN models.

Usage

1
2
3
4
5
qrnn.fit(x, y, n.hidden, tau = 0.5, n.ensemble = 1,
         iter.max = 5000, n.trials = 5, bag = FALSE,
         lower = -Inf, eps.seq = 2^(-8:-32), Th = sigmoid,
         Th.prime = sigmoid.prime, penalty = 0, trace = TRUE,
         ...)

Arguments

x

covariate matrix with number of rows equal to the number of samples and number of columns equal to the number of variables.

y

predictand column matrix with number of rows equal to the number of samples.

n.hidden

number of hidden nodes in the QRNN model.

tau

desired tau-quantile.

n.ensemble

number of ensemble members to fit.

iter.max

maximum number of iterations of the optimization algorithm.

n.trials

number of repeated trials used to avoid local minima.

bag

logical variable indicating whether or not bootstrap aggregation (bagging) should be used.

lower

left censoring point.

eps.seq

sequence of eps values for the finite smoothing algorithm; used in huber and related functions.

Th

hidden layer transfer function; use sigmoid for a nonlinear model and linear for a linear model.

Th.prime

derivative of the hidden layer transfer function Th.

penalty

weight penalty for weight decay regularization.

trace

logical variable indicating whether or not diagnostic messages are printed during optimization.

...

additional parameters passed to the nlm optimization routine.

Details

Fit a censored quantile regression neural network model for the tau-quantile by minimizing a cost function based on the Huber norm approximation to the tilted absolute value and ramp functions. Left censoring can be turned on by setting lower to a value greater than -Inf. A simplified form of the finite smoothing algorithm, in which the nlm optimization algorithm is run with values of the Huber norm eps parameter progressively reduced in magnitude over the sequence eps.seq, is used to set the QRNN weights and biases. Local minima of the cost function can be avoided by setting n.trials, which controls the number of repeated runs from different starting weights and biases, to a value greater than one.

The hidden layer transfer function Th and its derivative Th.prime should be set to sigmoid and sigmoid.prime for a nonlinear model and to linear and linear.prime for a linear model.

In the linear case, model complexity does not depend on the number of hidden nodes; the value of n.hidden is ignored and is instead set to one internally. In the nonlinear case, n.hidden controls the overall complexity of the model. As an added means of avoiding overfitting, weight penalty regularization for the magnitude of the input-hidden layer weights (excluding biases) can be applied by setting penalty to a nonzero value. (For the linear model, this penalizes both input-hidden and hidden-output layer weights, leading to a quantile ridge regression model. In this case, kernel quantile ridge regression can be performed with the aid of the qrnn.rbf function.) Finally, if the bag argument is set to TRUE, models are trained on bootstrapped x and y sample pairs; bootstrap aggregation (bagging) can be turned on by setting n.ensemble to a value greater than one. Averaging over an ensemble of bagged models will also tend to alleviate overfitting.

Note: values of x and y need not be standardized or rescaled by the user. All variables are automatically scaled to zero mean and unit standard deviation prior to fitting and parameters are automatically rescaled by qrnn.predict. Values of eps.seq are relative to the residuals in standard deviation units.

Value

a list containing elements

weights

a list containing fitted weight matrices

lower

left censoring point

eps.seq

sequence of eps values for the finite smoothing algorithm

tau

desired tau-quantile

Th

hidden layer transfer function

x.center

vector of column means for x

x.scale

vector of column standard deviations for x

y.center

vector of column means for y

y.scale

vector of column standard deviations for y

See Also

qrnn.predict, qrnn.nlm, qrnn.cost

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
data(sinc)
x <- sinc$x
y <- sinc$y
q <- sinc$tau
probs <- c(0.05, 0.50, 0.95)
 
## Fit QRNN models for 5th, 50th, and 95th percentiles

set.seed(1)
w <- p <- list()
for(i in seq_along(probs)){
    w[[i]] <- qrnn.fit(x = x, y = y, n.hidden = 4, tau = probs[i],
                       iter.max = 1000, n.trials = 1)
    p[[i]] <- qrnn.predict(x, w[[i]])
}

plot(x, y, ylim = range(pretty(c(y, q))))
matlines(x, q, lwd = 2)
matlines(x, matrix(unlist(p), nrow = nrow(x), ncol = length(p)))