如何通过lm或nls为模型添加约束条件?

4

我在R中估计了一个模型,现在想添加一个约束条件,强制其中一个系数小于另一个系数。我该如何做?


2
一点点的谷歌搜索可能会让你找到来自 mgvc 包中的 pcls,就像我一样。 - joran
@BenBolker 是的,抱歉。现在编辑已经太晚了... - joran
1个回答

8
如果您确实需要使用lm或nls,而无法使用任何可以指定约束条件的工具,则一种方法是重新参数化模型,使得系数差异本身成为一个参数。
例如,如果您有一个包含b1 * x1 + b2 * x2的模型,但其中b2> b1,您可以将其编码为b1 * x3 + d * x2,其中x3 = x1 + x2,d代表b2-b1。现在,您需要强制执行d> 0。您只需再次重新参数化,比如令d = exp(k),然后使用nls拟合新模型b1 * x3 + exp(k)* x2,其中您的参数是b1和k。一旦估计出来,您就可以计算出b2的估计值,即b1 + exp(k)。那么,b1保证小于b2。
但是,nls允许您指定上下限,因此您应该能够将0作为d的下限(尽管这可能无法保证严格不等式)。
希望这有所帮助。

1
nls 中的上下限仅适用于端口算法。 - Matthew Plourde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接