【发布时间】:2011-11-18 16:37:45
【问题描述】:
我编写了一些代码来执行蒙特卡罗模拟并生成信号强度与时间的曲线。这种曲线的形状取决于各种参数,我的合作者希望通过我正在模拟的实验的“现实版本”来确定其中两个参数。
我们已准备好将她的实验数据与我的模拟曲线进行比较,但现在我被卡住了,因为我还不能进行任何拟合(到目前为止,我已经用模拟噪声数据替换了实验数据以进行测试)。我尝试使用scipy.optimize.leastsq,它以代码2退出(根据文档,这意味着拟合成功),但它主要只是返回值(不完全相同,但接近)我作为初始猜测输入,无论它们与真实值的距离有多近或多远。如果它确实报告了不同的值,那么得到的曲线仍然与真实曲线有很大的不同。
另一个观察结果是infodict['nfev'] 总是包含
The relative error between two consecutive iterates is at most 0.000000
在使用我的模拟噪声数据时,我玩弄了两个参数的真实值处于相同数量级(因为我认为使用的步长可能只会对其中一个产生明显影响)数量级,我改变了步长(参数epsfcn),但无济于事。
有谁知道我可能做错了什么,或者我可以使用什么拟合函数来代替leastsq 的?如果是这样:提前非常感谢!
编辑
按照 Russ 的建议,我现在将提供有关如何执行模拟的一些细节:我们正在研究小分子与大分子的结合。这发生的概率取决于它们的相互亲和力(亲和力是要从实验数据中提取的值之一)。一旦发生结合,我们还模拟复合体再次分解需要多长时间(解离时间常数是我们感兴趣的第二个参数)。还有许多其他参数,但它们仅在计算预期信号强度时才相关,因此与实际模拟无关。
我们从给定数量的小分子开始,每个小分子的状态都会模拟多个时间步长。在每个时间步,我们使用亲和力值来确定该分子是否与大分子结合,以防它未结合。如果它已经绑定,我们使用解离时间常数和它已经绑定的时间量来确定它是否在此步骤中解离。
在这两种情况下,参数(亲和力、解离时间常数)都用于计算概率,然后将其与随机数(0 到 1 之间)进行比较,并在此比较中取决于小分子的状态(绑定/未绑定)更改。
编辑 2
没有明确定义的函数可以确定所得曲线的形状,而且,即使形状明显可重现,但每个单独的数据点都存在随机性。 因此,我现在尝试使用optimize.fmin 而不是leastsq,但它不会收敛并在执行最大迭代次数后简单地退出。
编辑 3
根据 Andrea 的建议,我上传了 sample plot。我真的不认为提供样本数据会有很大帮助,它只是每个 x 值(时间)的一个 y 值(信号强度)......
【问题讨论】:
-
如果问题仍然存在,如果您可以展示您正在使用的数据和拟合过程的示例,将会有所帮助。
-
它看起来像一个有趣的应用程序,你应该放一些图或一些示例数据,这样你的问题会得到更多的关注。
-
@Andrea Zonca 正如你所建议的,我已经上传了一个情节。不过,我省略了样本数据,因为每个 y 值只有一个 x 值,这可能不会告诉任何人太多...谢谢!
-
你上传的情节是404。
标签: python scipy scientific-computing curve-fitting least-squares