Minimizing the L-q norm Family Function
lqnorm.RdMinimizes the L-q norm of residuals in a linear model.
Arguments
- qpower
A single numeric, must be greater than one, called \(q\) below. The absolute value of residuals are raised to the power of this argument, and then summed. This quantity is minimized with respect to the regression coefficients.
- link
Link function applied to the `mean' \(\mu\). See
Linksfor more details.- imethod
Must be 1, 2 or 3. See
CommonVGAMffArgumentsfor more information. Ignored ifimuis specified.- imu
Numeric, optional initial values used for the fitted values. The default is to use
imethod = 1.- ishrinkage
How much shrinkage is used when initializing the fitted values. The value must be between 0 and 1 inclusive, and a value of 0 means the individual response values are used, and a value of 1 means the median or mean is used. This argument is used in conjunction with
imethod = 3.
Details
This function minimizes the objective function
$$ \sum_{i=1}^n \; w_i (|y_i - \mu_i|)^q $$
where \(q\) is the argument qpower,
\(\eta_i = g(\mu_i)\) where \(g\) is
the link function, and
\(\eta_i\) is the vector of linear/additive predictors.
The prior weights \(w_i\) can be
inputted using the weights argument of
vlm/vglm/vgam etc.; it should
be just a vector here since this function handles only a single
vector or one-column response.
Numerical problem will occur when \(q\) is too close to one. Probably reasonable values range from 1.5 and up, say. The value \(q=2\) corresponds to ordinary least squares while \(q=1\) corresponds to the MLE of a double exponential (Laplace) distibution. The procedure becomes more sensitive to outliers the larger the value of \(q\).
Value
An object of class "vglmff"
(see vglmff-class).
The object is used by modelling functions
such as vglm,
and vgam.
References
Yee, T. W. and Wild, C. J. (1996). Vector generalized additive models. Journal of the Royal Statistical Society, Series B, Methodological, 58, 481–493.
Note
This VGAM family function is an initial attempt to
provide a more robust alternative for regression and/or offer
a little more flexibility than least squares.
The @misc slot of the fitted object contains a list
component called objectiveFunction which is the value
of the objective function at the final iteration.
Warning
Convergence failure is common, therefore the user is advised to be cautious and monitor convergence!
Examples
set.seed(123)
ldata <- data.frame(x = sort(runif(nn <- 10 )))
realfun <- function(x) 4 + 5*x
ldata <- transform(ldata, y = realfun(x) + rnorm(nn, sd = exp(-1)))
# Make the first observation an outlier
ldata <- transform(ldata, y = c(4*y[1], y[-1]), x = c(-1, x[-1]))
fit <- vglm(y ~ x, lqnorm(qpower = 1.2), data = ldata)
#> Iteration 1: coefficients = 9.8969381, -2.6531240
#> Iteration 2: coefficients = 10.5148343, -4.1442827
#> Iteration 3: coefficients = 10.4189669, -4.2858735
#> Iteration 4: coefficients = 10.4226089, -4.2980094
#> Iteration 5: coefficients = 10.4226034, -4.2980089
#> Iteration 6: coefficients = 10.4226034, -4.2980089
coef(fit, matrix = TRUE)
#> mu
#> (Intercept) 10.422603
#> x -4.298009
head(fitted(fit))
#> [,1]
#> 1 14.720612
#> 2 9.186593
#> 3 8.664817
#> 4 8.460069
#> 5 8.152801
#> 6 8.052531
fit@misc$qpower
#> [1] 1.2
fit@misc$objectiveFunction
#> [1] 28.38752
if (FALSE) { # \dontrun{
# Graphical check
with(ldata, plot(x, y,
main = paste0("LS = red, lqnorm = blue (qpower = ",
fit@misc$qpower, "), truth = black"), col = "blue"))
lmfit <- lm(y ~ x, data = ldata)
with(ldata, lines(x, fitted(fit), col = "blue"))
with(ldata, lines(x, lmfit$fitted, col = "red"))
with(ldata, lines(x, realfun(x), col = "black")) } # }