Я соответствую некоторому экспоненциальному использованию данных 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
не выполнится...
Какие-либо идеи?
Спасибо nico
Я обычно использую этот трюк:
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
}