У меня есть следующие данные, и я хотел бы приспособить к ним модель отрицательного экспоненциального роста:
Days <- c( 1,5,12,16,22,27,36,43)
Emissions <- c( 936.76, 1458.68, 1787.23, 1840.04, 1928.97, 1963.63, 1965.37, 1985.71)
plot(Days, Emissions)
fit <- nls(Emissions ~ a* (1-exp(-b*Days)), start = list(a = 2000, b = 0.55))
curve((y = 1882 * (1 - exp(-0.5108*x))), from = 0, to =45, add = T, col = "green", lwd = 4)
Код работает и строится подходящая линия. Тем не менее, подгонка визуально не идеальна, а остаточная сумма квадратов кажется довольно большой (147073).
Как мы можем улучшить нашу форму? Данные позволяют лучше соответствовать вообще?
Мы не смогли найти решение этой проблемы в сети. Любая прямая помощь или связь с другими сайтами / сообщениями с благодарностью.
r
nonlinear-regression
fitting
nls
Strohmi
источник
источник
fit <- nls(Emissions ~ a* (1- u*exp(-b*Days)), start = list(a = 2000, b = 0.1, u=.5)); beta <- coefficients(fit); curve((y = beta["a"] * (1 - beta["u"] * exp(-beta["b"]*x))), add = T)
.Ответы:
(Отрицательный) экспоненциальный закон принимает вид . Когда вы допускаете изменения единиц в значениях x и y , хотя, скажем, y = α y ′ + β и x = γ x ′ + δ , тогда закон будет выражаться какy=−exp(−x) x y y=αy′+β x=γx′+δ
который алгебраически эквивалентен
используя три параметра , u = 1 / ( β exp ( δ ) ) и b = γ . Мы можем распознать a как параметр масштаба для y , b как параметр масштаба для x , и u как производный от параметра местоположения для x .a=−β/α u=1/(βexp(δ)) b=γ a y b x u x
Как правило, эти параметры можно определить с первого взгляда на график :
Параметр - это значение горизонтальной асимптоты, чуть меньше 2000 .a 2000
Параметр - это относительная величина, на которую кривая поднимается от начала координат до ее горизонтальной асимптоты. Здесь, следовательно, рост немного меньше, чем 2000 - 937 ; относительно, это около 0,55 асимптоты.u 2000−937 0.55
Поскольку , когда x в три раза превышает значение 1 / b, кривая должна была подняться примерно до 1 - 0,05 или 95 % от общей суммы. 95 % роста с 937 года до почти 2000 года ставит нас около 1950 года ; сканирование по всему графику показывает, что это заняло от 20 до 25 дней. Давайте назовем это 24 для простоты, откуда б ≈ +3 / 24exp(−3)≈0.05 x 1/b 1−0.05 95% 95% 937 2000 1950 20 25 24 . (Этотметод 95 % для экспоненциальной шкалы является стандартным в некоторых областях, которые часто используют экспоненциальные графики.)b≈3/24=0.125 95%
Давайте посмотрим, как это выглядит:
Не плохо для начала! (Даже несмотря на то, что вы печатаете
0.56
вместо0.55
, это было грубое приближение в любом случае.) Мы можем отшлифовать его с помощьюnls
:Вывод
nls
содержит обширную информацию о параметре неопределенности. Например , простоеsummary
предоставляет стандартные ошибки оценок:Мы можем читать и работать со всей ковариационной матрицей оценок, что полезно для оценки одновременных доверительных интервалов (по крайней мере, для больших наборов данных):
nls
поддерживает графики профиля для параметров, предоставляя более подробную информацию об их неопределенности:источник
res <- residuals(fit); res %*% res