Подбор трехпараметрической нелинейной модели к четырем точкам данных в любом случае будет довольно сложной задачей, хотя в этом случае данные хорошо обрабатываются. Пункт №1 заключается в том, что ваше начальное значение для вашего параметра c
(-5) было далеким. Изображение кривой, соответствующей вашим начальным параметрам (см. Ниже), поможет вам понять это (так же как и признание того, что кривая, которую вы получите, будет варьироваться от c
при минимуме до c+a
при максимуме, а диапазон ваших данных - от 0,6 к 1 ...)
Однако, даже имея лучшее начальное предположение, я обнаружил, что возился с параметрами управления (например, control=nls.control(maxiter=200)
), за которыми следовало больше предупреждений - nls
не известен своей надежностью. Итак, я попробовал модель SSasympOff
, которая реализует самозапускающуюся версию кривой, которую вы хотите подогнать.
start1 <- list(a=1, b=75, c=-5)
start2 <- list(a=0.5, b=75, c=0.5) ## a better guess
pfun <- function(params) {
data.frame(vec_x=60:90,
vec_y=do.call(expFct2,c(list(x=60:90),params)))
}
library(ggplot2)
ggplot(data = dt,aes(x = vec_x, y = vec_y)) + geom_point() +
geom_line(data=pfun(start1))+
geom_line(data=pfun(start2),colour="red")+
geom_smooth(data=dt, method="nls", formula=y~SSasympOff(x, a, b, c),
se=FALSE)
Мой совет в целом состоит в том, что легче понять, что происходит, и исправить проблемы, если вы поместите nls
вне из geom_smooth
и построите кривую, которую хотите добавить, используя predict.nls
...
В более общем смысле, способ получить хорошие начальные параметры - это понять геометрию функции, которую вы подбираете, и какие параметры определяют, какие аспекты кривой. Как я упоминал выше, c
- это минимальное значение смещенной экспоненциальной кривой насыщения, a
- это диапазон, а b
- параметр масштаба (вы можете видеть, что когда x=b
, кривая составляет 1-exp(-1)
или примерно 2/3 пути от от минимума до максимума). Либо немного алгебры и исчисления (т. Е. Определение пределов), либо поиграйте с функцией curve()
- хорошие способы собрать эту информацию.
person
Ben Bolker
schedule
13.03.2012