Начальное значение градиента R nls - PullRequest
0 голосов
/ 31 октября 2019

У меня проблема при настройке функции через nls

Это данные:

size<-c(0.0020,0.0063,0.0200,0.0630,0.1250,0.2000,0.6300,2.0000)
cum<-c(6.4,7.1,7.6,37.5,83.0,94.5,99.9,100.0)

Я хочу подогнать модель Gompertz к ней. Для этого я попытался:

start<-c(alpha =100, beta = 10, k = 0.03)
fit<-nls(cum~ alpha*exp(-beta*exp(-k*size)),start=start)

Ошибка говорит: Singulat градиент.

В некоторых постах предлагается выбрать лучшие начальные значения.

Можете ли вы помочь мне с этой проблемой?

1 Ответ

1 голос
/ 31 октября 2019

Начальные значения слишком далеки от оптимальных. Сначала возьмем журналы обеих сторон, в этом случае есть только один нелинейный параметр, k. Только для этого нужно начальное значение, если мы используем алгоритм plinear. Используя k из этого соответствия в качестве начального значения k, используйте исходную формулу.

fit.log <- nls(log(cum) ~ cbind(1, exp(-k*size)), alg = "plinear", start = c(k = 0.03))

start <- list(alpha = 100, beta = 10, k = coef(fit.log)[["k"]])
fit <- nls(cum ~ alpha*exp(-beta*exp(-k*size)), start = start)
fit

, что дает:

Nonlinear regression model
  model: cum ~ alpha * exp(-beta * exp(-k * size))
   data: parent.frame()
  alpha    beta       k 
100.116   3.734  22.340 
 residual sum-of-squares: 45.87

Number of iterations to convergence: 11 
Achieved convergence tolerance: 3.351e-06

Мы можем показать соответствие на графике

plot(cum ~ size, pch = 20)
lines(fitted(fit) ~ size, col = "red")

, дающий:

screenshot

...