R中的约束线性回归系数[重复]
Posted
技术标签:
【中文标题】R中的约束线性回归系数[重复]【英文标题】:Constrained linear regression coefficients in R [duplicate] 【发布时间】:2013-09-05 03:21:59 【问题描述】:我正在估计 R 中的几个普通最小二乘线性回归。我想限制回归中的估计系数,使它们相同。例如,我有以下内容:
z1 ~ x + y
z2 ~ x + y
我希望第一个回归中 y 的估计系数等于第二个回归中 x 的估计系数。
有没有直接的方法来做到这一点?提前致谢。
更详细的编辑
我试图估计一个线性需求函数系统,其中相应的福利函数是二次函数。福利函数的形式为:
W = 0.5*ax*(Qx^2) + 0.5*ay*(Qy^2) + 0.5*bxy*Qx*Qy + 0.5*byx*Qy*Qx + cx*Qx + cy*Qy
因此,需求函数为:
dW/dQx = Px = 2*0.5*ax*Qx + 0 + 0.5*bxy*Qy + 0.5*byx*Qy + 0 + cx
dW/dQx = Px = ax*Qx + 0.5*(bxy + byx)*Qy + cx
和
dW/dQy = Py = ay*Qy + 0.5*(byx + bxy)*Qx + cy
我想约束系统,使 byx = bxy(福利函数中的叉积系数)。如果这个条件成立,两个需求函数变为:
Px = ax*Qx + bxy*Qy + cy
Py = ay*Qy + bxy*Qy + cy
我有价格(Px
和 Py
)和数量(Qx
和 Qy
)数据,但我真正感兴趣的是我没有数据的福利(W
) .
我知道如何计算和编码约束最小二乘的所有矩阵公式(这需要相当多的代码来获得lm()
的标准系数、标准误差、拟合度量等)。但我希望可能存在一个现有的 R 函数(即可以对 lm()
函数执行的操作),这样我就不必编写所有这些代码。
【问题讨论】:
好吧,您可以取平方和(作为两个模型的平方和之和)并将其最小化。由于您有 5 个参数,因此手动解决该问题可能会有点冗长,但 CAS 可能会有所帮助。或者您使用数字求解器。 也许包quadprog
可以做到这一点。
这个问题让我很感兴趣,但我不知道如何解决它。如果您在统计姊妹网站 Cross Validated 上问同样的问题,您会得到很好的答案,也许我可以编写代码。或者,也许我可以在未来提供赏金,或者只是找时间解决它。也许贝叶斯比常客更容易做到。
谢谢马克...我希望我不必自己编写所有矩阵操作,但如果迫在眉睫,那很可能是我必须做的。
【参考方案1】:
对于您指定的回归:
Px = ax*Qx + bxy*Qy + cy
Py = ay*Qy + bxy*Qy + cy
我们可以引入一个分组因子:
id <- factor(rep.int(c("Px", "Py"), c(length(Px), length(Py))),
levels = c("Px", "Py"))
我们还需要合并数据:
z <- c(Px, Py) ## response
x <- c(Qx, Qy) ## covariate 1
y <- c(Qy, Qy) ## covariate 2
然后我们可以使用lm
和一个公式来拟合一个线性模型:
z ~ x + y + x:id
【讨论】:
【参考方案2】:如果 x 和 y 值相同,则可以使用此模型:
lm( I(z1+z2)~ x +y ) # Need to divide coefficients by 2
如果它们是单独的数据,那么您可以在将 z2 重命名为 z1 后重新绑定这两个数据集。
【讨论】:
感谢您的回答。不幸的是,我不希望系数在同一个变量上相同......我希望系数固定在叉积项上(如果我要创建估计系数矩阵,则为非原则对角线元素我所有的模型)。 您的模型似乎没有任何交叉产品,因此您似乎希望得到一个理论上尚未提出的问题的答案,或者正如 SO 所预期的那样,举个例子。 抱歉,我不清楚。我立即回答,没有思考我在写什么,以及随之而来的假设知识。我将在我的问题中放置一个更详细的示例以使其更清楚。以上是关于R中的约束线性回归系数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 sklearn 线性回归,如何将计算出的回归系数约束为大于 0?