Я пытаюсь подогнать линию + экспоненциальную кривую к некоторым данным. Для начала я попытался сделать это на некоторых искусственных данных. Функция: Это фактически экспоненциальная кривая с линейным сечением, а также дополнительный параметр горизонтального сдвига ( m ). Однако, когда я использую функцию R, я получаю страшную ошибку « матрица сингулярного градиента при начальных оценках параметров », даже если я использую те же параметры, которые я использовал для генерации данных в первую очередь. Я пробовал разные алгоритмы, разные начальные значения и пытался использовать
nls()
optim
минимизировать остаточную сумму квадратов, все безрезультатно. Я читал, что возможной причиной этого может быть чрезмерная параметризация формулы, но я не думаю, что это так (есть?) У кого-нибудь есть предложения по этой проблеме? Или это просто неловкая модель?
Краткий пример:
#parameters used to generate the data
reala=-3
realb=5
realc=0.5
realr=0.7
realm=1
x=1:11 #x values - I have 11 timepoint data
#linear+exponential function
y=reala + realb*realr^(x-realm) + realc*x
#add a bit of noise to avoid zero-residual data
jitter_y = jitter(y,amount=0.2)
testdat=data.frame(x,jitter_y)
#try the regression with similar starting values to the the real parameters
linexp=nls(jitter_y~a+b*r^(x-m)+c*x, data=testdat, start=list(a=-3, b=5, c=0.5, r=0.7, m=1), trace=T)
Благодарность!
r
nonlinear-regression
nls
steiny
источник
источник
Ответы:
Я недавно укусила это. Мои намерения были такими же, сделать какую-то искусственную модель и проверить ее. Основная причина - та, которую дали @whuber и @marco. Такая модель не опознана. Чтобы увидеть это, помните, что NLS минимизирует функцию:
Также нетрудно понять, почему градиент является единственным. Обозначим
потом
Отсюда и матрица
не будет иметь полный ранг, и именно поэтому
nls
даст единственное сообщение градиента.Я потратил больше недели на поиск ошибок в моем коде в другом месте, пока не заметил, что основная ошибка была в модели :)
источник
Ответы выше, конечно, правильные. Для чего стоит, в дополнение к приведенным объяснениям, если вы пытаетесь сделать это на искусственном наборе данных, согласно странице справки nls, найденной по адресу: http://stat.ethz.ch/R-manual/R-patched/ библиотека / статистика / html / nls.html
R's NLS не сможет справиться с этим. На странице справки конкретно указано:
Таким образом, нет шума == не хорошо для R NLS.
источник