非線形モデルフィッティングの結果を取得してグラフに出力するスクリプトを作成しようとしています。 データセットは時間をかけて継続的に取得され、これに非線形モデルを当てはめました (添付の図を参照)。 12 個の異なるサンプルがあり、下にスクロールすると同じグラフが表示されます。
ただし、グラフをレポートして、0、1、2、3、4、5 日などに対応する行のみを 21 日まで表示し、グラフの曲線を妨げないようにしたいと考えています。サンプルによるモデル。 この場合、実験データを散布図データとして、モデルを連続曲線データまたは滑らかな曲線として取得したいと考えています。
どうすればいいでしょうか?
グラフ ビルダーは、最初の課題と同じように実験データとモデルの両方をプロットしていないようです。
私の推論は、モデル列に干渉することなく、スクリプトを呼び出すたびに適用できる、ある種のデータ フィルターを使用できる可能性があるということでした。 12 個のサンプルごとに新しいパラメーター推定値を使用してモデルに固有の新しいデータ テーブルを作成し、グラフ ビルダーを呼び出す必要がありますか?
JMPメニュータブのグラフ/レガシー/オーバーレイプロットも使ってみました。 これはデータ曲線とモデル曲線の両方をプロットしているように見えますが、この場合、各サンプルのパラメーター推定値を受け入れて保存した後、JMP がパラメーター推定値をモデル列の各サンプルに個別に適用していないことに気付きました。 この場合、モデル式はデータ テーブルの最初に表示されるサンプルに対して推定されたパラメーターのみを使用し、これらを後続のサンプルに使用します。
次に、サンプルごとにモデルと実験データの両方を一緒にプロットできるように、各サンプルの決定されたパラメーター推定値を使用してモデル式を含む 12 列を生成する新しいデータ テーブルを作成する必要がありますか?
これが明らかだといいのですが。 データテーブルなどのスクリーンショットをアップロードできます
新しいパラメータ推定値の新しい列を開くスクリプトを作成しようとしています。
非線形フィットを実行すると、推定値と誤差が得られます。 次に、対象のデータ テーブルのみを保持し、同じモデル式を使用して新しい列で使用する対象の値を何らかの方法で取得しようとします。 アイデアは、推定に基づいてモデル パラメーターを指定することです。
これが正しい方法なのか、それとも他の機能を使用する必要があるのかわからないので、助けが必要です。 以下のスクリプトは少し複雑かもしれませんが、それはおそらく私にプログラミングの経験がほとんどないためです。 スクリプトは明らかに機能します
@Mark_Bailey書きました:
私は今教えているので自由に確認することはできませんが、Nonlinear はさまざまなパラメーターのセットを含む数式を保存するかもしれません。 ここでは Match() 関数が役に立ちます。 グループを照合し、結果ごとにモデルを複製しますが、グループごとに一意のパラメーター推定値を適用します。 一種の分岐になります。 一部の言語の CASE ステートメントのようなものです。
太字の部分まで:
Col9 = 新しい列("モデル");
Col9<< 式を設定 (パラメータ({Y1_Y1_0 = 0.2, K1_K1_0 = 0.01, P1_P1_0 = 0.004, Y2_Y2_0 = 0.15, K2_K2_0 = 0.06, P2_P2_0 = 0.3}, If(:Days>0, (Y1_Y1_0 * Exp(-Exp(( (K1_K1_0 * Exp()) / Y1_Y1_0) * (P1_P1_0 - :日))) + Y2_Y2_0 * Exp(-Exp(((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 - :日))),0 )));
Col10=newcolumn("エラー");
Col10<< set Formula((:Average - :Model) ^ 2);
col10<<評価式;
col10<<数式を取得;
obj = 非線形(Y( :Average ), X( :Model ), Loss( :Err ), Iteration Limit( 5000 ), By( :Sample ));
obj << 行きます;
// 各ベクトルにパラメータ推定値が含まれるベクトルのリストを返します。
obj << 推定値を取得します。
//「SSE の取得」、「パラメータ名の取得」、「CI の取得」も参照
//または、テーブルを作成します
_xx = obj << Xpath("//OutlineBox[@helpKey='非線形解']");
//グループが 2 つだけなので、2 つだけが見つかります。それぞれに 2 つのサブテーブルが含まれています
fit_dt = (_xx[1]< est_dt = (_xx[1]< fit_dt << set Name("NonLin Fit エラー");
est_dt << set Name("NonLin フィット推定値");
名前のデフォルトは Here( 1 );
DontClose = {"dt4", "NonLin フィット エラー", "NonLin フィット推定値"}; // 残したいテーブルの名前の例
// テーブル番号が変わらないように、リストを逆方向にループします。
For( i = N Table()、i >= 0、i--、
If( Contains( DontClose, Data Table( i ) << get name ),
続く()、
Close( データ テーブル( i ), "保存なし" )
)
);
dt = データ テーブル("非リン適合推定値");
dt2<
myList=:Estimates<<値を取得
dt0 = データテーブル (「dt4」);
dt0<< New Column("サンプルによる適合モデル");
Col11="サンプルによる適合モデル";
Col11 << 式を設定 (Parameter({Y1_Y1_0, K1_K1_0, P1_P1_0, Y2_Y2_0, K2_K2_0, P2_P2_0}, If(:Days>0, (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)))),0), Set Property("予測中", {:Average 、作成者("非線形")})、作成者 (:Sample)));
各 Row(col11= set Formula (Match("Parameter", "Estimates")));
col11<<評価式;
col11<<数式を取得;
助言がありますか?
私は今教えているので自由に確認することはできませんが、Nonlinear はさまざまなパラメーターのセットを含む数式を保存するかもしれません。 ここでは Match() 関数が役に立ちます。 グループを照合し、結果ごとにモデルを複製しますが、グループごとに一意のパラメーター推定値を適用します。 一種の分岐になります。 一部の言語の CASE ステートメントのようなものです。
いいえ、ワイド形式 (回答が 12 個のデータ列に保存される) を使用する代わりに、トール形式 (回答が 1 列に保存され、2 番目の列を使用してサンプルを識別する) を使用してください。 ここで、ほとんどのプラットフォームの By ロールでサンプル ID を使用するか、非線形プラットフォームまたはプロット曲線プラットフォームのグループ ロールでサンプル ID を使用します。