在 rstudio 中确定 nls 函数的最佳初始值

Determining the best initial values for nls function in rstudio

提问人:Farrelyto Theodorus 提问时间:7/3/2023 最后编辑:r2evansFarrelyto Theodorus 更新时间:7/3/2023 访问量:78

问:

我正在用这个给定的数据集解决我的论文问题:

x<- cbind(c(1,2,3,4,5,6,7,8,9,10,11,12,13))
y <- cbind(c(0.37, 0.25, 0.23, 0.24, 0.32, 0.23, 0.24, 0.26, 0.24, 0.26, 0.27, 0.27))

df <- data.frame('x' = x, 'y' = y)

我想拟合这两个模型 y = a + exp(b + (c*x))。我问聊天 GPT,答案让我感到困惑。它告诉我尝试使用数据 df 执行线性回归,并使用截距作为起始值 a,使用 x 作为起始值 b。

实际上,确定 nls 中初始值的正确方法或最佳方法如何?尤其是我的数据和模型?

我尝试使用数据 df 执行线性回归,并使用截距作为起始值 a,使用 x 作为起始值 b。对于起始值,假设 c 与 b 相等。

m1 <- nls(y ~ model_func1(x, a, b, c), data = df , start = list(a = -0.003033, b=0.284778, c=0.284778), trace = T)
summary(m1)

但是我总是遇到这个错误

Error in nls(y ~ model_func1(x, a, b, c), data = df,  : 
  singular gradient
R NLS

评论

1赞 7/3/2023
在您的模型中,并且是线性依赖的,这就是出现错误的原因。要了解原因,请设置 x=0 和 y=0,那么您就有了 .这意味着您可以找到 a 的任何值的合适值 b 来满足等式。你也可以发布你的代码吗?ab0=a+exp(b)model_func1()
0赞 7/3/2023
对于任何 b 的值,都存在一个合适的 a 值,而不是相反。对于 a>0,没有合适的 b 值
3赞 Rui Barradas 7/3/2023
x有 13 个数据点,只有 12 个。这是一个错误。y
1赞 Robert Hacken 7/3/2023
@Maultasche 我不认为模型系数可以线性依赖,我发现你的推理很难理解。对我来说,这个等式似乎完全可以和拟合。不过,我们确实需要看到完整的代码。

答:

2赞 G. Grothendieck 7/3/2023 #1

如注释中所述,x 和 y 的长度不同,因此 data.frame(...) 语句将不起作用。我们也不需要.假设定义是错误的,请使用如下所示的输入定义。问题中使用的起始值会起作用,但对每个参数使用起始值 1 也起作用,所以让我们使用它。(问题中的起始值稍微好一些,因为它们在 26 次迭代后导致收敛,而所有 1 的收敛值为 29,但所有 1 似乎更简单。尽管这导致了收敛,但该图显示它不能很好地拟合第一个点,因此我们尝试了所示的模型,并注意到它很容易拟合并且具有较低的偏差(= 残差平方和),并且只需要 2 个参数,而不是原始模型中的 3 个参数。cbindxlm

# input
y <- c(0.37, 0.25, 0.23, 0.24, 0.32, 0.23, 0.24, 0.26, 0.24, 0.26, 0.27, 0.27)
df <- data.frame(x = seq_along(y), y)

fo <- y ~ a + exp(b + c * x)
st <- list(a = 1, b = 1, c = 1)
fm <- nls(fo, df, start = st)
deviance(fm)
## [1] 0.01866574

通过反复试验,我们发现该模型具有更好的偏差,即较低的残差平方和,即 0.008170078 与 0.01866574,并且在最后显示的图中看起来也更合理。

# alternate model
fm2 <- lm(y ~ I(1/x^2), df)
deviance(fm2)
## [1] 0.008170078

# graphics
plot(df)
lines(fitted(fm) ~ x, df, col = "red")
lines(fitted(fm2) ~ x, df, col = "blue")
legend("topright", c("fm", "fm2"), lty = 1, col = c("red", "blue"))

screenshot

评论

0赞 Farrelyto Theodorus 7/3/2023
非常感谢您之前的回答!这对我来说非常有用。但不幸的是,当我尝试运行该程序时,我仍然遇到了这个错误 numericDeriv(form[[3L]], names(ind), env, central = nDcentral) 中的错误:评估模型时产生缺失值或无穷大 我在 macbook 中使用 rstudio 版本 2023.03.0+386