最大化R中的非线性回归函数

时间:2017-01-04 01:13:45

标签: r optimization regression

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

我知道函数optim(...),但它需要函数作为输入。我还没想出如何从回归模型中提取它。

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

换句话说,通过回归函数看起来像

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

1 个答案:

答案 0 :(得分:2)

这是一个快速举例说明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