Skip to content

[RsR] Preliminary release of functions for robust nonlinear regression

2 messages · Eduardo Conceicao, Martin Maechler

#
Hi all,

I am making available some basic code for robust nonlinear regression. 
Currently, there are available three functions for the tau-, CM-, and MTL-
estimates with a rule for the adaptive choice of coverage.

Please, keep in mind that the code is in a very initial stage. However, if you find it 
useful I want to use it, I would be delighted. License is GPL (>= 2).

I would very much appreciate comments regarding in particular (a) issues of 
statistical methodology and (b) ways of improving the code.
You can download file nonlinrobreg_0.0.1.zip from:
https://www.dropbox.com/s/1oiqiansbgzed4j/nonlinrobreg_0.0.1.zip


= A few details =
The implementation follows loosely the code of nlrob() from package 
robustbase. The approach for computing the estimates is the direct solution of 
the respective optimization problem using the Differential Evolution (DE) 
heuristic (coupled with an algorithm for dealing with constraints for the CM-
estimates).

The code uses packages PolynomF, robustbase, and ggplot2.

The methods for predict(), coef(), resid(), etc. are those developed for nlrob(). 
However, summary() is not compatible.


= Contents =
deopt.R: implementation of the jDE variant of the DE algorithm
test-funs.R: a few benchmark problems for unconstrained and constrained 
optimization
nlrobreg.R:
    nlrob.tau() (tau-estimator),
    nlrob.CM() (CM-estimator),
    nlrob.mtl() (MTL-estimator with adaptive coverage)
example_nlrobreg: example (based on the example for nlrob() from package 
robustbase)


= Running the example =
library(PolinomF)
library(robustbase)
library(ggplot2)

source(deopt.R)
source(nlrobreg.R)
#run the code from the example file

Eduardo
----------------------------------------
Eduardo L. T. Conceicao             econceicao at kanguru.pt
CIEPQPF
Department of Chemical Engineering
University of Coimbra, Portugal
#
> Hi all,
    > I am making available some basic code for robust nonlinear regression. 
    > Currently, there are available three functions for the tau-, CM-, and MTL-
    > estimates with a rule for the adaptive choice of coverage.

    > Please, keep in mind that the code is in a very initial
    > stage. However, if you find it useful I want to use it, I
    > would be delighted.

Yes, indeed, I find it very useful!
    > License is GPL (>= 2).


Good! Note that you should mention the licence, some people say,
you should do so (once) in every source file.
I think you should do it in every file where you also say
'Copyright Eduardo Conceicao'.
But of course you said things were preliminary anyway..

    > I would very much appreciate comments regarding in particular 
    > (a) issues of statistical methodology and 
    > (b) ways of improving the code.

I only have had a quick look, and __ if you know me then you
know this is always the case __  "of course" I have small ways
of improving the code, that I can communicate to you,
not in this e-mail though, rather privately.

    > You can download file nonlinrobreg_0.0.1.zip from:
    > https://www.dropbox.com/s/1oiqiansbgzed4j/nonlinrobreg_0.0.1.zip


    > = A few details =
    > The implementation follows loosely the code of nlrob() from package 
    > robustbase. The approach for computing the estimates is the direct solution of 
    > the respective optimization problem using the Differential Evolution (DE) 
    > heuristic (coupled with an algorithm for dealing with constraints for the CM-
    > estimates).

Sounds really interesting..  I didn't know that yet at all.
Interesting how you then use the polynom arithmetic (from
'PolynomF') there

    > The code uses packages PolynomF, robustbase, and ggplot2.

    > The methods for predict(), coef(), resid(), etc. are those developed for nlrob(). 
    > However, summary() is not compatible.

Yes...  I'd like to help you making them more compatible if
possible.  
To make  vcov() work may be important, too, and linked to be
able to provide a good summary().

Also, I've been changing  nlrob() in robustbase itself,
(not yet finished, committed), notably allowing it to use the new
Mpsi(), Mchi(), Mwgt() functions in the latest release of
robustbase.

Also if you look at the latest research by Manuel Koller and
Werner Stahel, you see that "the optimal Psi" function is really
not at all optimal in some situations,
and it would be nice if the new  nlrob.*() estimators could also
use different  psi/chi/rho  functions.

We can (and should) talk about these details in private e-mail
exchange I think.


    > = Contents =
    > deopt.R: implementation of the jDE variant of the DE algorithm
    > test-funs.R: a few benchmark problems for unconstrained and constrained 
    > optimization
    > nlrobreg.R:
    > nlrob.tau() (tau-estimator),
    > nlrob.CM() (CM-estimator),
    > nlrob.mtl() (MTL-estimator with adaptive coverage)
    > example_nlrobreg: example (based on the example for nlrob() from package 
    > robustbase)


    > = Running the example =
    > library(PolinomF)
    > library(robustbase)
    > library(ggplot2)

    > source(deopt.R)
    > source(nlrobreg.R)
    > #run the code from the example file

Yes indeed, and that example is really very convincing!

Thank you very much Eduardo,
for this good and important contribution to  
"robustness with R" !!

Martin Maechler,
ETH Zurich


    > Eduardo
    > ----------------------------------------
    > Eduardo L. T. Conceicao             econceicao at kanguru.pt
    > CIEPQPF
    > Department of Chemical Engineering
    > University of Coimbra, Portugal

    > _______________________________________________
    > R-SIG-Robust at r-project.org mailing list
    > https://stat.ethz.ch/mailman/listinfo/r-sig-robust