如何使用回归固定一个系数并拟合其他系数

机器算法验证 r 多重回归 套索 网络 约束回归
2022-02-08 10:05:23

我想手动修复某个系数,比如,然后将系数拟合到所有其他预测变量,同时在模型中保持β1=1.0β1=1.0

如何使用 R 实现这一目标?如果可能的话,我特别想使用 LASSO ( glmnet)。

或者,如何将此系数限制在特定范围内,例如0.5β11.0

4个回答

好吧,让我们想想。你有:

Y=b0+b1x1+b2x2+e

(保持简单)你想强迫b1=1所以你要

Y=b0+x1+b2x2+e

所以你可以减去x1从每一边离开:

Ynew=Yx1=b0+b2x2+e

然后可以估计b2.

您需要使用如下offset参数:

library(glmnet)
x=matrix(rnorm(100*20),100,20)
x1=matrix(rnorm(100),100,1)
y=rnorm(100)
fit1=glmnet(x,y,offset=x1)
fit1$offset
print(fit1)

关于范围...我认为尚未在glmnet. 如果他们使用某种数值方法,您可能想深入研究 R 代码并尝试在那里限制它,但您需要一个良好、扎实的编程背景。

关于将系数约束在一个范围内,贝叶斯估计方法是实现这一目标的一种方法。

特别是,人们将依赖马尔可夫链蒙特卡洛。首先,考虑一个 Gibbs 采样算法,这是在没有限制的情况下将 MCMC 拟合到贝叶斯框架中的方式。在 Gibbs 抽样中,在算法的每个步骤中,您从每个参数(或参数组)的后验分布中进行抽样,条件是数据和所有其他参数。Wikipedia 很好地总结了这种方法。

限制范围的一种方法是应用 Metropolis-Hastings 步骤。基本思想是简单地丢弃任何超出您界限的模拟变量。然后,您可以继续重新采样,直到在您的范围内,然后再进行下一次迭代。这样做的缺点是您可能会在模拟很多次时卡住,这会减慢 MCMC。另一种方法,最初由John Geweke几篇 论文中开发,并在Rodriguez-Yam、Davis、Sharpe的一篇论文中进行了扩展,是从受约束的多元正态分布进行模拟。这种方法可以处理参数的线性和非线性不等式约束,我已经取得了一些成功。

我不熟悉 LASSO 或glmnet,但是lavaan(“潜在变量分析”的缩写)促进了具有等式约束和单界不等式约束的多个回归模型(请参阅本 PDF 第 7 页上的表格,“lavaan:一个 R 包用于结构方程建模”)。我不知道您是否可以同时设置系数的上限和下限,但也许您可以使用单独的行添加每个界限,例如:

Coefficient>.49999999
Coefficient<1.0000001

当然,如果您在拟合模型之前对所有内容都进行了标准化,那么无论如何您都不必担心对回归系数施加上限 1。我会说你最好在这种情况下省略它,以防万一出现问题!lavaan 毕竟仍处于测试阶段......到目前为止,我在自己有限的使用中看到了一些有点可疑的结果。)