使用自定义函数和参数拟合模型

Fit model with custom function and parameters

我想在 R 中使用稳健的非线性回归来拟合一些数据 (nlrob)。但是,我认为这个问题对于非稳健 and/or 线性方法也应该有效。

我写了一个自定义函数,return 因变量的值作为自变量加上一些额外参数的函数。我的问题是,对于每个 "case",我可以有不同数量的额外参数。我该如何编码?

示例:

案例 1

 nlrob(y ~ f(x, p,p1),data = data1, start = c(p1 = 0 ))

案例 2

nlrob(y ~ f(x,p, p1,p2,p3),data = data2, start = c(p1 = 0,p2 = 0,p3 = 0 ))

我应该如何编写函数 f 以便它可以接收和解析 x、p 和 p* 的任意值?如何编写 nlrob 行以使其工作?换句话说,如何为任意数量的参数编写对 nlrob 和函数 f 的调用的通用行?

系数可以是向量。例如,此处 fp 参数可以是长度 1 或 2:

f <- function(x, p) if (length(p) == 1) p * x else p[1] * x + p[2]
nlrob(demand ~ f(Time, p), BOD, start = list(p = 1))
nlrob(demand ~ f(Time, p), BOD, start = list(p = 1:2)) 

已添加:

要与 method = "tau" 一起使用,例如,定义 upperlower 而不是 start:

# lower <- 0; upper <- 10
lower <- c(0, 0); upper <- c(10, 10)

nms <- paste0("p", seq_along(upper))
names(lower) <- names(upper) <- nms
f <- function(x, ...) {
   with(list(...), if (...length() == 1) p1 * x else p1 * x + p2)
}   
fo <- sprintf("demand ~ f(Time, %s)", toString(paste(nms, "=", nms)))
nlrob(fo, data = BOD, lower = lower, upper = upper, method = "tau")