Как передать длинный список параметров в функцию `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.

Другие вопросы по тегам