Как передать длинный список параметров в функцию `nls` в R
nls
Функция работает как обычно:
x <- 1:10
y <- 2*x + 3 # perfect fit
yeps <- y + rnorm(length(y), sd = 0.01) # added noise
nls(yeps ~ a + b*x, start = list(a = 0.12345, b = 0.54321))#
Поскольку используемая модель имеет много параметров или я не знаю заранее, что будет включено в список параметров, я хочу что-то вроде следующего
tmp <- function(x,p) { p["a"]+p["b"]*x }
p0 <- c(a = 0.12345, b = 0.54321)
nls(yeps ~ tmp(x,p), start = list(p=p0))
Кто-нибудь знает, как изменить nls
функция, чтобы он мог принимать аргумент вектора параметра в формуле вместо многих отдельных параметров?
1 ответ
Решение
Вы можете задать вектор коэффициентов инициализации следующим образом:
tmp <- function(x, coef){
a <- coef[1]
b <- coef[2]
a +b*x
}
x <- 1:10
yeps <- y + rnorm(length(y), sd = 0.01) # added noise
nls(yeps ~ a + b*x, start = list(a = 0.12345, b = 0.54321))#
nls(yeps ~ tmp(x,coef), start = list(coef = c(0.12345, 0.54321)))
Nonlinear regression model
model: yeps ~ tmp(x, coef)
data: parent.frame()
coef1 coef2
3 2
residual sum-of-squares: 0.0016
Number of iterations to convergence: 2
Achieved convergence tolerance: 3.47e-08
PS:
example(nls)
Должно быть хорошее начало, чтобы понять, как играть с NLS.