R中具有上限和/或下限的线性回归?

机器算法验证 回归 线性模型
2022-03-16 11:09:58

有没有办法对 R 中的系数进行上限和/或下限的线性回归?

2个回答

是的,你可以在拉万做到这一点。

这是一个例子。我们拟合回归模型,并找到 0.10 的估计值。然后使用 lavaan 拟合一个模型,并得到相同的参数估计。然后用 b1 必须大于 0 的约束条件拟合模型。

library(lavaan)
set.seed(1234)
df <- as.data.frame(matrix(rnorm(500), ncol=2))
names(df) <- c("x", "y")
summary(glm(y ~ x, data=df))

lavModel1 <- 'y ~ b1*x'

summary(sem(lavModel1, df))

lavModel2 <- 'y ~ b1*x
  b1 > 0'
summary(sem(lavModel2, df))

是的,您可以通过将线性回归重新定义为优化问题(例如残差平方和成本函数)并使用您想要的约束来解决它。因此,使用来自@Jeremy 的数字作为示例:(请注意,在此示例中,我们正在拟合没有截距的模型)

set.seed(1234)
df <- as.data.frame(matrix(rnorm(500), ncol=2))
names(df) <- c("x", "y")
CostFunction <- function(theta){sum( (df$y - theta*df$x)^2)}
theta_0 =1; 
theta_opt <- optim(fn= CostFunction, lower=0, par = theta_0, method="L-BFGS-B")

最终,您希望用于约束回归的任何包都会做同样的事情:制定成本函数并解决约束优化问题。对于这里显示的普通最小二乘法,使用“简单” BFGS变体的“普通”优化器就可以了;更难的问题(例如 GLMM)将需要更多像BOBYQA这样的外来野兽。