2013-03-01 2 views
2

nls функция работает нормально, как следующее:Как пройти длинный список параметров `nls` функции в R

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 так, что он может принимать аргумент вектора параметров в формуле вместо многих параметров раздельных?

ответ

4

Вы можете дать вектор инициализации коэффициентов, как это:

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) 

Должно быть хорошее начало, чтобы понять, как играть с НЛС.

+0

Спасибо @agstudy, я не знал, что ответ так прост. – Zhenglei

Смежные вопросы