Ошибка в nlsModel: матрица сингулярного градиента при начальных оценках параметров

Я столкнулся с этой проблемой сингулярной матрицы nls в некоторых тестах реальных данных, также пробовал nlsLM, но всегда получаю одну и ту же ошибку. Некоторые существующие решения в stackoverflow говорят, что начальные параметры недостаточно идеальны. Затем я создал тестовый набор данных с добавлением шума. Затем я ввел точные параметры для запуска, но все равно получил ту же ошибку. Может кто-нибудь посмотреть, в чем проблема?

library(minpack.lm)
f <- function(x,a,b,m,n) {
  m + n* b/(a^b) * (x^(b-1))
}
# test dataset
x = seq(1,100)
y= f(x,a = 1,b = 2.5,m = 0.5, n= 50)
noise = runif(100,-1000,1000) 
y = y+ noise # add noise
plot(x, y, type="l")
data = as.data.frame(cbind(x,y))
mod <- nlsLM(y ~ f(x,a,b,m,n), data = data, start=list(a = 1,b = 2.5,m = 0.5, n= 50), control = list(maxiter = 500))

Заранее спасибо!


r nls
person MangooSaSa    schedule 20.06.2015    source источник
comment
Я могу отлично подойти с mod1 <- lm(y ~ poly(x, 2, raw = TRUE)); lines(x, predict(mod1), col = "red"). Я не удивлен, что у оптимизатора тогда возникают проблемы с четырехпараметрической функцией.   -  person Roland    schedule 20.06.2015


Ответы (1)


Основная проблема - спецификация модели. Для фиксированного b любая комбинация a и n, для которой n* b/(a^b) одинакова, дает ту же модель, что и приводит к сингулярности. Исправьте либо a, либо n. Далее мы фиксируем a равным 1.

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

Используя f из вопроса:

set.seed(123)
x <- 1:100
y <- f(x, a = 1, b = 2.5, m = 0.5, n = 50) + runif(100, -1000, 1000) 

a <- 1
mod <- nlsLM(y ~ f(x, a, b, m, n), start = list(b = 2.5, m = 0.5, n= 50))

давая:

> mod
Nonlinear regression model
  model: y ~ f(x, a, b, m, n)
   data: parent.frame()
      b       m       n 
  2.507 240.352  48.122 
 residual sum-of-squares: 31264921

Number of iterations to convergence: 3 
Achieved convergence tolerance: 1.49e-08
person G. Grothendieck    schedule 21.06.2015