I have a section (6.4.2) about "singular gradient" (actually singular Jacobian to numerical analysts) in my recent book "Nonlinear parameter optimization using R tools". nls() is prone to this, though having all the starting values the same in many functions can be asking for trouble of this sort, as is any function involving expm(). (If you search on R-help archives, you'll find where there is discussion of how this can result in huge timing differences in two similar methods of calculation. But that is about timing rather than computational failure.)
To avoid some of the "singular gradient" issues, try package nlmrt. Note that it's nlxb() has a slightly different call in that more arguments need to be explicitly specified. JN On 15-05-27 06:00 AM, [email protected] wrote: > Message: 34 > Date: Wed, 27 May 2015 01:23:35 +0000 > From: oussama belmejdoub <[email protected]> > To: "[email protected]" <[email protected]> > Subject: [R] nls model singular gradient matrix at initial parameter > estimates > Message-ID: <[email protected]> > Content-Type: text/plain; charset="iso-8859-1" > > Greetings, > I'm trying to use the nls function in my statistics project but I'm really > finding lot of difficulties. > I have a function called apinene_modele_prediction that calculates the > estimations: > library(expm); #exp of a matrixapinene_modele_prediction <- function(t,theta) > { x0=c(100,0,0,0,0) > A=matrix(c(-(theta[1]+theta[2]),theta[1],theta[2],0,0,0,0,0,0,0,0,0,-(theta[3]+theta[4]),theta[3],theta[4],0,0,0,0,0,0,0,theta[5],0,-theta[5]),5,5) > X=x0 for (i in t[2:length(t)]){ X=c(X,x0%*%expm(A*i)) > }return(X)} > > My "t" vector is given by: > t=seq(0,100,by=2) > And the real observations "y" ara given to us in a txt file called > "data.txt" that I have joined to this message. > So when I try to fit the "theta" in my model starting with: > theta=c(0.2,0.2,0.2,0.2,0.2) > And doing: > theta_appr > <-nls(y~apinene_modele_prediction(t,theta),start=list(theta=c(0.2,0.2,0.2,0.2,0.2))) > I always got the ERROR : singular gradient matrix at initial parameter > estimates > And, when I try: > nls(y~apinene_modele_prediction(t,c(theta,theta,theta,theta,theta)),start=list(theta=0.2)) > I got the result: Nonlinear regression model model: y ~ > apinene_modele_prediction(t, c(theta, theta, theta, theta, theta)) > data: parent.frame() theta0.04403 residual sum-of-squares: 219002 > But I need to have the elements of the theta to be different and not equal. > Thanks in advance for your help. > -------------- next part -------------- > An embedded and charset-unspecified text was scrubbed... > Name: data.txt > URL: > <https://stat.ethz.ch/pipermail/r-help/attachments/20150527/37052351/attachment-0001.txt> ______________________________________________ [email protected] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.

