Нелинейная регрессия в R: сингулярный градиент - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь сделать экспоненциальную регрессию в R, но я продолжаю получать эту ошибку

Ошибка в nls (y ~ a * exp (b * x), data = DF, start = list (a = -10, b = -10)): единый градиент

Данные и код, которые я использую:

 x <-c(0.00, 6.40, 8.61, 15.20, 28.10, 42.60, 66.70, 73.00, 73.00, 85.00, 88.00, 88.00, 88.00, 88.00, 88.00, 88.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 94.00, 102.00, 102.00, 102.00, 102.00, 102.00, 160.00, 160.00, 169.00, 320.00, 320.00, 320.00, 432.00, 432.00)

y <- c(6.52, 1.95, 1.51, 1.94, 3.04, 1.81, 2.07, 0.88, 1.59, 1.18, 0.47, 0.69, 0.90, 1.27, 0.94, 1.84, 0.71, 1.30, 0.50, 1.09, 0.69, 4.07, 0.68, 0.91, 0.64, 0.97,  0.99,  1.34, 0.82, 0.34, 0.39, 1.14, 0.90, 0.36, 0.86, 0.59, 0.36, 1.14, 1.09, 1.81)

DF <- data.frame(x,y)
m <- nls(y ~  a*exp(b*x), data = DF, start=list(a=-10, b=-10)) 

Это, вероятно, легко исправить, но я застрял с этим в течение нескольких дней, большое спасибо, любая помощь высоко ценится!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Я не могу разместить изображение в комментарии, поэтому разместите его здесь. Когда я сопоставляю ваши данные со смещением «a * exp (b * x) + offset», как мне подсказывает диаграмма рассеяния данных, я получаю то, что представляется более подходящим с R-squared = 0.584 и RMSE = 0,714 от установленных параметров a = 5,3702154953394219E + 00, b = -2,7909919440915620E-01 и смещение = 1,1363689273642967E + 00 offset version

0 голосов
/ 07 ноября 2018

Сначала посмотрите на данные. Много раз вам нужно указывать начальные значения, которые несколько правдоподобны.

plot(y~x)

enter image description here

Казалось, ясно, что a будет положительным, а b будет отрицательным. Кроме того, длительная «временная шкала» (я думаю, с точки зрения анализа выживаемости) потребует довольно небольшой b:

 m <- nls(y ~  a*exp(b*x), data = DF, start=list(a=-1, b=-.1) ) 
> m
Nonlinear regression model
  model: y ~ a * exp(b * x)
   data: DF
      a       b 
 3.5092 -0.0128 
 residual sum-of-squares: 33.85

Number of iterations to convergence: 18 
Achieved convergence tolerance: 5.09e-06

Добавьте кривую к графику с помощью:

  curve(  3.5*exp(-0.0128*x),add=TRUE, col="blue")

enter image description here

...