2010-06-03 6 views
5

Ich passe einige exponentielle Daten mit nls.R: Fangfehler in `nls`

Der Code Ich verwende ist:

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

expFit als

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

Das funktioniert gut für die meisten meiner Daten, für die die Startparameter (100, -3 und 0) gut funktionieren. Manchmal habe ich jedoch Daten, die mit diesen Parametern nicht gut gehen, und ich bekomme Fehler von nls (z. B. "singular gradient" oder solche Dinge). Wie "erfasse" ich diese Fehler?

Ich habe versucht, so etwas wie

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

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

Aber das wird nicht funktionieren zu tun, weil nls scheint die Ausführung und den Code nach nls zu stoppen nicht ausführen ...

Irgendwelche Ideen?

Dank nico

Antwort

10

ich diesen Trick in der Regel verwenden:

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 

} 
+0

Great! Genau das habe ich gebraucht! Ich habe gerade einen 'silent = "TRUE" 'Parameter hinzugefügt, um Fehler zu vermeiden. – nico

+0

@kohske Die Logik Ihrer Antwort macht Sinn. Es ist nützlich, über den 'try'-Befehl Bescheid zu wissen, aber ich habe einen nls-Anruf in der vierten Zeile Ihres Posts erwartet und bin nicht vertraut mit der Nul-Funktion, die dort erscheint. Eine schnelle Suche hat mir nicht geholfen herauszufinden, was Nul macht. Haben Sie Hinweise, wo Sie mehr darüber erfahren können? Vielleicht weiß ich nicht, welches Paket ich benötigen sollte? –

+0

@JasonWhyte Das ist nur ein Tippfehler. Ich meinte 'try (fit <- nls (...))' und fit wird NULL sein, wenn 'nls' einen Fehler verursacht. – kohske

Verwandte Themen