Dear all, I was wondering if there is any way i could do a "Grid Search" on a parameter space using R (as SAS 6.12 and higher can do it) to start the Newton-Gauss Linearization least squares method when i have NO prior information about the parameter. W. N. Venables and B. D. Ripley (2002) "Modern Applied Statistics with S", 4 th ed., page 216-7 has a topic "Self-starting non-linear regressions" using negexp.SSival - but i can not solve my hypothetical problem using that - my problem is : Y = EXP(-(THETA * t)) with data below for estimating THETA: t Y 1 0.80 4 0.45 16 0.04 Whatever i could do, is in http://www.angelfire.com/ab5/get5/nonlinear.PDF Any response / help / comment / suggestion / idea / web-link / replies will be greatly appreciated. Thanks in advance for your time. _______________________ Mohammad Ehsanul Karim <wildscop at yahoo.com> Institute of Statistical Research and Training University of Dhaka, Dhaka- 1000, Bangladesh
1. For the equation you mentioned, have you considered the following: DF <- data.frame(t.=c(1, 4, 16), Y=c(.8, .45, .04)) # I do NOT use "t" as a name, as it # may conflict with the matrix transpose function. fit0 <- lm(log(Y)~t.-1, DF) fit0 Call: lm(formula = log(Y) ~ t. - 1, data = DF) Coefficients: t. -0.2012 ################ If this is the problem you really wanted to solve AND you honestly need NONLINEAR least squares, I would expect that (-0.2) should provide a reasonable starting value for nls: > fit1 <- nls(Y~exp(-THETA*t.), data=DF, start=c(THETA=-0.2)) > fit1 Nonlinear regression model model: Y ~ exp(-THETA * t.) data: DF THETA 0.2034489 residual sum-of-squares: 0.0003018337 > 2. Alternatively, you could compute the sum of squares for all values of THETA = seq(0, .01, 100) in a loop, then find the minimum by eye. 3. If this is just a toy example, and your real problem has several parameters, "expand.grid" will produce a grid, and you can compute the value of your function and the sum of squares of residuals at every point in the grid in a single loop, etc. hope this helps. spencer graves WilDscOp wrote:> Dear all, > > I was wondering if there is any way i could do a "Grid Search" on > a parameter space using R (as SAS 6.12 and higher can do it) to start > the Newton-Gauss Linearization least squares method when i have NO > prior information about the parameter. > W. N. Venables and B. D. Ripley (2002) "Modern Applied Statistics with > S", 4 th ed., page 216-7 has a topic "Self-starting non-linear > regressions" using negexp.SSival - but i can not solve my hypothetical > problem using that - my problem is : > > Y = EXP(-(THETA * t)) with data below for estimating THETA: > > t Y > 1 0.80 > 4 0.45 > 16 0.04 > > Whatever i could do, is in > http://www.angelfire.com/ab5/get5/nonlinear.PDF > > Any response / help / comment / suggestion / idea / web-link / replies > will be greatly appreciated. > > Thanks in advance for your time. > > _______________________ > > Mohammad Ehsanul Karim <wildscop at yahoo.com> > Institute of Statistical Research and Training > University of Dhaka, Dhaka- 1000, Bangladesh > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html
WilDscOp <wildscop at yahoo.com> writes:> I was wondering if there is any way i could do a "Grid Search" > on a parameter space using R (as SAS 6.12 and higher can do it) to > start the Newton-Gauss Linearization least squares method when i have > NO prior information about the parameter. > > W. N. Venables and B. D. Ripley (2002) "Modern Applied Statistics with > S", 4 th ed., page 216-7 has a topic "Self-starting non-linear > regressions" using negexp.SSival - but i can not solve my hypothetical > problem using that - my problem is : > > > Y = EXP(-(THETA * t)) with data below for estimating THETA: > > t Y > 1 0.80 > 4 0.45 > 16 0.04 > > Whatever i could do, is in http://www.angelfire.com/ab5/get5/nonlinear.PDF > > Any response / help / comment / suggestion / idea / web-link / replies > will be greatly appreciated. > > > Thanks in advance for your time.> angel = read.table("/tmp/angelfire.dat", header = TRUE) > angelt Y 1 1 0.80 2 4 0.45 3 16 0.04> lm(log(Y) ~ t - 1, angel)Call: lm(formula = log(Y) ~ t - 1, data = angel) Coefficients: t -0.2012> fm = nls(Y~ exp(-(theta*t)), angel, c(theta = 0.2012), trace = TRUE)0.0003229897 : 0.2012 0.0003018397 : 0.2034108 0.0003018337 : 0.2034484 0.0003018337 : 0.2034489> summary(fm)Formula: Y ~ exp(-(theta * t)) Parameters: Estimate Std. Error t value Pr(>|t|) theta 0.203449 0.006002 33.90 0.00087 *** --- Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1 Residual standard error: 0.01228 on 2 degrees of freedom
Working on the same idea, Ive generated a data grid with 4 vars, two of them with its own sequence and two with fixed values. As Spencer pointed out one option is to get the values from a simple loop. My question is: How can jump from one set of starting values to the next (on the data grid) in case they cause an invalid value in the model Im evaluating? In my example, Ive 12 possible combinations of the 4 vars and in the 6th combination I get an error and the loop is terminated so what Im looking for is to skip this problem and continue from the 7th to 12th combination of starting points Ill appreciate any comment Code: data<-expand.grid(alpha=100,delta=4,beta=seq(1,2,by=0.5),gamma=seq(.1,.4 ,by=.1)) for(i in 1:12){ fit<-nls(y~delta+(alpha-delta)/(1+exp(beta*log(rate/gamma))),data=base,s tart=c(alpha=data$alpha[i],delta=data$delta[i],beta=data$beta[i],gamma=d ata$gamma[i]),trace=T) } Thanks CMora -----Original Message----- From: r-help-bounces at stat.math.ethz.ch [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Spencer Graves Sent: Wednesday, April 14, 2004 12:27 PM To: WilDscOp Cc: r-help at stat.math.ethz.ch Subject: Re: [R] Non-Linear Regression Problem 1. For the equation you mentioned, have you considered the following: DF <- data.frame(t.=c(1, 4, 16), Y=c(.8, .45, .04)) # I do NOT use "t" as a name, as it # may conflict with the matrix transpose function. fit0 <- lm(log(Y)~t.-1, DF) fit0 Call: lm(formula = log(Y) ~ t. - 1, data = DF) Coefficients: t. -0.2012 ################ If this is the problem you really wanted to solve AND you honestly need NONLINEAR least squares, I would expect that (-0.2) should provide a reasonable starting value for nls: > fit1 <- nls(Y~exp(-THETA*t.), data=DF, start=c(THETA=-0.2)) > fit1 Nonlinear regression model model: Y ~ exp(-THETA * t.) data: DF THETA 0.2034489 residual sum-of-squares: 0.0003018337 > 2. Alternatively, you could compute the sum of squares for all values of THETA = seq(0, .01, 100) in a loop, then find the minimum by eye. 3. If this is just a toy example, and your real problem has several parameters, "expand.grid" will produce a grid, and you can compute the value of your function and the sum of squares of residuals at every point in the grid in a single loop, etc. hope this helps. spencer graves WilDscOp wrote:> Dear all, > > I was wondering if there is any way i could do a "Grid Search" on > a parameter space using R (as SAS 6.12 and higher can do it) to start > the Newton-Gauss Linearization least squares method when i have NO > prior information about the parameter. > W. N. Venables and B. D. Ripley (2002) "Modern Applied Statistics with> S", 4 th ed., page 216-7 has a topic "Self-starting non-linear > regressions" using negexp.SSival - but i can not solve my hypothetical> problem using that - my problem is : > > Y = EXP(-(THETA * t)) with data below for estimating THETA: > > t Y > 1 0.80 > 4 0.45 > 16 0.04 > > Whatever i could do, is in > http://www.angelfire.com/ab5/get5/nonlinear.PDF > > Any response / help / comment / suggestion / idea / web-link / replies> will be greatly appreciated. > > Thanks in advance for your time. > > _______________________ > > Mohammad Ehsanul Karim <wildscop at yahoo.com> > Institute of Statistical Research and Training > University of Dhaka, Dhaka- 1000, Bangladesh > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html______________________________________________ R-help at stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Dear all, First of all i like to thank specially Spencer Graves and Douglas Bates for their kind help and suggestions. I estimated the parameter nicely. But, for my previous posted problem, the rational of the following line R> fit0 <- lm(log(Y)~t-1, draper.data) is not clear to me. How come this gives the initial value? Any response / help / comment / suggestion / idea / web-link / replies will be greatly appreciated. Thanks in advance for your time. _______________________ Mohammad Ehsanul Karim <wildscop at yahoo.com> Institute of Statistical Research and Training University of Dhaka, Dhaka- 1000, Bangladesh