nlrob-algorithms | R Documentation |
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 |
.. |
optArgs |
a |
... |
alternative way to pass the |
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]))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.