2010-06-03 9 views
5

Estoy ajustando algunos datos exponenciales usando nls.R: errores de captura en `nls`

El código que estoy usando es:

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

expFit se define como

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

Esto funciona bien para la mayoría de mis datos, para lo cual los parámetros iniciales proporcionaron (100, -3 y 0) funcionan bien. A veces, sin embargo, tengo datos que no van bien con esos parámetros y recibo errores de nls (por ejemplo, "gradiente singular" o cosas por el estilo). ¿Cómo "atrapo" estos errores?

Me trataron de hacer algo como

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

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

Pero esto no va a funcionar porque nls parece detener la ejecución y el código después de nls no ejecutará ...

¿Alguna idea?

Gracias nico

Respuesta

10

normalmente utilizo este truco:

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! ¡Eso es exactamente lo que necesitaba! Acabo de agregar un parámetro 'silent =" TRUE "' para probar, por lo que no me imprimen errores. – nico

+0

@kohske La lógica de su respuesta tiene sentido. Es útil saber sobre el comando 'try' pero esperaba una llamada nls en la línea cuatro de su publicación y no estoy familiarizado con la función nul que aparece allí. Una búsqueda rápida aquí no me ha ayudado a descubrir qué hace nul. ¿Alguna pista sobre dónde encontrar más información sobre esto? Tal vez no sé qué paquete debería requerir? –

+0

@JasonWhyte Eso es solo un error tipográfico. Quise decir 'try (fit <- nls (...))' y fit será NULL cuando 'nls' induce un error. – kohske

Cuestiones relacionadas