I have some points that look like a logarithmic curve. The curve that I'm trying to obtain look like: y = a * exp(-b*x) + c
My code:
x <- c(1.564379666,1.924250092,2.041559879,2.198696382,2.541267447,2.666400433,2.922534874,2.965726615,3.009969443,3.248480245,3.32927682,3.371404563,3.423759668,3.713001284,3.841419166,3.847632349,3.947993339,4.024541136,4.030779671,4.118849343,4.154008445,4.284232251,4.491359108,4.585182188,4.643299476,4.643299476,4.643299476,4.684369939,4.84424144,4.867973977,5.144490521,5.324298915,5.324298915,5.988637637,6.146599422,6.674937463)
y <- c(25600,23800,11990,14900,15400,19000,9850,7500,10000,12500,11400,8950,10900,3600,11500,9990,4000,3500,4000,3000,8000,5500,6000,7900,2800,2800,2800,2950,4990,4999,3500,6001,6000,1100,1200,6000)
df <- data.frame(x, y)
m <- nls(y ~ I(a*exp(-b*x)+c), data=df, start=list(a=max(y), b=0, c=10), trace=T)
The output:
Error en nlsModel(formula, mf, start, wts) :
singular gradient matrix at initial parameter estimates
What am I doing wrong?
You're not wrong, but sometimes it's necessary to change the initial values (kick) to program solve the equation.
I think that with b = 0, then nls can't calculate the gradient with respect to a and c since b=0 removes x from the equation. Start with a different value of b (oops, I see the comment above). Here's the example...