2015-11-06 2 views
0

Есть ли способ ограничить диапазон значений, который может принимать NLS-коэффициент в R? Я знаю форму кривой, которая должна существовать для моих данных; однако NLS не производит такую ​​кривую, создавая коэффициент мощности < 1.Как разместить ограничения на коэффициенты nls?

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

Проблема в том, что у меня есть только данные для определенного диапазона высоты деревьев, и отсутствуют значения для стеблей < 1,3 метра в высоту. Код, который у меня есть до сих пор:

#Plot the raw data 
plot(AC$Height.m, AC$ag.biomass, xlim=c(0,2.5), ylim=c(0,40)) 

#Generate a NLS fit and plot curve on the raw data to show misfit 
bg.nls = nls(ag.biomass ~ B0*Height.m^B1, data=AC, start=list(B0=8,B1=2)) 
curve(coef(bg.nls)[1]*x^coef(bg.nls)[2], col="red", add=TRUE) 

#Provide example of appropriate growth curve given biological understanding 
curve(6*x^1.7, col="blue", add=TRUE) 

который производит следующий участок. Красная линия показывает несоответствие NLS (в первую очередь из-за того, что B1 составляет < 1), а синяя линия является примером биологически подходящей подгонки.

enter image description here

Я понимаю, что есть много статистических проблем, связанных с этим средством генерирования модели Fit - однако я не связан с ними здесь. Вместо этого меня просто интересует техническая проблема ограничения значения B1 только значениями, превышающими 1. Есть ли способ сделать это?

+1

Проверьте '' lower' и upper' аргументы для ограничения коэффициента помещается в 'nls'. – eipi10

+0

Обратите внимание, однако, что аргументы 'upper' и' lower' могут использоваться только с алгоритмом порта, который согласно документации «выглядит незавершенным» и должен использоваться «с осторожностью, особенно там, где указаны границы». –

ответ

4

Вы можете установить ограничения на коэффициент, используя аргументы upper и lower до nls. Ограничения работают только с алгоритмом port, поэтому вам нужно также указать это. Простой пример:

Без ограничений:

nls(mpg ~ wt^a + disp^b, data=mtcars, start=list(a=3.5, b=0.1), algorithm="port") 

Nonlinear regression model 
model: mpg ~ wt^a + disp^b 
data: mtcars 
a  b 
0.4441 0.5025 
residual sum-of-squares: 3612 

С ограничениями:

nls(mpg ~ wt^a + disp^b, data=mtcars, start=list(a=3.5, b=0.1), algorithm="port", 
    lower=c(3,0), upper=c(5,0.25)) 

Nonlinear regression model 
model: mpg ~ wt^a + disp^b 
data: mtcars 
a b 
3 0 
residual sum-of-squares: 78781 

Algorithm "port", convergence message: relative convergence (4) 
+0

безупречный. Спасибо. – jbukoski

Смежные вопросы