我正在拟合一些不符合幂律的数据集,数据在X和Y方向上有不对称误差,我希望能够对拟合参数引入约束(即不低于0,或在一定范围内)。
使用Scipy.ODR,我可以很好地拟合数据,包括两个轴上的不对称误差,但是我似乎无法在文档中找到任何方法来引入拟合参数的界限,网上的讨论似乎表明这是完全不可能的:https://stackoverflow.com/a/17786438/19086741
使用Lmfit,我也可以很好地拟合数据,并可以为拟合的参数引入界限。然而,网上的讨论再次指出,Lmfit无法处理不对称误差,以及两个轴上的误差。
是否有一些模块,或者也许我在这些模块中缺少了一些东西,可以让我在这种情况下同时满足我的两个要求?非常感谢。
1条答案
按热度按时间6vl6ewon1#
很抱歉,我没有一个好的答案给你。正如你所注意到的,Lmfit不支持ODR回归,它允许在我认为这在原则上是可能的。不幸的是,ODR与其他最小化例程的接口非常不同,这使得将 Package 器作为“lmfit的另一种可能的求解算法”有点挑战性。我敢肯定,没有一个开发人员会反对有人尝试这一点,但这需要一些努力。
FWIW,你说“两个轴”就好像你确定正好有两个轴。ODR正好支持一个自变量:
lmfit
不限于该假设。你还说lmfit不能处理不对称的不确定性。这只是部分正确的。
lmfit.Model
接口只允许每个数据点有一个不确定性值。但是使用lmfit.minimize
接口,你可以编写自己的目标函数来计算你想要最小化的数组,这样就可以以任何你想要的方式加权“数据”和“模型”的一些残差。