r - 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)
谢谢!
解决方案
β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
系数为x1
1。
β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]
推荐阅读
- sql - 缺少数据部分通过带有excel vba的sql导入过滤后的文本文件数据
- r - R nls(); nlsModel 中的错误:初始参数估计处的奇异梯度矩阵
- shell - 将下载的文件移动到特定目录 - 为傻瓜做 inotify?
- java - 如何指示语法不在 ANTLR 侦听器中生成某些方法?
- javascript - 如何在javascript中添加&&到onclick和if函数?非常感谢
- html - 以下代码无法将输入的数据保存在 django 的数据库中
- c# - CONCATENATE 在使用 c# 的互操作 excel 中不起作用
- asp.net-core-mvc - 在具有通用接口的asp.net核心的启动类中动态注册服务
- shell - 尝试将字符串回显到文件时出错
- npm - 发生意外错误:“EPERM:Yarn 中不允许操作