Я пытаюсь использовать те же исходные аргументы из подогнанной модели nls
при подборе второй модели с использованием подмножества данных (для перекрестной проверки). Я могу получить аргументы (например, fit$call
), но мне трудно передать эти аргументы do.call
.
# original model ----------------------------------------------------------
# generate data
set.seed(1)
n <- 100
x <- sort(rlnorm(n, 1, 0.2))
y <- 0.1*x^3 * rlnorm(n, 0, 0.1)
df <- data.frame(x, y)
plot(y~x,df)
# fit model
fit <- nls(y ~ a*x^b, data=df, start=list(a=1,b=2), lower=list(a=0, b=0), algo="port")
summary(fit)
plot(y~x,df)
lines(df$x, predict(fit), col=4)
# perform model fit on subset with same starting arguments ----------------
# df sampled subset
dfsub <- df[sample(nrow(df), nrow(df)*0.5),]
dim(dfsub)
plot(y~x, dfsub)
ARGS <- fit$call # original call information
ARGS$data <- dfsub # substitute dfsub as data
ARGS <- as.list(ARGS) # change class from "call", to "list"
fitsub <- do.call(nls, args = ARGS )
# Error in xj[i] : invalid subscript type 'closure'
Кроме того, в качестве примечания, fit$data
просто возвращает имя объекта данных. Действительно ли данные также содержатся в подогнанном объекте nls
(как иногда делают подгонки lm
и других моделей)?
str(fit)
. элементdata
просто содержит символ для данных (в данном случаеdf
). (Вenvironment(fit$m$fitted)
тоже есть кое-что, но не данные. - person Ben Bolker   schedule 31.03.2016