Re: [R] nls diagnostics?

From: Katharine Mullen <kate_at_few.vu.nl>
Date: Mon, 26 May 2008 03:32:12 +0200 (CEST)

Dear Spencer,

I just saw your post.

If the singular gradient happens during or after iteration one (that is, not at the initial estimates), then calling summary on the nls output would give standard error estimates on the parameters useful for diagnostics. You could also call chol2inv(xx$m$Rmat()) where xx is the object returned by nls to get an estimate of the inverse of the hessian; you could use this estimate to proceed with the diagnostics you were discussing.

It would be possible (and in my opinion, desirable) to modify nls to return an object that contains the information above even if the singular gradient is at the intial estimates, but I don't think this can be accomplished without quite a few changes.

You could also use nls.lm from the package minpack.lm to get a hessian estimate.

By the way, I liked your idea from a while back (https://stat.ethz.ch/pipermail/r-devel/2008-April/048984.html) to do some diagnostics to identify problems with overparameterization automatically.

best,
Kate

On Fri, 23 May 2008, Spencer Graves wrote:

> Hi, All:
>
> What tools exist for diagnosing singular gradient problems with
> 'nls'? Consider the following toy example:
>
> DF1 <- data.frame(y=1:9, one=rep(1,9))
> nlsToyProblem <- nls(y~(a+2*b)*one, DF1, start=list(a=1, b=1),
> control=nls.control(warnOnly=TRUE))
> Error in nlsModel(formula, mf, start, wts) :
> singular gradient matrix at initial parameter estimates
>
> This example is obviously stupid, but other singular gradient
> problems are not so obvious.
>
> If we transfer this problem to 'optim', we can get diagnostics
> from an eigen analysis of the hessian:
>
> dumfun <- function(x, y, one){
> d <- y-(x[1]+2*x[2])*one
> sum(d^2)
> }
> optimToyProblem <- optim(c(a=1, b=1), dumfun, hessian=TRUE,
> y=DF1$y, one=DF1$one)
> eigen(optimToyProblem$hessian, symmetric=TRUE)
> $values
> [1] 9.000000e+01 -7.105427e-10
>
> $vectors
> [,1] [,2]
> [1,] 0.4472136 -0.8944272
> [2,] 0.8944272 0.4472136
>
> The smallest eigenvalue is essentially numerically zero relative
> to the largest,confirming the 'singular gradient' message. The
> corresponding eigenvector helps diagnose the problem: Adding (-0.9,
> 0.45)*z to any solution gives another equally good solution, for any z.
>
> I've used this technique to diagnose many subtle convergence
> problems with 'optim'. Are tools of this nature available for 'nls'?
>
> Thanks,
> Spencer Graves
>
> ______________________________________________
> R-help_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Mon 26 May 2008 - 01:35:57 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Mon 26 May 2008 - 04:30:49 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive