Попробуйте y ~ .lin / (b + x^c)
.Обратите внимание, что при использовании "plinear"
линейный параметр .lin
пропускается при указании формулы для nls
, а также для него не указывается начальное значение.
Также обратите внимание, что параметры .lin
и b
приблизительно равны 1 при оптимальном, поэтому мы также можем попробовать модель с одним параметром y ~ 1 / (1 + x^c)
.Это форма однопараметрической логистической кривой выживания.AIC для этой модели с одним параметром хуже, чем для модели с тремя параметрами (сравните AIC(fm1)
и AIC(fm3)
), но модель с одним параметром все еще может быть предпочтительнее из-за ее экономии и того факта, что подбор визуально неотличим от модели 3.модель параметров.
opar <- par(mfcol = 2:1, mar = c(3, 3, 3, 1), family = "mono")
# data = data.frame with x & y col names; fm = model fit; main = string shown above plot
Plot <- function(data, fm, main) {
plot(y ~ x, data, pch = 20)
lines(fitted(fm) ~ x, data, col = "red")
legend("topright", bty = "n", cex = 0.7, legend = capture.output(fm))
title(main = paste(main, "- AIC:", round(AIC(fm), 2)))
}
# 3 parameter model
fo3 <- y ~ 1/(b + x^c) # omit .lin parameter; plinear will add it automatically
fm3 <- nls(fo3, data = data, start = list(b = 1, c = 1), alg = "plinear")
Plot(data, fm3, "3 parameters")
# one parameter model
fo1 <- y ~ 1 / (1 + x^c)
fm1 <- nls(fo1, data, start = list(c = 1))
Plot(data, fm1, "1 parameter")
par(read.only = opar)
AIC
Добавляя решения в другие ответы, мы можем сравнить значения AIC.Мы пометили каждое решение числом используемых им параметров (степени свободы были бы на единицу больше, чем это) и переработали решение log-log, чтобы использовать nls
вместо lm
и иметь LHS из y, так как одинне может сравнивать значения AIC моделей, имеющих разные левые части или использующих разные подпрограммы оптимизации, поскольку используемые константы логарифмического правдоподобия могут различаться:
df AIC
fm3 4 -329.35
fm1 2 -307.69
fm4 5 -215.96
fm2 3 -167.33