Почему я получаю ошибку «единственного градиента» при использовании функции nls в R? - PullRequest
0 голосов
/ 25 марта 2020

Я разместил ссылку на файл .RData с моим фреймом данных ("dat.RData"), который будет запускаться со следующим кодом R:

nls(y ~ SSasymp(t, yf, y0, log_alpha), data = dat)

https://www.dropbox.com/sh/i7jphg3qhqub4o1/AABH9cGwsMfgHc-Tam7ta17Ka?dl=0

Когда я запускаю этот код, я получаю сообщение об ошибке:

Error in nls(y ~ cbind(1 - exp(-exp(lrc) * x), exp(-exp(lrc) * x)), data = xy,  : 
  singular gradient

Я пытаюсь согласовать свои данные с моделью экспоненциального затухания. Насколько я понимаю, эта ошибка обычно происходит из-за плохих начальных параметров. Однако я не понимаю, почему начальные параметры здесь плохие или как это исправить. У меня есть другой dataframe с очень похожими исходными данными (dat2.RData), который прекрасно работает с приведенным выше кодом. Я составил здесь необработанные данные для обоих фреймов. Если я приведу начальные параметры, такие как:

fit = nls(y ~ SSasymp(t, yf, y0, log_alpha), data = dat,start = list(yf=100,y0=0,log_alpha=-2))

..., тогда я получу вывод:

Nonlinear regression model
  model: y ~ SSasymp(t, yf, y0, log_alpha)
   data: dat
       yf        y0 log_alpha 
 100.2767  -38.7204   -0.7667 
 residual sum-of-squares: 562.1

Number of iterations to convergence: 6 
Achieved convergence tolerance: 4.602e-06

Однако я не хочу, чтобы моя модель имела отрицательное значение y0 (значения y для моих данных не могут go ниже 0). Могу ли я добавить это как ограничение?

...