Last chance! 50% off unlimited learning
Sale ends in
nlrob
fits a nonlinear regression model by robust
M-estimators, using iterated reweighted least squares (IWLS).nlrob(formula, data, start, weights = NULL, na.action = na.fail,
psi = psi.huber, test.vec = c("resid", "coef", "w"), maxit = 20,
acc = 1e-06, algorithm = "default", control = nls.control(),
trace = FALSE, ...)
## S3 method for class 'nlrob':
fitted(object, ...)
## S3 method for class 'nlrob':
residuals(object, ...)
## S3 method for class 'nlrob':
predict(object, newdata, ...)
data
, the variables are taken
from environment(formula)
, typically the environment from
which nlrob
is called.w
used in the
iterative (robust) fit). I.e.,
sum(w * e^2)
is minimized with e
= residuals,
$NA
s. The default action is for the procedure to
fail. If NAs are present, use na.exclude
to have residuals with
length == nrow(data) == le
g(x, 'tuning
constant(s)', deriv)
that for deriv=0 returns psi(x)/x and for
deriv=1 returns psi'(x). Tuning constants will be passed in via one
or several arguments, depending on the ps"resid"
(the default), for coefficients with
"coef"
, and for weights with "w"
.nls
. The default algorithm is a Gauss-Newton algorithm. The other
alternative is "plinear"
, the Golub-Pereyra algorithm for
partially linear least-squares modelsnls
.
See nls.control
for the names of the settable control
values and their effect.nls
iteration progress should be printed. Default is
FALSE
.
If TRUE
, in each robust iteration, the residual
sum-of-squares and the paramete"nlrob"
, typically
resulting from nlrob(..)
.data
, see e.g., predict.nls
."nlrob"
, also inheriting from class
"nls", (see nls
).
There methods (at least) for the generic accessor functions
summary
, coefficients
,
fitted.values
and residuals
.
It is a list with componentsnls
, rlm
.DNase1 <- DNase[ DNase$Run == 1, ]
## note that selfstarting models don't work yet % <<< FIXME !!!
##--- without conditional linearity ---
## classical
fm3DNase1 <- nls( density ~ Asym/(1 + exp(( xmid - log(conc) )/scal ) ),
data = DNase1,
start = list( Asym = 3, xmid = 0, scal = 1 ),
trace = TRUE )
summary( fm3DNase1 )
## robust
Rm3DNase1 <- nlrob(density ~ Asym/(1 + exp(( xmid - log(conc) )/scal ) ),
data = DNase1, trace = TRUE,
start = list( Asym = 3, xmid = 0, scal = 1 ))
summary( Rm3DNase1 )
##--- using conditional linearity ---
## classical
fm2DNase1 <- nls( density ~ 1/(1 + exp(( xmid - log(conc) )/scal ) ),
data = DNase1,
start = c( xmid = 0, scal = 1 ),
alg = "plinear", trace = TRUE )
summary( fm2DNase1 )
## robust
if(FALSE) { # currently fails %% FIXME error in nls's nlsModel.plinear()
frm2DNase1 <- nlrob(density ~ 1/(1 + exp(( xmid - log(conc) )/scal ) ),
data = DNase1, start = c( xmid = 0, scal = 1 ),
alg = "plinear", trace = TRUE )
summary( frm2DNase1 )
} # not yet
### -- new examples
DNase1[10,"density"] <- 2*DNase1[10,"density"]
fm3DNase1 <- nls(density ~ Asym/(1 + exp(( xmid - log(conc) )/scal ) ),
data = DNase1, trace = TRUE,
start = list( Asym = 3, xmid = 0, scal = 1 ))
## robust
Rm3DNase1 <- nlrob(density ~ Asym/(1 + exp(( xmid - log(conc) )/scal ) ),
data = DNase1, trace = TRUE,
start = list( Asym = 3, xmid = 0, scal = 1 ))
Rm3DNase1 ## summary() is not yet there {FIXME}
## utility function sfsmisc::lseq() :
lseq <- function (from, to, length)
2^seq(log2(from), log2(to), length.out = length)
## predict() {and plot}:
h.x <- lseq(min(DNase1$conc), max(DNase1$conc), length = 100)
nDat <- data.frame(conc = h.x)
h.p <- predict(fm3DNase1, newdata = nDat)# classical
h.rp <- predict(Rm3DNase1, newdata= nDat)# robust
plot(density ~ conc, data=DNase1, log="x",
main = deparse(Rm3DNase1$call$formula))
lines(h.x, h.p, col="blue")
lines(h.x, h.rp, col="magenta")
legend("topleft", c("classical nls()", "robust nlrob()"),
lwd = 1, col= c("blue", "magenta"), inset = 0.05)
Run the code above in your browser using DataLab