【问题标题】:Maximize nonlinear regression function in R最大化R中的非线性回归函数
【发布时间】:2017-05-18 05:02:15
【问题描述】:

给定一个从函数调用reg = lm(...)获得的线性模型,如何找到最大化获得的回归函数的系数?

我知道函数optim(...),但它需要一个函数作为输入。我还没有弄清楚如何从回归模型中提取它。

应该注意的是,我在回归分析中使用了非线性项(准确地说是平方变量)。

也就是说,通过回归函数看起来像

y_hat = kx_11*x_1+kx_12*x_1^2 + kx_21*x_2+kx_22*x_2^2 + ...

【问题讨论】:

  • “使获得的回归函数最大化的系数”是什么意思?
  • 为了清楚起见,我刚刚更新了帖子。我要实现的目标是对所有变量求偏导数并求解所有偏导数为零的方程组。
  • 你根本没有澄清。从字面上看你的问题,回归函数不会最大化,因为你总是可以无限制地增加系数的大小。即,“将系数设置为无穷大”将产生“最大值”。我认为这不是你想要做的,所以你需要澄清更多。
  • 不,因为回归具有二次项,正如我指出的那样。例如,x - x^2 在无穷远处没有最大值。
  • 求公式的最大值与求模型的回归(即拟合优度)是不同的问题。输入 lm 函数将优化 y=Ax - Bx^2 的拟合。在您的情况下,您没有 y 值,因此使用 R 公式没有意义。

标签: r optimization regression


【解决方案1】:

这是一个演示 1 方式的简单示例。在 lm 对象上使用 predict() 来创建您的函数。 fxn() 有点乱,因为我没有你的确切数据,但你应该明白。

#set up dummy data
x1 = -10:10
x2 = runif(21)
y = -x1^2 + x1 - 10*x2^2 + runif(21)*.1 
data = data.frame(y= y, x1=x1, x2=x2)

#fit model
m = lm(data=data, y ~ x1 + I(x1^2) + I(x2^2))

#define function that returns predicted value
fxn = function(z){
    z = as.data.frame( t(z) )
    colnames(z) = colnames(data)[-1]
    predict(m, newdata=z)
}

optim(c(0,0), fxn, control=list(fnscale=-1)) #maximizes fxn

$par
[1]  4.991601e-01 -3.337561e-06

$value
[1] 0.3153461

$counts
function gradient 
      65       NA 

$convergence
[1] 0

$message
NULL

【讨论】:

  • 非常聪明的解决方案!
猜你喜欢
  • 1970-01-01
  • 2022-01-11
  • 2012-03-14
  • 2011-10-14
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
相关资源
最近更新 更多