6

我正在使用nls.

我正在使用的代码是:

fit <- nls(y ~ expFit(times, A, tau, C), start = c(A=100, tau=-3, C=0))

expFit定义为

expFit <- function(t, A, tau, C)
    {
    expFit <- A*(exp(-t/tau))+C
    }

这适用于我的大多数数据,提供的起始参数(100、-3 和 0)效果很好。但是,有时我的数据与这些参数不匹配,并且我会从中得到错误nls(例如“奇异梯度”或类似的东西)。我如何“捕捉”这些错误?

我试图做类似的事情

fit <- NULL
fit <- nls(...)

if (is.null(fit))
    {
    // Try nls with other starting parameters
    }

但这不起作用,因为nls似乎停止执行并且之后的代码nls将不会执行......

有任何想法吗?

谢谢尼科

4

1 回答 1

11

我通常使用这个技巧:

params<-... # setup default params.

while(TRUE){

fit<-NULL
try(fit<-nls(...)); # does not stop in the case of error

if(!is.null(fit))break; # if nls works, then quit from the loop

params<-... # change the params for nls

}
于 2010-06-03T08:27:33.690 回答