您的数据:
DF <- read.table(text="x y log10(x) log10(y)
7 240 0.84509804 2.380211242
45 610 1.653212514 2.785329835
14 340 1.146128036 2.531478917
30 500 1.477121255 2.698970004
24 450 1.380211242 2.653212514
57 690 1.755874856 2.838849091", header=TRUE)
创建自启动模型:
(免责声明:函数名称并不反映我的政治态度,它只是符合自启动函数的命名方案。)
SSpower <- selfStart(~ A*x^B,
function(mCall, data, LHS)
{
xy <- sortedXyData(mCall[["x"]], LHS, data)
if(nrow(xy) < 3) {
stop("Too few distinct x values to fit a power function")
}
z <- xy[["y"]]
xy[["logx"]] <- log(xy[["x"]])
xy[["logy"]] <- log(xy[["y"]])
aux <- coef(lm(logy ~ logx, xy))
pars <- c(exp(aux[[1]]), aux[[2]])
setNames(pars,
mCall[c("A", "B")])
}, c("A", "B"))
使用自启动模型进行拟合:
fit <- nls(y ~ SSpower(x, A, B), data=DF)
Plot:
plot(y~x, data=DF)
lines(x=1:60, y=predict(fit, newdat=list(x=1:60)))