
Last chance! 50% off unlimited learning
Sale ends in
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 = ) 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(...)),
...)
an R object of class
"nlrob.<meth>"
, basically a
list with components
nonlinear regression formula
, using both
variable names from data
and parameter names from either
lower
or upper
.
data to be used, a data.frame
bounds aka “box constraints” for all the
parameters, in the case "CM" and "mtl" these must include the error
standard deviation as "sigma"
, see nlrob()
about its names
, etc.
Note that one of these two must be a properly “named”, e.g.,
names(lower)
being a character
vector of parameter names
(used in formula
above).
numerical convergence tolerance.
see nlrob.control
.
a list
, typically the result of a call to
nlrob.control
.
..
..
a list
of optional arguments for
optimization, e.g., trace = TRUE
, passed to to the optimizer,
which currently must be JDEoptim(.)
.
alternative way to pass the optArgs
above.
Eduardo L. T. Conceicao; compatibility (to nlrob
)
tweaks and generalizations, inference, by Martin Maechler.
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!
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]))
# \dontshow{
if(doExtras <- robustbase:::doExtras()) {
gtau <- nlrob(form, data = DNase1, method = "tau",
lower = setNames(c(0,0,0), pnms), upper = 3, trace = TRUE)
## these two have "sigma" also as parameter :
psNms <- c(pnms, "sigma")
gCM <- nlrob(form, data = DNase1, method = "CM",
lower = setNames(c(0,0,0,0), psNms), upper = 3, trace = TRUE)
gmtl <- nlrob(form, data = DNase1, method = "mtl",
lower = setNames(c(0,0,0,0), psNms), upper = 3, trace = TRUE)
stopifnot(identical(sapply(list(gMM, gCM, gmtl), estimethod),
c("MM", "CM", "mtl")))
}
# }
Run the code above in your browser using DataLab