我正在使用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
之后的代码将无法执行...有任何想法吗?
谢谢
尼科
最佳答案
我通常使用此技巧:
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
}