Подгонка кривой в R с использованием nls
Я пытаюсь подогнать кривую (хвост) следующих данных:
[1] 1 1 1 1 1 1 2 1 2 2 3 2 1 1 4 3 2 11 6 2 16 7 17 36 [25] 27 39 41 33 42 66 92 138 189 249 665 224 309 247 641 777 671 532 749 506 315 292 281 130 [49] 137 91 40 27 34 19 1
Я использую следующую функцию в R для достижения этой цели:
nls (y ~ ax exp (-b * x ^ 2), start = список (a=1,b=1),trace=TRUE)
Однако я получаю следующую ошибку:
3650202: 1 1
Ошибка в numericDeriv(форма [[3L]], имена (ind), env): отсутствует значение или бесконечность, возникающая при оценке модели
При использовании следующих искусственных значений для x и y все работает просто отлично:
у = х * ехр (-.5* х ^2)+ RNorm(длина (х),0,0.1)
Икс [1] 0,00 0,05 0,10 0,15 0,20 0,25 0,30 0,35 0,40 0,45 0,50 0,55 0,60 0,65 0,70 0,75 0,80 0,85 0,90 [20] 0,95 1,00 1,05 1,10 1,15 1,20 1,25 1,30 1,35 1,40 1,45 1,50 1,55 1,60 1,65 1,70 1,75 1,80 1,85 [39] 1,90 1,95 2,00 2,05 2,10 2,15 2,20 2,25 2,30 2,35 2,40 2,45 2,50 2,55 2,60 2,65 2,70 2,75 2,80 [58] 2,85 2,90 2,95 3,00 3,05 3,10 3,15 3,20 3,25 3,30 3,35 3,40 3,45 3,50 3,55 3,60 3,65 3,70 3,75 [77] 3,80 3,85 3,90 3,95 4,00 4,05 4,10 4,15 4,20 4,25 4,30 4,35 4,40 4,45 4,50 4,55 4,60 4,65 4,70 [96] 4,75 4,80 4,85 4,90 4,95 5,00 Y [1] -0,080214106 0,075247488 0,073535116 -0,020087646 0,181314038 0,075832658 0,248303254 [8] 0,364244010 0,453655908 0,347854869 0,514373164 0,384051249 0,618584696 0,515684390 [15] 0,534737770 0,609279111 0,618936091 0,534443863 0,739118585 0,677679546 0,526011452 [22] 0,645645150 0,578274968 0,589619834 0,476186241 0,621638333 0,601663144 0,535981735 [29] 0,518434367 0,581735107 0,423872948 0,445335110 0,340884242 0,317121065 0,342683141 [36] 0,278351104 0,402947372 0,429483276 0,276655872 0,108164828 0,389994138 0,372300257 [43] -0,057320612 0,131271986 0,226212869 0,131171973 0,245970674 0,009926555 0,173465207 [50] 0,141220590 0,280616078 0,108515613 0,117697407 0,130700771 0,058540888 0,251613512 [57] 0,168094899 -0,058382571 0,1123306762 -0,048605186 -0,010131767 0,076701962 -0,051982924 [64] 0,058427540 0,144665070 0,063998841 -0,010495697 0,119868854 0,114447318 0,006759691 [71] 0,025041761 -0,178145771 0,041547126 0,122084819 0,034283141 0,209140060 0,197024853 [78] -0,005491966 -0,033260219 -0,028123314 -0,005775553 -0,040781462 0,090024896 0,116390743 [85] -0.017811031 0,094039200 -0,147064060 -0,057249278 0,211587898 -0,066153592 0,032100332 [92] -0,092756136 -0,125906598 0,136937364 0,046453010 0,002000336 -0,134047101 0,089748847 [99] -0,019355567 -0,042158950 0,149594368
Кто-нибудь может указать, что я делаю не так? Спасибо за вашу помощь.
1 ответ
Ну, я нашел ответ на мою проблему. Начальные значения для реальных данных полностью отличаются от фиктивных значений: a=500 и b=.1 приводят к хорошей подгонке. Просто подумал, что было бы полезно упомянуть это здесь.