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

War es hilfreich?

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
scroll top