MM-, Tau-, CM-, and MTL- Estimators for Nonlinear Robust Regression
Compute an MM-estimator for nonlinear robust (constrained) regression.
Compute a Tau-estimator for nonlinear robust (constrained) regression.
Compute a “Constrained M” (=: CM) estimator for nonlinear robust (constrained) regression.
Compute a “Maximum Trimmed Likelihood” (=: MTL) estimator for nonlinear robust (constrained) regression.
## You can *not* call the nlrob(*, method = <M>) like this ==> see help(nlrob) ## ------- ===== ------------------------------------------ nlrob.MM(formula, data, lower, upper, tol = 1e-06, psi = c("bisquare", "lqq", "optimal", "hampel"), init = c("S", "lts"), ctrl = nlrob.control("MM", psi = psi, init = init, fnscale = NULL, tuning.chi.scale = .psi.conv.cc(psi, .Mchi.tuning.defaults[[psi]]), tuning.psi.M = .psi.conv.cc(psi, .Mpsi.tuning.defaults[[psi]]), optim.control = list(), optArgs = list(...)), ...) nlrob.tau(formula, data, lower, upper, tol = 1e-06, psi = c("bisquare", "optimal"), ctrl = nlrob.control("tau", psi = psi, fnscale = NULL, tuning.chi.scale = NULL, tuning.chi.tau = NULL, optArgs = list(...)), ...) nlrob.CM(formula, data, lower, upper, tol = 1e-06, psi = c("bisquare", "lqq", "welsh", "optimal", "hampel", "ggw"), ctrl = nlrob.control("CM", psi = psi, fnscale = NULL, tuning.chi = NULL, optArgs = list(...)), ...) nlrob.mtl(formula, data, lower, upper, tol = 1e-06, ctrl = nlrob.control("mtl", cutoff = 2.5, optArgs = list(...)), ...)
formula |
nonlinear regression |
data |
data to be used, a |
lower, upper |
bounds aka “box constraints” for all the
parameters, in the case "CM" and "mtl" these must include the error
standard deviation as Note that one of these two must be a properly “named”, e.g.,
|
tol |
numerical convergence tolerance. |
psi, init |
see |
ctrl |
a |
tuning.psi.M |
.. |
optim.control |
.. |
Copyright 2013, Eduardo L. T. Conceicao. Available under the GPL (>= 2)
Currently, all four methods use JDEoptim()
from DEoptimR, which subsamples using sample()
.
From R version 3.6.0, sample
depends on
RNGkind(*, sample.kind)
, such that exact reproducibility of
results from R versions 3.5.3 and earlier requires setting
RNGversion("3.5.0")
.
In any case, do use set.seed()
additionally for reproducibility!
an R object of class
"nlrob.<meth>"
, basically a
list with components
Eduardo L. T. Conceicao; compatibility (to nlrob
)
tweaks and generalizations, inference, by Martin Maechler.
For "MTL"
:
Maronna, Ricardo A., Martin, R. Douglas, and Yohai, Victor J. (2006).
Robust Statistics: Theory and Methods Wiley, Chichester, p. 133.
Yohai, V.J. (1987) High breakdown-point and high efficiency robust estimates for regression. The Annals of Statistics 15, 642–656.
Yohai, V.J., and Zamar, R.H. (1988). High breakdown-point estimates of regression by means of the minimization of an efficient scale. Journal of the American Statistical Association 83, 406–413.
Mendes, B.V.M., and Tyler, D.E. (1996) Constrained M-estimation for regression.
In: Robust Statistics, Data Analysis and Computer Intensive Methods, Lecture Notes in Statistics 109, Springer, New York, 299–320.
Hadi, Ali S., and Luceno, Alberto (1997). Maximum trimmed likelihood estimators: a unified approach, examples, and algorithms. Computational Statistics & Data Analysis 25, 251–272.
Gervini, Daniel, and Yohai, Victor J. (2002). A class of robust and fully efficient regression estimators. The Annals of Statistics 30, 583–616.
DNase1 <- DNase[DNase$Run == 1,] form <- density ~ Asym/(1 + exp(( xmid -log(conc) )/scal )) pnms <- c("Asym", "xmid", "scal") set.seed(47) # as these by default use randomized optimization: fMM <- robustbase:::nlrob.MM(form, data = DNase1, lower = setNames(c(0,0,0), pnms), upper = 3, ## call to nlrob.control to pass 'optim.control': ctrl = nlrob.control("MM", optim.control = list(trace = 1), optArgs = list(trace = TRUE))) ## The same via nlrob() {recommended; same random seed to necessarily give the same}: set.seed(47) gMM <- nlrob(form, data = DNase1, method = "MM", lower = setNames(c(0,0,0), pnms), upper = 3, trace = TRUE) gMM summary(gMM) ## and they are the same {apart from 'call' and 'ctrl' and new stuff in gMM}: ni <- names(fMM); ni <- ni[is.na(match(ni, c("call","ctrl")))] stopifnot(all.equal(fMM[ni], gMM[ni]))
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.