【发布时间】:2018-06-08 18:22:55
【问题描述】:
假设我有一个简单的回归方程
lm(y~., newdata=df)
我知道如果我想将截距减少到0,我会写
lm(y+0., newdata=df)
但是,有没有办法产生逐步回归,同时将每个系数限制在特定范围内?例如:
step(lm(y~.>1000, newdata=df)
上述方法不起作用,但有没有办法说产生一个回归,基本上产生最佳拟合并强制每个系数大于 1,000?或者,小于指定范围。
#as per Gautam
minfunc <- function(coefs){
out <- sum(sapply(3:314, function(z) return(coefs[z]*test2[, z])))
return(out)
}
par = c(1, 1, 30) # initial value
lb = c(-1, -1, -300000) # lower bound for coefs
ub = c(30, 30, 30000) # upper bound
result <- hjkb(par = par, fn = minfunc, lower = lb, upper = ub)
谢谢,
【问题讨论】:
-
您可以在 R 中运行约束优化。基本上,系数是未知的,但有界。要解决此问题,您可以选择最小化平方误差(或 RMSE)。您希望理想地选择无梯度算法。查看
dfoptim库。 -
@Gautam 感谢您的回复。我实际上一直在研究这个并玩弄代码。但无法弄清楚如何正确编码。请注意,我在过去 2-3 周内只使用 R。因此,新手。有没有办法以这种方式对其进行编码以包含所有变量,而无需手动输入所有 300 个独立变量,我使用“。”与上面的 lm() 类似?
-
是的,我将在答案中发布一个示例 - 太长,无法在此处发布。
-
sapply中的参数不正确 - 它必须是向量。sapply(3:314, function(z) ... )应该可以工作。 -
我的错,你不需要它是
data.table。data.frame很好。您也可以删除库。我之前打算使用另一种方法,但后来改变了主意。
标签: r regression