モンテカルロシミュレーションを実行し、信号強度と時間の曲線を生成するコードを作成しました。このような曲線の形状はさまざまなパラメーターに依存しますが、そのうちの2つは、私がシミュレートしている実験の「実際のバージョン」によって決定したいと考えています。
彼女の実験データを私のシミュレートされた曲線と比較する準備ができていますが、まだフィットを実行できていないため、今は行き詰まっています(これまでのところ、実験データをテストのためにシミュレートされたノイズの多いデータに置き換えました)。コード2で終了するを使用してみscipy.optimize.leastsq
ました(ドキュメントによると、これはフィッティングが成功したことを意味します)が、ほとんどの場合、最初の推測として入力した値を返します(まったく同じではありませんが、近いです)。それらは真の値に近いか遠いものでした。異なる値を報告する場合でも、結果の曲線は実際の曲線とは大幅に異なります。
別の観察は、infodict['nfev']
常に含まれているということです
The relative error between two consecutive iterates is at most 0.000000
シミュレートされたノイズの多いデータを使用している間、両方のパラメーターの真の値が同じ桁であり(使用中のステップサイズが他の方法ではどちらか一方にしか影響しないと考えたため)、桁が大きく異なることを試してみました。 、およびステップサイズ(パラメータepsfcn
)を変更しましたが、役に立ちませんでした。
誰かが私が間違っているかもしれないこと、または私が代わりに使用できるフィッティング関数を知っleastsq
ていますか?もしそうなら:事前にどうもありがとう!
編集
Russが提案したように、シミュレーションの実行方法について詳しく説明します。小さな分子が大きな分子に結合する様子を見ていきます。これは、相互の親和性に依存する確率で発生します(親和性は実験データから抽出される値の1つです)。結合が発生したら、複合体が再び崩壊するまでにかかる時間もシミュレートします(解離時定数は、関心のある2番目のパラメーターです)。他にも多くのパラメータがありますが、それらは予想される信号強度が計算されたときにのみ関連するため、実際のシミュレーションには関連しません。
まず、与えられた数の小分子から始めます。それぞれの状態は、いくつかの時間ステップでシミュレートされます。各タイムステップで、親和性の値を使用して、この分子が結合していない場合に、大きな分子に結合するかどうかを判断します。すでにバインドされている場合は、解離時定数とすでにバインドされている時間を使用して、このステップで解離するかどうかを判断します。
どちらの場合も、パラメーター(親和性、解離時定数)を使用して確率が計算され、乱数(0〜1)と比較されます。この比較では、小分子の状態(bound /アンバウンド)変更。
編集2
結果の曲線の形状を決定する明確に定義された関数はなく、形状は明らかに再現可能ですが、個々のデータポイントにはランダム性の要素があります。したがってoptimize.fmin
の代わりにをleastsq
、収束せず、最大反復回数が実行された後に終了します。
編集3
アンドレアによって提案されたように、私はサンプルプロットをアップロードしました。サンプルデータを提供することが大いに役立つとは思いません。x値(時間)ごとに1つのy値(信号強度)だけです...