R:如何通过lm或nls为模型添加约束?

inf*_*ous 4 r nls

我估计R中的模型,我想添加约束,这将强制其中一个系数小于另一个系数.我怎样才能做到这一点?

Gle*_*n_b 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的下限(尽管这可能无法保证严格的不等式).

希望有所帮助.