Search code examples
rnon-linear-regression

Nonlinear LAD regression in R


I would like to estimate the parameters of a nonlinear regression model with LAD regression. In essence the LAD estimator is an M-estimator. As far as I know it is not possible to use the robustbase package to do this. How could I use R to do LAD regression? Could I use a standard package?


Solution

  • You could do this with the built-in optim() function

    Make up some data (make sure x is positive, so that a*x^b makes sense - raising negative numbers to fractional powers is problematic):

    set.seed(101)
    a <- 1; b <- 2
    dd <- data.frame(x=rnorm(1000,mean=7))
    dd$y <- a*dd$x^b + rnorm(1000,mean=0,sd=0.1)
    

    Define objective function:

    objfun <- function(p) {
      pred <- p[1]*dd$x^p[2]   ## a*x^b
      sum(abs(pred-dd$y))      ## least-absolute-deviation criterion
    }
    

    Test objective function:

    objfun(c(0,0))
    objfun(c(-1,-1))
    objfun(c(1,2))
    

    Optimize:

    o1 <- optim(fn=objfun, par=c(0,0), hessian=TRUE)
    

    You do need to specify starting values, and deal with any numerical/computational issues yourself ...

    I'm not sure I know how to compute standard errors: you can use sqrt(diag(solve(o1$hessian))), but I don't know if the standard theory on which this is based still applies ...