我正在尝试在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))
这可能是一个简单的修复程序,但是我已经坚持了好几天,非常感谢您,任何帮助我们都表示赞赏!
答案 0 :(得分:1)
首先查看数据。很多时候,您需要提供似乎合理的起始值。
plot(y~x)
显然,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")
答案 1 :(得分:0)