M-estimation of the two parameters of Huber's least favourable distribution. The one parameter case is also implemented.
1 2 3
Link functions applied to the location and scale parameters.
Huber's least favourable distribution family function is popular for resistant/robust regression. The center of the distribution is normal and its tails are double exponential.
By default, the mean is the first linear/additive predictor (returned as the fitted values; this is the location parameter), and the log of the scale parameter is the second linear/additive predictor. The Fisher information matrix is diagonal; Fisher scoring is implemented.
The VGAM family function
huber1() estimates only the
location parameter. It assumes a scale parameter of unit value.
An object of class
The object is used by modelling functions such as
huber2() may be erroneous since the
first derivative is not continuous when there are two parameters
huber1() is fine in this respect.
The response should be univariate.
T. W. Yee. Help was given by Arash Ardalan.
Huber, P. J. and Ronchetti, E. (2009). Robust Statistics, 2nd ed. New York: Wiley.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
set.seed(1231); NN <- 30; coef1 <- 1; coef2 <- 10 hdata <- data.frame(x2 = sort(runif(NN))) hdata <- transform(hdata, y = rhuber(NN, mu = coef1 + coef2 * x2)) hdata$x2 <- 0.0 # Add an outlier hdata$y <- 10 fit.huber2 <- vglm(y ~ x2, huber2(imethod = 3), data = hdata, trace = TRUE) fit.huber1 <- vglm(y ~ x2, huber1(imethod = 3), data = hdata, trace = TRUE) coef(fit.huber2, matrix = TRUE) summary(fit.huber2) ## Not run: # Plot the results plot(y ~ x2, data = hdata, col = "blue", las = 1) lines(fitted(fit.huber2) ~ x2, data = hdata, col = "darkgreen", lwd = 2) fit.lm <- lm(y ~ x2, hdata) # Compare to a LM: lines(fitted(fit.lm) ~ x2, data = hdata, col = "lavender", lwd = 3) # Compare to truth: lines(coef1 + coef2 * x2 ~ x2, data = hdata, col = "orange", lwd = 2, lty = "dashed") legend("bottomright", legend = c("truth", "huber", "lm"), col = c("orange", "darkgreen", "lavender"), lty = c("dashed", "solid", "solid"), lwd = c(2, 2, 3)) ## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.