【问题标题】:How to pass from lm.fit to optim in R?如何从 lm.fit 传递到 R 中的 optim?
【发布时间】:2016-04-30 14:59:47
【问题描述】:

我正在使用一个函数进行线性回归并且工作正常。: 在这里:

fun <- function(x1, x2, y) {

但现在我有一个非线性方程,所以我想在上面的Fun 中使用optim 而不是lm.fit

优化函数在这里:

  f <- function(p){
      sum((y - (p[1]*x1+p[2]*x2+p[3])^p[4]+p[5])^2)
                  }

  p <- optim(rep(.5, 5), f)$par

您知道如何在第一个中实现此功能吗?并删除lm.fit

【问题讨论】:

  • 您可以使用nls进行非线性最小二乘拟合
  • 我猜应该是nls(y~((p1*x1+p2*x2+p3)^p4+p5), data.frame(x1,x2,y), start=c(p1=.5,p2=.5,p3=.5,p4=.5,p5=.5))

标签: r optimization regression


【解决方案1】:

如果你确定要使用optim,可以试试这个方法:

make.fun <- function(x1,x2,y,n.keep=3) {
  keep <- !(is.na(x1) | is.na(x2) | is.na(y))
  if (sum(keep)<n.keep) return()
  function(p){
    sum((y - (p[1]*x1+p[2]*x2+p[3])^p[4]+p[5])^2)
  }
}

f <- make.fun(x1,x2,y)
p <- if (is.null(f)) rep(NA,5) else optim(rep(.5,5),f)$par

这里,make.fun 测试您是否有足够的完整行,如果是,则返回一个要最小化的函数。该函数的环境中已经有x1x2y,所以它只需要p作为输入,这对于optim使用很方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多