首页 > 解决方案 > R:强制回归系数加起来为 1

问题描述

我正在尝试运行一个简单的 OLS 回归,其限制是两个变量的系数之和等于 1。

我想:

Y = α + β1 * x1 + β2 * x2 + β3 * x3,
where β1 + β2 = 1

我发现了如何在系数之间建立关系,例如:

β1 = 2* β2

但我还没有找到如何进行限制,例如:

β1 = 1 - β2

在这个简单的例子中我会怎么做?

data <- data.frame(
  A = c(1,2,3,4),
  B = c(3,2,2,3),
  C = c(3,3,2,3),
  D = c(5,3,3,4)
)

lm(formula = 'D ~ A + B + C', data = data)

谢谢!

标签: rregressionlinear-regressionrestriction

解决方案


β1 + β2 = 1

要拥有β1 + β2 = 1您必须适合的模型是

fit <- lm(Y ~  offset(x1) + I(x2 - x1) + x3, data = df)

那是

Y = α + x1 + β2 * (x2 - x1) + β3 * x3

代入β1 = 1 - β2后;x_new = x2 - x1系数为x11。


β1 + β2 + β3 = 1

fit <- lm(Y ~  offset(x1) + I(x2 - x1) + I(x3 - x1), data = df)

Y = α + x1 + β2 * (x2 - x1) + β3 * (x3 - x1)

替换后β1 = 1 - β2 - β3


β1 + β2 + β3 + ... = 1

我认为模式很清楚......您只需x1从剩余变量(x2, x3, ...)中减去一个变量 , 并将该变量的系数x1, 设为 1。


示例 β1 + β2 = 1

# Data
df <- iris[, 1:4]
colnames(df) <- c("Y", paste0("x", 1:3, collaapse=""))

# β1 + β2 = 1
fit <- lm(Y ~  offset(x1) + I(x2 - x1) + x3, data = df)
coef_2 <- coef(fit)
beta_1 <- 1 - coef_2[2]
beta_2 <- coef_2[2]

推荐阅读