コードは他のサンプルでは正常に動作していますが、いくつかのサンプルではグラフが収束していないことが示されています。
「より緩やかな収束基準を検討するか、「反復オプション」で「現在の推定値を受け入れる」を選択してください。 失敗: 目的関数を下げることはできません
コードは以下の通りですが、うまく動作しないサンプルを添付します。
Names Default To Here( 1 );
dt= currentdatatable();
New Column( "Model",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Parameter(
{p = 0.29, x0 = 15, m0 = 1.2, x1 = 30, m1 = 5},
p * (1 - Exp( -(X_mm / x0) ^ m0 )) + (1 - p) * (1
-Exp( -(X_mm / x1) ^ m1 ))
)
),
);
nlin = dt << Nonlinear(
SendToByGroup( Bygroup Default ),
Y( Ln_C ),
X( :Model ),
Iteration Limit( 1000 ),
Unthreaded( 1 ),
QuasiNewton BFGS,
//Newton,
Finish,
By( Sample_ID ),
);
例を提供していただきありがとうございます。 問題を診断するときに役立ちます。
インタラクティブに Nonlinear を起動し、各サンプルのモデルを適合させました。 私も同じ通知を見ました。 これは、収束を判断するために使用した基準に基づいています。 どの基準も満たされませんでした。 その一方で、あなたはフィット感が良いです! SSE は比較的小さいです。
データの問題や不適切なモデルではないと思います。 実際、[リセット] をクリックしてから [実行] をクリックしました。 2 回目では、すべてのサンプルについて勾配基準によって収束しました。
ありがとうございます。[リセットして実行] をクリックすると、データが勾配基準に従って収束されます。 ただし、この出力をさらなる分析に使用するため、グラフをリセットするのではなく、スクリプト内で自動化したい場合はどうなるでしょうか。 そして、これらのサンプルだけが最初の試行では収束されないため、スクリプトを使用してこれを自動化する方法。
収束に失敗した場合に 1 回のリセットと実行が必要と思われる場合は、スクリプトで各サンプルにメッセージを連続して送信できます。 Reset および Go メッセージについては、「スクリプト インデックス」を参照してください。
