R中的非线性回归:奇异梯度

时间:2018-11-06 21:47:49

标签: r regression exponential

我正在尝试在R中进行指数回归,但我不断收到此错误

  

nls(y〜a * exp(b * x),data = DF,start = list(a = -10,b = -10))中的错误:奇异梯度

我正在使用的数据和代码是:

 x <-c(0.00, 6.40, 8.61, 15.20, 28.10, 42.60, 66.70, 73.00, 73.00, 85.00, 88.00, 88.00, 88.00, 88.00, 88.00, 88.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 102.00, 102.00, 102.00, 102.00, 102.00, 160.00, 160.00, 169.00, 320.00, 320.00, 320.00, 432.00, 432.00)

y <- c(6.52, 1.95, 1.51, 1.94, 3.04, 1.81, 2.07, 0.88, 1.59, 1.18, 0.47, 0.69, 0.90, 1.27, 0.94, 1.84, 0.71, 1.30, 0.50, 1.09, 0.69, 4.07, 0.68, 0.91, 0.64, 0.97,  0.99,  1.34, 0.82, 0.34, 0.39, 1.14, 0.90, 0.36, 0.86, 0.59, 0.36, 1.14, 1.09, 1.81)

DF <- data.frame(x,y)
m <- nls(y ~  a*exp(b*x), data = DF, start=list(a=-10, b=-10)) 

这可能是一个简单的修复程序,但是我已经坚持了好几天,非常感谢您,任何帮助我们都表示赞赏!

2 个答案:

答案 0 :(得分:1)

首先查看数据。很多时候,您需要提供似乎合理的起始值。

plot(y~x)

enter image description here

显然,a为正,b为负。此外,较长的“时间尺度”(我认为是从生存分析的角度来看)将需要相当小的b

 m <- nls(y ~  a*exp(b*x), data = DF, start=list(a=-1, b=-.1) ) 
> m
Nonlinear regression model
  model: y ~ a * exp(b * x)
   data: DF
      a       b 
 3.5092 -0.0128 
 residual sum-of-squares: 33.85

Number of iterations to convergence: 18 
Achieved convergence tolerance: 5.09e-06

通过以下方式向曲线添加曲线:

  curve(  3.5*exp(-0.0128*x),add=TRUE, col="blue")

enter image description here

答案 1 :(得分:0)

我无法在评论中放置图片,因此请将其放在此处。当我用数据散点图建议的偏移量“ a * exp(b * x)+偏移量”拟合您的数据时,我得到的R平方= 0.584和RMSE似乎更合适= 0.714(来自拟合参数a = 5.3702154953394219E + 00,b = -2.7909919440915620E-01,偏移= 1.1363689273642967E + 00 offset version