Попробуй это. rhs
— вектор символов правых сторон, а x
и y
— данные. Он строит формулу fo
для каждого, а затем извлекает параметры и устанавливает для каждого значение 1 в качестве начального значения. Наконец, он запускает nls
и возвращает SSE, отсортированные таким образом, что результатом является вектор SSE, названный по правой стороне. Если verbose=TRUE
(что по умолчанию), то он также отображает выходные данные каждой подгонки.
sse <- function(rhs, x, y) sort(sapply(rhs, function(rhs, x, y, verbose = TRUE) {
fo <- as.formula(paste("y", rhs, sep = "~"))
nms <- setdiff(all.vars(fo), c("x", "y"))
start <- as.list(setNames(rep(1, length(nms)), nms))
fm <- nls(fo, data.frame(x, y), start = start)
if (verbose) { print(fm); cat("---\n") }
deviance(fm)
}, x = x, y = y))
## test
set.seed(123)
x <- 1:10
y <- rnorm(10, x)
# modify to suit
rhs <- c("a*x+b", "a*x*x+b*x+c")
sse(rhs, x, y)
person
G. Grothendieck
schedule
05.07.2012