R:求从 lm() 动态生成的公式的极值

R: Finding extrema of formula generated dynamically from lm()

提问人:Jens Munk 提问时间:11/13/2023 最后编辑:Jens Munk 更新时间:11/14/2023 访问量:46

问:

我想从模型的系数和变量中生成函数,并用于查找极值。使用并不能提供我需要的分辨率。这些模型有几个维度。lm()nlminb()predict()lm()

x是我的数据表。 是由一种称为 的算法生成的模型。Y3m5lm()stepForward

手动编写函数:

fY3m5 <- function(Y3model5) {
  -(Y3m5$coefficients[1] + 
    Y3model5[1]*Y3m5$coefficients[2] + 
    Y3model5[2]*Y3m5$coefficients[3] + 
    Y3model5[3]*Y3m5$coefficients[4] + 
    Y3model5[4]*Y3model5[4]*Y3m5$coefficients[5] + 
    Y3model5[4]*Y3m5$coefficients[6] + 
    Y3model5[5]*Y3m5$coefficients[7] + 
    Y3model5[2]*Y3model5[3]*Y3m5$coefficients[8] +
    Y3model5[2]*Y3model5[4]*Y3m5$coefficients[9] + 
    Y3model5[2]*Y3model5[5]*Y3m5$coefficients[10]) 
}

并运行它:nlminb()

nlminb(c(0.0055, 
         0.0018, 
         0.15, 
         0.036,
         0.0425), 
       fY3m5, 
       hessian=NULL, 
       upper = unlist(lapply(x[1:6], max)),
       lower = unlist(lapply(x[1:6], min)))

工作是一种享受,并给出有意义的最低限度。

相反,尝试从模型动态生成函数,lm()

首先定义为空间的中心(均值)starts

starts <- c("x" = 1, unlist(lapply(x[1:6],mean)))

并作为字符串替换向量repl1

repl1 <- c("starts['x']", "", "", "*", "", paste0("starts['", names(x[1:6]), "']"))
names(repl1) <- c("Intercept", "\\)", "\\(", ":", "I", names(x[1:6]))

然后从模型中制作函数lm()

fY3m5_2 <- function(model, starts) {
  function(starts) {
    noquote(
      paste0("-(",
             paste(
               paste0(
                 str_replace_all(
                   labels(model$coefficients),
                   repl1),
                 "*",
                 "(",
                 model$coefficients,
                 ")"),
               collapse = " + "),
             ")")
    )
  }
}

恕我直言,应该工作。但是做

nlminb(c(0.0055, 
         0.0018, 
         0.15, 
         0.036, 
         0.0425), 
       eval(fY3m5_2(Y3m5,)), 
       hessian=NULL, 
       upper = unlist(lapply(x[1:6], max)),
       lower = unlist(lapply(x[1:6], min)))

不会给出预期的结果(就像手动编写函数一样)。

令我惊讶的是,要找到任何好的线索是多么困难,而上述内容我花了很长时间才达到。据我所知,以前没有尝试过生成可食用的函数 nlminb()。如果我错了,请道歉。请帮我克服最后的障碍!

谢谢!

R 函数 LM 预测

评论


答: 暂无答案