複数のパラメーターを使用してカスタマイズされた非線形モデルを近似する方法以下の数式を含む新しい列を作成した非線形モデルがあります。 このモデルは、2 つの定義されたステージを備えたシグモイド曲線に似ていると説明されており、各ステージを特徴付ける 3 つのパラメーターがあります。 最初のステージは K1、Y1、および P1 パラメータで記述され、第 2 ステージは K2、Y2、および P2 パラメータで記述されます。 また、フィッティングを容易にするために、パラメーターごとに初期値 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 ソルバーを使用しているので、これらの分析を自動化しようとしています。
データ テーブル内のすべてのサンプルに対してモデル フィッティングを自動的に実行し、RSME が最小のとき (損失関数が最小のときに私が正しければ) または R2 が最大のときのパラメーターを取得する方法について、誰かがフィードバックを提供していただけないでしょうか。
各列のパラメータ値は自動的に更新されますか?
ありがとう
イボ
Re: 複数のパラメーターを使用してカスタマイズされた非線形モデルを近似する方法ありがとう。Re: 複数のパラメーターを使用してカスタマイズされた非線形モデルを近似する方法デフォルトの損失関数は最小二乗であるため、JMP は観測された応答と予測された応答の差を自動的に二乗します。
パラメータの推定値が高くなるため、収束するのは難しいと思います。 繰り返しになりますが、スクリプトで自動化する前に、非線形を対話的に使用して問題を解決します。
この問題については、JMP テクニカル サポートにお問い合わせください。 (support@jmp.com)
Re: 複数のパラメーターを使用してカスタマイズされた非線形モデルを近似する方法はい、それが私が使用しているモデルです。損失関数を指定するにはどの関数を使用すればよいでしょうか?Re: 複数のパラメーターを使用してカスタマイズされた非線形モデルを近似する方法これはあなたが当てはめようとしているモデルですか:

損失関数では SSQ() 関数を使用しないでください。 非線形プラットフォームは、各行の損失を自動的に結合します。
Re: 複数のパラメーターを使用してカスタマイズされた非線形モデルを近似する方法開始値は、同じデータに対して Excel ソルバーで得られた結果に基づいて使用されました。
JMP で同様の結果が得られなかったり、良好な収束が得られなかったりするのは少し驚くべきことです。 また、JMP は Loss 関数を使用して反復を実行するのに苦労し、最終的にはクラッシュします。 損失関数なしで実行すると、収束しません。
Re: 複数のパラメーターを使用してカスタマイズされた非線形モデルを近似する方法もう 1 つのコメント: 最適な設定を決定するまでは、Nonlinear を対話的に操作することをお勧めします。 おそらく、この方法のほうが、スクリプトを同時に動作させるよりも早く簡単に実行できるでしょう。 その後、スクリプトを保存して開発を続行できます。
Re: 複数のパラメーターを使用してカスタマイズされた非線形モデルを近似する方法まず、「終了」オプションは永遠に進むことを意味するものではありません。 これは、ユーザー インターフェイスの [ステップ] ボタンの代わりに [実行] ボタンをクリックするのと同じです。 停止ルール (基準) の 1 つが達成されるまで続きます。 反復回数のデフォルト制限は 60 です。 再度実行すると、Nonlinear の動作がさらに強化され、適切な解決策が得られます。 必要に応じて、他の基準を変更(緩和または強化)することもできます。
第 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( :Sample == "M301" )に作成者(:サンプル)
- 「get」ステートメントを使用して結果のリストを作成する方法を示します。 見る利用可能なメッセージについては、「JMP Scripting Index」>「Objects」>「Nonlinear」を参照してください。
- あるいは、結果の表を作成することもできます。JMP レポート (obj) は、表示ボックスのネストされたリストです。 たとえば、GUI からグループごとに特定のテーブル ボックスを選択し、右クリックして [結合データ テーブルの作成] を選択すると、この JSL は同じことを行います。Xpath は、表示ボックスを検索する一般的な方法です。 Find は柔軟性に劣りますが、構文的には読みやすいです。 以下の Xpath ステートメントは、ソリューションである obj レポート内の各アウトライン ボックスへのハンドル/参照を返します。 各ソリューション アウトライン ボックスには 2 つのテーブル ボックスがあり、構造を見るとそれがわかります。必要なのは、これらのテーブル ボックスの最初に出現するメッセージを送信して、結合されたデータ テーブルを作成することだけです。
これで開始点が得られます。まず以下のスクリプトを実行して、使用しているバージョンの 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>