Сингулярна похибка градієнта в nls з правильними вихідними значеннями


19

Я намагаюся вписати лінію + криву експоненції до деяких даних. Для початку я спробував це зробити за деякими штучними даними. Функція: Це фактично експоненціальна крива з лінійним перерізом, а також додатковим параметром горизонтального зсуву ( m ). Однак, коли я використовую функцію R, я отримую жахливу помилку " сингулярна градієнтна матриця при початкових оцінках параметрів ", навіть якщо я використовую ті ж параметри, які використовували для отримання даних в першу чергу. Я спробував різні алгоритми, різні вихідні значення і спробував використовувати

y=a+br(xm)+cx
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)

Спасибі!


2
Підказка: подивіться на коефіцієнт (для фіксованого ) і зауважте, що має одновимірне сімейство розв'язків з . r b r - m = постійна ( b , m ) b = r mконстантаrxrbrm=constant(b,m)b=rmconstant
whuber

1
Це не визначена модель, якщо тільки або якось обмежені. Я думаю, що потрібна робота зробить цю роботу. r r ( 0 , 1 )brr(0,1)
Макрос

Відповіді:


16

Мене це нещодавно покусало. Мої наміри були однакові, зробити якусь штучну модель і протестувати її. Основна причина - це та, яку дали @whuber та @marco. Така модель не визначена. Щоб побачити це, пам’ятайте, що NLS мінімізує функцію:

i=1n(yiabrximcxi)2

Скажімо, вона мінімізована набором параметрів . Не важко побачити, що набір параметрів дасть те саме значення функції, яке слід мінімізувати. Отже модель не визначена, тобто не існує єдиного рішення.(a,b,m,r,c)(a,brm,0,r,c)

Також не важко зрозуміти, чому градієнт є сингулярним. Позначимо

f(a,b,r,m,c,x)=a+brxm+cx

Потім

fb=rxm

fm=blnrrxm

і ми отримуємо це для всіхx

blnrfb+fm=0.

Звідси матриця

(f(x1)f(xn))

не буде повноцінним, і саме тому nlsдасть особливе повідомлення про градієнт.

Я витратив більше тижня на пошуки помилок у своєму коді в іншому місці, поки не помітив, що основна помилка була в моделі :)


2
Я знаю це віки, але просто цікаво, чи це означає, що nls не можна використовувати на моделях, які не можна ідентифікувати? Наприклад, нейронна мережа?
Порахуйте нуль

я знаю, жирний шанс, але ти міг би розбити це для меншої кількості людей, що запам'ятовують кальци? :). також, яке рішення проблеми ОП тоді? Здатися і піти додому?
theforestecologist

2
Рішення проблеми ОП полягає в тому, щоб використовувати один параметр замість двох, тобто замість використовувати . Параметр є чудовим, оскільки він зливається у , тобто . β r x m β β = b r - mbrxmβrxmββ=brm
mpiktas

@CountZero, в основному так, звичайні методи оптимізації не зможуть, якщо параметри не визначені. Однак нейронні мережі вирішують цю проблему, додаючи додаткові протипоказання та використовуючи інші цікаві хитрощі.
mpiktas

Я б подумав ? у відповіді відсутній lnr? fm=blnr rxm
wiswit

17

Відповіді вище, звичайно, правильні. Для чого варто, окрім наданих пояснень, якщо ви намагаєтеся це зробити на штучному наборі даних, відповідно до довідкової сторінки nls, знайденої за адресою: http://stat.ethz.ch/R-manual/R-patched/ бібліотека / статистика / html / nls.html

R's nls не зможе впоратися з цим. На довідковій сторінці конкретно зазначено:

Увага

Не використовуйте nls для штучних "нульових залишкових" даних.

Функція nls використовує критерій конвергенції відносного зміщення, який порівнює числову неточність при поточних оцінках параметрів із залишковою сумою квадратів. Це добре відповідає даних форми

y = f (x, θ) + eps

(з var (eps)> 0). Не вдається вказати збіжність за даними форми

y = f (x, θ)

тому що критерій дорівнює порівнянню двох компонентів помилки округлення. Якщо ви хочете перевірити nls на штучних даних, будь ласка, додайте шумовий компонент, як показано у прикладі нижче.

Таким чином, без шуму == немає користі для R-х nls.


Ласкаво просимо на сайт, @B_D_Dubbya. Я взяв на себе сміливість відформатувати вашу відповідь, сподіваюся, ви не заперечуєте. Більше інформації про редагування відповідей на резюме ви можете знайти тут .
gung - Відновіть Моніку

1
Мені відомо про це питання - отже, використовуючи функцію "тремтіння", щоб додати трохи шуму
steiny
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.