An article in the Americal Statistician said that in S-Plus, "nls" often had convergence problems that could be solved by first using "nlminb" and then using the output of "nlminb" as starting values for "nls".
R is not S-Plus, but it's possible that "nls" may have some of the same problems in R as it does in S-Plus. R does not have "nlminb" [Ripley said in a separate context, "We do not copy defective software"], but it has "optim", which seems to be better. In particular, "optim" will estimate the Hessian, and you can compute eigenvalues of the Hessian to make sure it is positive definite before passing the output of "optim" to "nls". Or maybe you won't even need "nls".
I'm not sure, but I believe the suggestion to use "nlminb" first came from the following article:
16. McCullough, B. D. (1999), ``Assessing the reliability of statistical software: Part II'', The American Statistician, 53 , 149-159
I hope this helps. Spencer Graves
Komanduru Sai C wrote:
Hi,
df <- read.table("data.txt", header=T); library(nls); fm <- nls(y ~ a*(x+d)^(-b), df, start=list(a=max(df->y,na.rm=T)/2,b=1,d=0));
I was using the following routine which was giving Singular Gradient, Error in numericDeriv(form[[3]], names(ind), env) : Missing value or an Infinity produced when evaluating the model errors.
I also tried the below method given by Dr. Dougla Bates. But still am getting the error.
Error in numericDeriv(form[[3]], names(ind), env) : Missing value or an Infinity produced when evaluating the model
df <- read.table("data.txt", header=T);
df1 = na.omit(df[, 1:2])
library(nls);
fm = nls(y ~ (x+d)^(-exp(lb)), data = df1, start=c(lb = 0, d = 0),alg = 'plinear', trace = TRUE);
I would be glad if someone can help me.
Thanks & Regards, Sai Charan Komanduru
To: Komanduru Sai C <[EMAIL PROTECTED]>
Cc: [EMAIL PROTECTED]
Subject: Re: [R] nls
From: Douglas Bates <[EMAIL PROTECTED]>
Date: 19 Feb 2003 08:33:52 -0600
User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Common Lisp)
MIME-Version: 1.0
X-Keywords:
Komanduru Sai C <[EMAIL PROTECTED]> writes:
Hi,
I am using nls library
df <- read.table("data.txt", header=T);
library(nls);
fm <- nls(y ~ a*(x+d)^(-b), df, start=list(a=max(df->y,na.rm=T)/2,b=1,d=0));
coef(fm); q();
1) Are you sure you meant max(df->y, na.rm=TRUE) and not max(df$y, na.rm=TRUE)?
2) To begin you may want to use a data frame without the missing data df1 = na.omit(df[, 1:2])
3) Use the plinear algorithm and change from b to exp(lb)
fm = nls(y ~ (x+d)^(-exp(lb)), data = df1, start=c(lb = 0, d = 0), alg = 'plinear', trace = TRUE)
-- Douglas Bates [EMAIL PROTECTED] Statistics Department 608/262-2598 University of Wisconsin - Madison http://www.stat.wisc.edu/~bates/
______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
