【发布时间】:2015-08-28 03:54:49
【问题描述】:
我有一个这样的数据集
df
x y
7.3006667 -0.14383333
-0.8983333 0.02133333
2.7953333 -0.07466667
我想拟合一个指数函数,例如 y = a*(exp(bx))。
这是我尝试过的,我得到的错误
f <- function(x,a,b) {a * exp(b * x)}
st <- coef(nls(log(y) ~ log(f(x, a, b)), df, start = c(a = 1, b = -1)))
Error in qr.qty(QR, resid) : NA/NaN/Inf in foreign function call (arg 5)
In addition: Warning messages:
1: In log(y) : NaNs produced
2: In log(y) : NaNs produced
fit <- nls(y ~ f(x, a, b), data = df, start = list(a = st[1], b = st[2]))
Error in nls(y ~ exp(a + b * x), data = df, start = list(a = st[1], :
singular gradient
我认为这与日志没有为负数定义的事实有关,但我不知道如何解决这个问题。
【问题讨论】:
-
听起来您遇到了模型/数据不兼容问题,而不是编程或模型融合问题。
-
如果
a是正数,那么右手边永远不会等于负数y,如果a是负数,那么右手边永远不会等于正数y所以这个模型似乎与您的数据集中具有正负 y 值的数据不一致。此外,由于y的某些组件是负数,因此无法记录y的日志。如果这确实是您的数据,建议您尝试不同的模型。 -
@G.Grothendieck 问题是我不明白我可以使用哪种模型来模拟指数..