我尝试搜索了其他关于这个问题的帖子,但没有一个解决办法适用于我。我有一个自然实验的结果,并且想展示一个事件连续发生的次数符合指数分布。我的R shell代码如下:
f <- function(x,a,b) {a * exp(b * x)}
> x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27
> y
[1] 1880 813 376 161 100 61 31 9 8 2 7 4 3 2 0
[16] 1 0 0 0 0 0 1 0 0 0 0 1
> dat2
x y
1 1 1880
2 2 813
3 3 376
4 4 161
5 5 100
6 6 61
7 7 31
8 8 9
9 9 8
10 10 2
11 11 7
12 12 4
13 13 3
14 14 2
> fm <- nls(y ~ f(x,a,b), data = dat2, start = c(a=1, b=1))
Error in numericDeriv(form[[3L]], names(ind), env) :
Missing value or an infinity produced when evaluating the model
> fm <- nls(y ~ f(x,a,b), data = dat2, start = c(a=7, b=-.5))
Error in nls(y ~ f(x, a, b), data = dat2, start = c(a = 7, b = -0.5)) :
singular gradient
> fm <- nls(y ~ f(x,a,b), data = dat2, start = c(a=7,b=-.5),control=nls.control(maxiter=1000,warnOnly=TRUE,minFactor=1e-5,tol=1e-10),trace=TRUE)
4355798 : 7.0 -0.5
Warning message:
In nls(y ~ f(x, a, b), data = dat2, start = c(a = 7, b = -0.5), :
singular gradient
请原谅格式不太好,这是我在此处的第一篇文章。x包含直方图的箱子,y包含每个箱子在该直方图中出现的次数。由于0计数箱子会扰乱指数回归,dat2截止到14,而且我只需要适应那前14个。那些计数超过14的箱子,我有生物学上的理由认为它们很特殊。 最初遇到的问题是无穷大,但我并没有得到0值。按照另一篇帖子建议给出合理的初始值后,我遇到了奇异梯度错误。我看到的唯一其他帖子都有更多的变量,我尝试增加迭代次数,但没有成功。感谢您的任何帮助。
log
的动机是将其转化为log(a)
和b
线性,线性函数易于优化。 - G. Grothendieckst<-exp(coef(lm(y~x,dat2)))
,但我认为这样会导致计算中出现更多错误。 - Carl Witthoftlm
时,必须转换截距,这会增加一个步骤,这就是为什么我没有首先尝试它的原因;然而,如果对两边取对数不足以解决问题,那么下一步就是尝试lm
。 - G. Grothendieck