R: Fehler in `nls` auffangen
-
23-10-2019 - |
Frage
Ich passe einige exponentielle Daten mit Verwendung an nls
.
Der Code, den ich verwende, ist:
fit <- nls(y ~ expFit(times, A, tau, C), start = c(A=100, tau=-3, C=0))
expFit
ist definiert als
expFit <- function(t, A, tau, C)
{
expFit <- A*(exp(-t/tau))+C
}
Dies funktioniert für die meisten meiner Daten gut, für die die angegebenen Startparameter (100, -3 und 0) gut funktionieren. Manchmal habe ich jedoch Daten, die zu diesen Parametern nicht gut passt, und ich bekomme Fehler von nls
(zB "Singular Gradient" oder solche Dinge). Wie kann ich diese Fehler "fangen"?
Ich habe versucht, so etwas zu tun
fit <- NULL
fit <- nls(...)
if (is.null(fit))
{
// Try nls with other starting parameters
}
Aber das wird nicht funktionieren, weil nls
scheint die Ausführung und den Code danach zu stoppen nls
wird nicht ausführen ...
Irgendwelche Ideen?
Danke Nico
Lösung
Normalerweise benutze ich diesen Trick:
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
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow