非線形曲線フィッティングのパラメータ境界1000以上のサンプルのデータポイントにフィッティングしようとしています。Biexponential 5P関数が最も良いフィッティング結果をもたらすことが分かりました。しかし、同じサンプルでもトレンドからわずかに外れたデータポイントが1つか2つあると、フィッティングが非常におかしくなります。典型的な母集団の場合、減衰率パラメータは約0.2で、これらのサンプルではフィッティングで10の範囲の結果が得られます。非線形フィッティングの「パラメータ境界」と反復回数制限のオプションを増やすことで、この問題は解決できます。しかし、GUIを使って手動でこれを行うのは不可能です。
パラメータの境界と反復回数を「グローバルに」(すべてのサンプルに対して)設定する方法はありますか?
スクリプト オプションも試しましたが、JSL スクリプトに精通していないため、以下のスクリプトで適合結果を表示できませんでした。
Names Default To Here( 1 );
dt = Current Data Table();
obj = Nonlinear( Y( :data ), X( :data Predictor ), By( :ID ) );
obj << Go;
obj << Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 )
);
obj << Iteration Limit( 10000 );
obj << Finish;
G = obj << Get Estimates;
Show( G );
obj << Report View( "Summary" );
obj << get estimates;
注: オリジナルの JSL は txnelson によって JSL 表示ボックスに移動されました
基本的なデータ分析とモデリングRe: 非線形曲線フィッティングのパラメータ境界こんにちは@ユーガー 、
JSLを使わずにこれを実現する方法を説明します。プロセスの仕組みを理解していただくためです(開始セクションは除く)。まず、空のパラメータ値を提供する数式列を作成します。この数式列を変更することで、非線形プラットフォームでデータに最適な値を見つけられます。まず、数式列を作成します(簡単なスクリプトをここに追加しましたが、手動で作成することもできます)。
dt=current data table();
dt<
<NEW column=""></NEW>
<P>準備ができたら、非線形プラットフォームを開き、「X, 予測式」ロールに数式列を、Yセクションに興味のあるYを入力し、「実行」をクリックします。プラットフォームが起動したら、赤いボタンをクリックして「パラメータ境界」を選択し、使用したい限界値を入力します。</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76921iB16E7281FC0917D7/Ben_BarrIngh_0-1749874842390.png" role="button" title="Ben_BarrIngh_0-1749874842390.png" alt="Ben_BarrIngh_0-1749874842390.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76922i0E0E2181BA64F9AD/Ben_BarrIngh_1-1749874859915.png" role="button" title="Ben_BarrIngh_1-1749874859915.png" alt="Ben_BarrIngh_1-1749874859915.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <BR /> <P>次に、「Go」を使用して非線形プラットフォームを実行し、それらの境界で推定されたパラメータを取得できます。</P> <BR /> <P>お役に立てれば幸いです!</P> <P>ありがとう、</P> <P>ベン</P> <BR /> <BR />
Re: 非線形曲線フィッティングのパラメータ境界こんにちは、ベン。
ご返信ありがとうございます。しかし、これは既に実行できており、私が求めているものではありません。投稿でも述べたように、1000以上のサンプルのデータポイントにフィッティングしようとしており、これは1000以上の曲線をフィッティングすることを意味します。そのため、非線形プラットフォームでは、「By」セクションの「ID」列も使用する必要があります。(「Group」オプションはFit Curveでは機能するのに、なぜかここでは機能しません。)
複数のサンプルがある場合は、説明されている手順(赤いボタンをクリックして「パラメータ境界」を選択し、使用したい境界値を入力する)を各サンプルごとに手動で行う必要があります。サンプル数が数個であればこれで問題ないかもしれませんが、1000個以上の場合は問題です。私が求めているのは、1000個以上のサンプルすべてに対して、パラメータ境界と反復回数を一度に設定できることです。
Re: 非線形曲線フィッティングのパラメータ境界こんにちは@ユーガー 、
グループ項を使用していない場合でも、設定されたパラメータ境界は1000以上のサンプルすべてに対してグローバルに設定されます(また、非線形モデルでグループ化が機能しない理由は、グループ自体を非線形モデルに入力する予測式に統合する必要があるためです)。お持ちのスクリプトは動作するはずですが、2行目で「Go」を実行する必要はありません。プラットフォームは変更を加える前に実行されているため、パラメータ境界は追加されません。以下は、「結合データテーブル」ツールを使用して単一のレポートを作成し、各サンプルの値がどのように変化したかを簡単に確認できる例です。
dt=current data table();
id_no=N Items(Associative Array(dt:Batch)<
<GET keys=""></GET>
<BR /> <BR />
Re: 非線形曲線フィッティングのパラメータ境界Fit Curve は、多くの曲線 ID がある場合に最適ですが、フィッティング関数が Fit Curve の事前プログラムされた関数のライブラリに含まれていない場合は、Fit Nonlinear が必要です。
お気づきのとおり、「グループ」は「非線形フィット」では異なる動作をするため、今回のケースでは使用すべきではありません。「By」を使用して曲線をグループ化することをお勧めします。
I prefer using the following syntax for this. Could you try this and let us know if it works:</CODE></P>
<PRE><CODE class=" language-jsl">Nonlinear(
Y( :data ),
X( :data predictor),
By( :ID ),
Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 ) ),
Iteration Limit( 10000 )
);
Re: 非線形曲線フィッティングのパラメータ境界ありがとうベン、
機能的には動作します。ただし、非線形プラットフォームでは別のソルバーを使用しているようです。フィッティング結果の約50%は許容範囲外です。
Re: 非線形曲線フィッティングのパラメータ境界こんにちは、クリスチャン。
ご返信ありがとうございます。おっしゃる通り、Fit Curve の方がはるかに優れているようです。私が使用しているフィッティング関数( 双指数関数5P )は、Fit Curve のプリプログラム関数ライブラリに含まれています。しかし、先ほども申し上げたように、同じサンプル(5%)に対してフィッティング結果が非常に不自然だったため、Fit Nonlinear オプションを試してみたかったのです。しかし、境界値を適用しても、Fit Nonlinear ではサンプルの約50%しか正確にフィッティングできません。
私の質問は次のとおりです。
- フィット曲線にパラメータ境界を追加することは可能ですか?
- そうでない場合、Fit Curve と同じソルバーと設定を Fit Nonlinear に使用することは可能ですか?
Re: 非線形曲線フィッティングのパラメータ境界こんにちは@ユーガー 、反復制限を広げてみたり、SSE グリッドを使用して、サンプルに適切なパラメータ値を取得できるかどうかを確認したりすることもできます。また、デフォルトとして使用されている「Netwon」オプションとは異なる反復を実行することも検討してください。
結果の 50% が個別に失敗している理由は、すべてのサンプルを使用すると全体的な SSE モデルの適合への影響が軽減され、単一のポイントが失敗の原因となる可能性が減るのに対し、単一のポイントのみが分析されると、失敗の可能性が高くなるためです。
Re: 非線形曲線フィッティングのパラメータ境界こんにちは、eugurさん
1) 私の知る限り、Fit Curve はパラメータ境界をサポートしていません。2) Fit Curve は Nonlinear とは異なるアルゴリズムを使用するため、同じソルバーは使用できません。
「曲線のあてはめ」と「非線形回帰」は一見似ているように見えますが、実際には内部では全く異なります。「非線形回帰」は、従来の非線形最小二乗回帰ソルバーです。柔軟性は高いものの、手作業による入力が最も多く必要になります。非線形回帰は線形回帰とは異なり、非決定論的であるため、たとえ「類似した」データセットであっても、与えられた初期推定値セットが常に収束するという保証はありません。これはJMPに限ったことではありません。私の経験では、ほとんどの非線形ソルバーは時折、手作業による「調整」を必要とします。そのため、数百ものデータセットを一括処理するのはなかなか難しい課題となります(不可能ではありませんが)。そこでJMPの「曲線のあてはめ」プラットフォームが役立ちます。
Fit Curve は、最適化されたプリセット関数の小さなライブラリを備えた特殊なケースです。完全に汎用的な非線形回帰ソルバーは使用せず、代わりに各関数はその関数用にカスタム作成された特別なアルゴリズムを使用します。これにより、非常に高速になり、さまざまなデータに対して収束する可能性が高くなります。(私はソフトウェア開発者でも数学者でもないので、非技術的な説明をお許しください。これは私の基本的な理解です!)私の知る限り、Fit Curve はパラメータ境界をサポートしていません。おそらく、通常は必要がないためでしょう。状況によってパラメータ境界が必要な場合は、Nonlinear プラットフォームを使用する必要があります。Ben はいくつかの優れたアイデアを提案してくれました。Fit Curve が機能しない場合は、Nonlinear + スクリプトを使用して試すことができる他の方法もありますが、私としては、まず Fit Curve を試し、それが機能しない場合のバックアップ オプションとしてのみ Fit Nonlinear を使用することをお勧めします。
興味深いと思われるリンクをいくつか紹介します。
パラメータ制限の設定例
適合曲線モデルの統計詳細
非線形曲線と近似曲線では結果が異なりますか? - JMPユーザーコミュニティ
-キリスト教徒