Ошибка нелинейной регрессии (одиночная матрица градиента)

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

Гауссова (которая преобладает при x = 0) Экспоненциальная (которая берет верх над постгауссовой) и константа, которая округляет значения

Из других примеров этой ошибки, которые я прочитал, кажется, что проблема вызвана плохими первоначальными предположениями, но я понятия не имею, как это исправить, и является ли это реальной проблемой, учитывая размер моей функции.

Вот мой код и один образец данных, на которые я смотрю.:

Value<-c(163301.080,269704.110,334570.550,409536.530,433021.260,418962.060,349554.460,253987.570,124461.710,140750.480,52612.790,54286.427,26150.025,14631.210,15780.244,8053.618,4402.581,2251.137,2743.511,1707.508,1246.894)
Height<-c(400,300,200,0,-200,-400,-600,-800,-1000,-1000,-1200,-1220,-1300,-1400,-1400,-1500,-1600,-1700,-1700,-1800,-1900)

Framed<-data.frame(Value,Height)
i<-nls(Value~a*exp(-Height^2/(2*b^2))+ c*exp(-d*abs(Height)) + e,
                 data=Framed,start = list(a=410000,b=5,c=10000,d=5,e=1200))
plot(Value~Height)
summary(i)

Спасибо за вашу помощь, теперь у меня снова та же проблема, я использовал вашу технику ниже (R noob), ранее использовал график манипулирования в математике, и я думаю, что у меня есть относительно хорошее соответствие для данных, вот график данных, которые я также пытаюсь установить (извините, не могу загрузить их, недостаточно репутации)

http://imgur.com/GtzIzSr

Однако я получаю ту же проблему, это связано с моей посадкой или огромным количеством изменчивости на малых расстояниях?


person AW1991    schedule 14.04.2015    source источник
comment
всего с 5 уникальными значениями X, как показано на рисунке, будет почти невозможно подогнать нелинейную модель с 5 параметрами...   -  person Ben Bolker    schedule 15.04.2015
comment
Извините, это другая посадка (нормальное распределение с 2 параметрами), которую я исправил сейчас.   -  person AW1991    schedule 15.04.2015


Ответы (1)


Вы правы в том, что обычно речь идет о начальных значениях летучих мышей, и это (часть) вашего дела. Глядя на ваши данные и ваши догадки, становится ясно, что что-то не так. Но прежде чем перейти к этому, обратите внимание, что Framed не был создан в правильном порядке. Должно быть X Y или:

Framed <- data.frame(Height, Value)

Имея это в виду, попробуйте следующее:

Vals2 <- 410000*exp(-Height^2/(2*5^2)) - 10000*exp(-5*abs(Height)) + 1200
plot(Framed) 
lines(Height, Vals2) 

Вы должны получить

введите здесь описание изображения

Это показывает, насколько плохи ваши предположения. Играя с вашей функцией, легко увидеть, что b далеко. Измените его на 500, а затем:

введите здесь описание изображения

Это намного лучше, но все равно не подходит. И если вы измените другие параметры (c, d и e), вы заметите, что они не слишком сильно влияют на данные или вообще не влияют. Вероятно, это потому, что a намного больше, а у вас Height^2 в первом члене. Если вы упростите свою функцию и запустите:

i<-nls(Value~a*exp(-Height^2/(2*b^2)), start = list(a=410000,b=500))

Вы найдете подходящий. Вероятно, это связано с тем, что нелинейные функции усложняются по мере увеличения числа параметров, особенно если между ними существует ковариация. Меньше параметров настраивается намного проще. Однако вам придется решить, сможете ли вы работать только с a и b.

Но если вы запланируете это, это все равно не выглядит хорошо. Понятно, что ваш Value не имеет своего максимума при Height = 0, как это должно быть из вашего описания и из смоделированной кривой. Кажется, произошла ошибка с вашими данными, потому что, если вы попробуете Height <- Height+200 вместе с указанными выше изменениями, вы получите

введите здесь описание изображения

> summary(i)

Formula: Value ~ a * exp(-Height^2/(2 * b^2))

Parameters:
   Estimate Std. Error t value Pr(>|t|)    
a 449820.71   10236.43   43.94   <2e-16 ***
b    496.60      12.54   39.59   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17790 on 19 degrees of freedom

Number of iterations to convergence: 4 
Achieved convergence tolerance: 2.164e-06

Теперь вам нужно проверить, действительно ли ваши данные сдвинуты и можно ли упростить функцию.

person Molx    schedule 14.04.2015