我已经编写了一些代码,执行 Monte Carlo 模拟并生成与时间相关的信号强度曲线。这种曲线的形状取决于各种参数,其中两个是我的合作者想通过我正在模拟的实验的“真实版本”来确定的。
我们准备将她的实验数据与我的模拟曲线进行比较,但现在我卡住了,因为我还没有能够执行任何拟合(到目前为止,我已经用模拟的嘈杂数据替换了实验数据进行测试)。我尝试使用 scipy.optimize.leastsq,它以代码 2 退出(根据文档,这意味着拟合成功),但它大多数情况下只返回我作为初始猜测输入的值(不完全相同,但接近),无论它们离真实值有多远或接近。如果它报告不同的值,结果曲线仍然与真实曲线存在显着差异。
另一个观察结果是 infodict['nfev'] 不可避免地包含
在使用模拟噪声数据时,我尝试过将两个参数的真实值设为相同数量级(因为我认为使用的步长可能只会影响其中一个参数),也尝试过将其设置为非常不同的数量级,并且还变化了步长(参数
是否有人知道我可能做错了什么,或者我可以使用什么拟合函数代替
编辑:
如Russ所建议的,我现在将详细介绍模拟的过程:我们正在研究小分子与大分子的结合。这种结合发生的概率取决于它们的亲和力(亲和力是从实验数据中提取出来的值之一)。一旦发生结合,我们还模拟了复合物再次解离的时间(解离时间常数是我们感兴趣的第二个参数)。还有一些其他参数,但只有在计算预期信号强度时才变得相关,因此对于实际模拟并不相关。
我们首先给定了一定数量的小分子,每个小分子的状态都被模拟了一定的时间步长。在每个时间步长中,我们使用亲和力值来确定该分子是否与大分子结合(如果它尚未结合)。如果它已经结合,我们使用解离时间常数和它已经结合的时间来确定它是否在此步中解离。
在这两种情况下,参数(亲和力,解离时间常数)都用于计算概率,然后将其与随机数(介于0和1之间)进行比较,并且根据比较结果确定小分子的状态(结合/未结合)是否发生变化。
编辑2: 没有一个明确定义的函数可以确定生成曲线的形状,即使形状显然是可再现的,每个数据点仍有一定的随机性。因此,我现在尝试使用
编辑3:
正如Andrea所建议的,我上传了一个样本图。我真的不认为提供样本数据会有很大帮助,因为每个x值(时间)只有一个y值(信号强度)...
我们准备将她的实验数据与我的模拟曲线进行比较,但现在我卡住了,因为我还没有能够执行任何拟合(到目前为止,我已经用模拟的嘈杂数据替换了实验数据进行测试)。我尝试使用 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所建议的,我上传了一个样本图。我真的不认为提供样本数据会有很大帮助,因为每个x值(时间)只有一个y值(信号强度)...