Estoy intentando ajustar una curva lineal+exponencial a unos datos. Para empezar, he intentado hacerlo con algunos datos artificiales. La función es: $$y=a+b\cdot r^{(x-m)}+c\cdot x$$ Se trata efectivamente de una curva exponencial con una sección lineal, así como un parámetro adicional de desplazamiento horizontal ( m ). Sin embargo, cuando utilizo la función nls()
me aparece el temido " matriz de gradiente singular en las estimaciones iniciales de los parámetros "incluso si utilizo los mismos parámetros que utilicé para generar los datos en primer lugar.
He probado los diferentes algoritmos, diferentes valores de partida y trató de utilizar optim
para minimizar la suma residual de cuadrados, todo en vano. He leído que una posible razón para esto podría ser un exceso de parametrización de la fórmula, pero no creo que sea (¿es así?)
¿Alguien tiene alguna sugerencia para este problema? ¿O se trata simplemente de un modelo incómodo?
Un breve ejemplo:
#parameters used to generate the data
reala=-3
realb=5
realc=0.5
realr=0.7
realm=1
x=1:11 #x values - I have 11 timepoint data
#linear+exponential function
y=reala + realb*realr^(x-realm) + realc*x
#add a bit of noise to avoid zero-residual data
jitter_y = jitter(y,amount=0.2)
testdat=data.frame(x,jitter_y)
#try the regression with similar starting values to the the real parameters
linexp=nls(jitter_y~a+b*r^(x-m)+c*x, data=testdat, start=list(a=-3, b=5, c=0.5, r=0.7, m=1), trace=T)
Merci !