nls(y~ alpha/(1 + exp(x - xO)/beta), 中的错误:奇异梯度

问题描述 投票:0回答:1

在 R 中使用 nls 时出现以下错误。我想将 sigmoid 函数拟合到我的数据中。 Y为0.01至1且x为0.1至-3。我使用的代码如下:

dummy_df <- data.frame(
  x = seq(0.1, -3, length.out = 50),
  y = seq(0.01, 1, length.out = 50)
)

  fit <- nls(y ~ alpha / (1 + exp(x - xO) / beta),data = dummy_df,
             start = list(alpha = 1.0009, beta = -10, xO = 0),
    control = nls.control(minFactor = 0.00001, maxiter = 10)) 

这会导致以下错误: nls(y ~ alpha/(1 + exp(x - xO)/beta) 中的错误,: 奇异梯度

r nls
1个回答
0
投票

有几个问题:

1) 参数无法识别。这就像要求解决

a+b=1
a
一样。您必须修复其中之一。
我们可以将 RHS 写为

b

并且 exp(-x0)/beta 实际上是一个参数,而不是两个。我们可以通过将 
alpha / (1 + exp(x - xO) / beta) = alpha / (1 + exp(x) * exp(-x0) / beta)

beta
固定为任意值来解决此问题。请注意,我们使用了nls2“p线性随机”算法,它允许我们摆脱线性输入的参数,这里
x0
,并且我们将
alpha
设置为-1以使参数可识别。 nls2 的 p线性随机算法使用
beta
描述的矩形内的随机值并给出最佳值。然后我们可以使用它作为
start
的起始值。

2)

起始值不好。使用如下所示的 nls2 来解决这个问题。

3)

该模型不能很好地描述数据。一些情节应该可以说服其中之一。 这是代码;然而,正如(3)中提到的,尽管我们可以得到没有错误的结果,但将这个模型拟合到这些数据上我们不会得到好的结果。

nls

© www.soinside.com 2019 - 2024. All rights reserved.