2014-10-20 76 views
1

我有一些看起来像对数曲线的点。 Y = A * EXP(-b * X)+ CR中的指数回归

我的代码:

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) 

输出:我正在试图获得样子曲线

Error en nlsModel(formula, mf, start, wts) : 
    singular gradient matrix at initial parameter estimates 

什么我做错了吗?

+0

尝试删除'c'变量 – Barranka 2014-10-20 21:43:03

+0

或尝试另一个'b' – thelatemail 2014-10-20 21:47:30

+0

的起点我不想删除c变量,所以这不是一个选项。我会改变b的初始值。谢谢! – M0N0NE 2014-10-20 21:48:55

回答

2

我认为在b = 0的情况下,nls无法计算关于a和c的梯度,因为b = 0会将x从等式中移除。从不同的b值开始(哎呀,我看到上面的注释)。这里的例子...

m <- nls(y ~ I(a*exp(-b*x)+c), data=df, start=list(a=max(y), b=1, c=10), trace=T) 
y_est<-predict(m,df$x) 
plot(x,y) 
lines(x,y_est) 
summary(m) 

Formula: y ~ I(a * exp(-b * x) + c) 

Parameters: 
    Estimate Std. Error t value Pr(>|t|)  
a 6.519e+04 1.761e+04 3.702 0.000776 *** 
b 6.646e-01 1.682e-01 3.952 0.000385 *** 
c 1.896e+03 1.834e+03 1.034 0.308688  
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 2863 on 33 degrees of freedom 

Number of iterations to convergence: 5 
Achieved convergence tolerance: 5.832e-06 

enter image description here

0

你没看错,但有时它更改初始值(踢)有必要进行编程求解方程。