複数のパラメーターを使用してカスタマイズされた非線形モデルを適合させる方法以下の式で新しい列を作成した非線形モデルがあります。 このモデルは、各段階を特徴付ける 3 つのパラメーターを持つ 2 つの定義された段階を持つシグモイド曲線に似ていると説明されています。 K1、Y1、および P1 パラメータによって記述される初期段階と、K2、Y2、および P2 パラメータによって記述される第 2 段階。 また、各パラメーターに対して、フィッティングを容易にするために初期値 0.1 を割り当てた新しい列を作成しました (以下のスクリプトにはありません)。 ただし、値は 0 から 1 までのサンプル間で大きく異なる場合があります。
同じモデルを当てはめ、最適に合わせてこれらのパラメータ値を取得する必要があるサンプルのリストがあります。 最小 RMSE または最大 R2 に基づいて測定したい最適なフィット。 しかし、これを行う方法がわかりません。 実験データ (:Production) とモデル (:Model) の間の SSQ として計算している損失関数の列を作成しました。これは、モデルを適合させるときに役立つことを願っています。
col7 = New Column("Model");
col7<< set formula (Parameter({Y1_Y1_0 = 0.001, K1_K1_0 = 0.001, P1_P1_0 = 0.001, Y2_Y2_0 = 0.001, K2_K2_0 = 0.001, P2_P2_0 = 0.001},
Y1_Y1_0 * Exp(-Exp(((K1_K1_0 * Exp()) / Y1_Y1_0) * (P1_P1_0 - :Days))) + Y2_Y2_0 * Exp(-Exp(((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 - :Days)))));
col8=newcolumn("Error");
col8<< set Formula(SSQ(:Production - :Model));
col8<<EVALFORMULA></EVALFORMULA>
モデルを 1 つのサンプルに当てはめた場合の結果のスクリプトの例として
Nonlinear(
Y( :Methane Yield ),
X( :Model ),
Loss( :Err ),
Iteration Limit( 1000 ),
Numeric Derivatives Only( 1 ),
Unthreaded( 1 ),
Loss is Neg LogLikelihood( 1 ),
Newton,
Finish,
Where( :Sample == "M301" )
);
今のところ、Excel Solver を使用しているので、これらの分析を自動化しようとしています。
データ テーブル内のすべてのサンプルに対してモデル フィッティングを自動的に実行し、RSME が最小の場合 (損失関数が最小の場合に正しい場合) または R2 が最大の場合のパラメーターを取得する方法について、誰かがフィードバックを提供できますか?
各列のパラメータ値は自動的に更新されますか?
ありがとう
イボ
Re: 複数のパラメータを使用してカスタマイズされた非線形モデルを適合させる方法ありがとう。Re: 複数のパラメータを使用してカスタマイズされた非線形モデルを適合させる方法デフォルトの損失関数は最小二乗であるため、JMP は観測された応答と予測された応答の差を自動的に二乗します。
パラメータの推定値が高くなり、収束が難しくなると思います。 繰り返しますが、スクリプトで自動化する前に、非線形を対話的に使用して問題を解決します。
この問題については、JMP テクニカル サポートにお問い合わせください。 (support@jmp.com)
Re: 複数のパラメータを使用してカスタマイズされた非線形モデルを適合させる方法はい、それは私が使用しているモデルです。損失関数を指定するには、どの関数を使用すればよいですか?Re: 複数のパラメータを使用してカスタマイズされた非線形モデルを適合させる方法これはあなたが当てはめようとしているモデルですか?

損失関数は SSQ() 関数を使用しないでください。 非線形プラットフォームは、各行の損失を自動的に結合します。
Re: 複数のパラメータを使用してカスタマイズされた非線形モデルを適合させる方法開始値は、同じデータに対して Excel ソルバーで得られた結果に基づいて使用されました。
JMP で同様の結果が得られなかったり、良好な収束が得られなかったりするのは少し驚くべきことです。 また、JMP は Loss 関数を使用して反復を実行するのに苦労し、最終的にクラッシュします。 損失関数なしで実行すると、収束しません。
Re: 複数のパラメータを使用してカスタマイズされた非線形モデルを適合させる方法もう 1 つコメント: 最適なセットアップを決定するまで、非線形でインタラクティブに作業することをお勧めします。 スクリプトを同時に機能させようとするよりも、この方法の方がおそらく速くて簡単です。 その後、スクリプトを保存して開発を続けることができます。
Re: 複数のパラメータを使用してカスタマイズされた非線形モデルを適合させる方法まず、Finish オプションは永遠に続くという意味ではありません。 これは、ユーザー インターフェイスで [ステップ] ボタンの代わりに [実行] ボタンをクリックするのと同じです。 停止規則 (基準) の 1 つが達成されるまで続きます。 反復回数のデフォルトの制限は 60 です。 もう一度実行して、非線形の作業を難しくして、適切な解を得ることができます。 必要に応じて、他の基準を変更 (緩和または強化) することもできます。
第 2 に、収束が遅いということは、開始値の選択が不適切であることを示している可能性があります。 データのこれらの値をどのように決定しましたか?
Re: 複数のパラメータを使用してカスタマイズされた非線形モデルを適合させる方法私のJSLの経験は最小限です。 残念ながら始めたばかりです。 JMP14を使用しています。 フィードバックをお寄せいただきありがとうございます。
あなたが提案したようにスクリプトを修正し(以下)、実行しました。 それは私に見積もりを与えますが、コマンド :Finish が要求すると思うので、「無限」になるまで反復を実行しません。 あれは正しいですか? 60までしかありません。 したがって、出力フィッティングはあまり良くなく、パラメーターの推定値が高すぎるか負の値になります。つまり、パラメーターの制約を設定する必要があるかもしれません
obj = Nonlinear(Y( :Methane Yield ), X( :Model ), Loss( :Err ), Finish(), By( :Sample ));
obj << go;
obj << get estimates;
_xx = obj << Xpath("//OutlineBox[@helpKey='Nonlinear Solution']");
fit_dt = (_xx[1]<<FIND></FIND>Re: 複数のパラメータを使用してカスタマイズされた非線形モデルを適合させる方法非線形モデリングに関しては、収束基準、目的の設定にしか慣れていません。何年も前、今日と比べて計算能力が弱かったとき、私は通常、SAS を使用して複数の開始見積もりのループを作成し、残りの結果を比較していました。 そのため、あなたの「ベスト モデル」のリクエストにはお答えできません。
使用している JMP のバージョンやスクリプトの知識については言及していません。 このスクリプトを理解するには、いくつかの基本的な構文を知っておく必要があります。 以下は、JMP Scripting Index>Objects>Nonlinear>CopyByGroupScript からスクリプトを変更したものです。
それ :
- 「by」列を作成します。例では、これは :Sample 列になります
- レポート obj にハンドル/参照を割り当てます。ここでは、スクリプトの変更を使用しますWhere( :サンプル == "M301" )にBy(:サンプル)
- 「get」ステートメントを使用して結果のリストを作成する方法を示します。 見るJMP Scripting Index>Objects>利用可能なメッセージの非線形。
- または、結果の表を作成することもできます。JMP レポート (obj) は、表示ボックスのネストされたリストです。 たとえば、GUI からグループごとに 1 つの特定のテーブル ボックスがあり、右クリックして [結合されたデータ テーブルの作成] を選択すると、この JSL は同じことを行います。Xpath は、表示ボックスを見つけるための一般的な方法です。 Find は柔軟性に欠けますが、構文的に読みやすくなっています。 以下の Xpath ステートメントは、ソリューションである obj レポート内の各アウトライン ボックスへのハンドル/参照を返します。 各ソリューション アウトライン ボックスには 2 つのテーブル ボックスがあり、構造を見ればわかります。必要なのは、結合されたデータ テーブルを作成するメッセージを送信するために、これらのテーブル ボックスの最初の出現 ecah だけです。
これは、開始する場所を提供する必要があります。最初に以下のスクリプトを実行して、お使いのバージョンの JMP で実行されることを確認してから、変更します。 これは、このサンプル スクリプトの見積もりの表の図です。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Nonlinear Examples/US Population.jmp" );
dt << New Column( "_bycol",
Character,
Nominal,
set values( Repeat( {"A", "B"}, N Rows( dt ) )[1 :: N Rows( dt )] )
);
obj = Nonlinear( Y( :pop ), X( :Name( "X-formula" ) ), Finish(), By( _bycol )) ;
obj << go;
//returns a list of vectors where each vector, contains the parameters estimates
obj << get estimates;
//also see Get SSE, Get Parameter Names, Get CI
//Alternately, make a table
_xx = obj << Xpath("//OutlineBox[@helpKey='Nonlinear Solution']");
//only 2 groups so only 2 are found; each contains two sub tables
fit_dt = (_xx[1]<<FIND></FIND>