Sto cercando di adattare una linea + curva esponenziale ad alcuni dati. Per cominciare, ho provato a farlo su alcuni dati artificiali. La funzione è:
nls()
funzione di R ottengo il temuto errore " matrice gradiente singolare alle stime iniziali dei parametri ", anche se uso gli stessi parametri che ho usato per generare i dati in primo luogo.Ho provato i diversi algoritmi, i diversi valori iniziali e ho cercato di utilizzare
optim
per ridurre al minimo la somma residua dei quadrati, il tutto inutilmente. Ho letto che una possibile ragione di ciò potrebbe essere una parametrizzazione eccessiva della formula, ma non penso che sia (vero?) Qualcuno ha un suggerimento per questo problema? O è solo un modello imbarazzante?
Un breve esempio:
#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)
Grazie!