Veronesi, Fabio
2010-Aug-23 15:01 UTC
[R] Fitting Weibull Model with Levenberg-Marquardt regression method
Hi, I have a problem fitting the following Weibull Model to a set of data. The model is this one: a-b*exp(-c*x^d) If I fitted the model with CurveExpert I can find a very nice set of coefficients which create a curve very close to my data, but when I use the nls.lm function in R I can't obtain the same result. My data are these: X Y 15 13 50 13 75 9 90 4 With the commercial software I obtain the following coefficients: Weibull Model: y=a-b*exp(-c*x^d) Coefficient Data: a = 1.31636909714E+001 b = 7.61325570579E+002 c = 2.82150000991E+002 d = -9.23838785044E-001 For fitting the Levenberg-Marquardt in R I'm using the following lines: pS<-list(a=1,b=1,c=1,d=1) model<-function(pS,xx){pS$a-pS$b*exp(-pS$c*xx^-pS$d)} resid<-function(observed,pS,xx){observed-model(pS,xx)} lin<-nls.lm(pS,resid,observed=Y,xx=X) Why I can't obtain the same results? Many thanks in advance, Fabio Mr. Fabio Veronesi Ph.D. student Cranfield University e-mail: f.veronesi@cranfield.ac.uk [[alternative HTML version deleted]]
Gabor Grothendieck
2010-Aug-23 19:03 UTC
[R] Fitting Weibull Model with Levenberg-Marquardt regression method
On Mon, Aug 23, 2010 at 11:01 AM, Veronesi, Fabio <f.veronesi at cranfield.ac.uk> wrote:> Hi, > I have a problem fitting the following Weibull Model to a set of data. > The model is this one: a-b*exp(-c*x^d) > If I fitted the model with CurveExpert I can find a very nice set of coefficients which create a curve very close to my data, but when I use the nls.lm function in R I can't obtain the same result. > My data are these: > X ? ? Y > 15 ? ?13 > 50 ? ?13 > 75 ? ?9 > 90 ? ?4 > > With the commercial software I obtain the following coefficients: > Weibull Model: y=a-b*exp(-c*x^d) > Coefficient Data: > a = ? ? ? ? ?1.31636909714E+001 > b = ? ? ? ? ?7.61325570579E+002 > c = ? ? ? ? ?2.82150000991E+002 > d = ? ? ? ? ?-9.23838785044E-001 > > For fitting the Levenberg-Marquardt in R I'm using the following lines: > pS<-list(a=1,b=1,c=1,d=1) > model<-function(pS,xx){pS$a-pS$b*exp(-pS$c*xx^-pS$d)} > resid<-function(observed,pS,xx){observed-model(pS,xx)} > lin<-nls.lm(pS,resid,observed=Y,xx=X) > > Why I can't obtain the same results? > Many thanks in advance, > FabioNote that you have 4 parameters and only 4 data points! You are not likely to get anything useful with that. At any rate try this noting that with alg = "plinear" you don't have to provide starting values for the linear parameters:> DF <- data.frame(X = c(15, 50, 75, 90), Y = c(13, 13, 9, 4)) > > nls(Y ~ cbind(1, exp(-c*X^d)), DF, start = list(c = 1, d = 1), alg = "plinear")Nonlinear regression model model: Y ~ cbind(1, exp(-c * X^d)) data: DF c d .lin1 .lin2 1.000e+00 1.000e+00 8.667e+00 1.417e+07 residual sum-of-squares: 40.67 Number of iterations to convergence: 0 Achieved convergence tolerance: 0
Possibly Parallel Threads
- Substitute "Object not found" with NA
- "R CMD BATCH" continue after an error in the script
- How is the Gauss-Newton method compared to Levenberg-Marquardt for curve-fitting?
- Levenberg-Marquardt algorithm
- nls(): Levenberg-Marquardt, Gauss-Newton, plinear - PI curve fitting