如果您确实需要使用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的下限(尽管这可能无法保证严格不等式)。希望这有所帮助。
pcls
,就像我一样。 - joran