これは、区分的連続関数をデータセットに適合させる方法に関する一連の投稿の3番目です。 各投稿は、シリーズの他のすべての投稿へのリンクから始めます。 彼らです:
パート3へ...
序章
このシリーズの以前の投稿に沿って進んだ場合は、問題の例の断片に最もよく適合するために決定する必要がある10個の未知のパラメーターを含む方程式を開発したことをご存知でしょう。 これをどのように行うかJMP ?
まず、JMPの数式エディタを使用して方程式と未知のパラメータを入力する必要があります。 読者は一般的に数式エディタに精通していると思います。 (そうでない場合は、ここにあります数式の作成に関する短いビデオと数式エディタの詳細を含む長いビデオ。)
JMPの式エディタでのパラメータの設定
気付いていないかもしれませんが、数式エディタでパラメータを設定する機能です。 パラメータは、作成する式に対してローカルな変数です。 ドロップダウンメニューからアクセスします(デフォルトはテーブル変数で、図1に示すようにパラメーターに切り替えます)。
図1:数式エディターでのパラメーターへのアクセス
これにより、数式に「新しいパラメータ」を追加するオプションが表示されます。 簡単な例を実行して、「a0」というパラメータをパラメータリストに追加しましょう。 [新しいパラメータ]をクリックし、パラメータ名を「a0」に変更して、値を1にします。
図2:新しいパラメーターを作成して初期値を与える
- 「名前」は任意です。 有効なJSL変数名を選択できます。
- 「値」は、このパラメーターの開始値です。 開始値を指定する必要があります。 場合によっては(選択した式によっては)、開始値が重要になることがあり、推測できるように実際の値に近くなるように選択する必要があります。 (これは、後で収束の問題を防ぐのに役立ちます。)この場合、値がどうあるべきかわからないので、開始値1を任意に選択します。
これで、この新しい「a0」パラメータを、列変数であるかのように数式で使用できます。 「y」というラベルの付いた列の値に単純に追加してみましょう。 [パラメータ]リストでa0をダブルクリックし([式]パネルに表示されます)、「+」と入力してから、列リストで「y」をダブルクリックします。 これにより、次の式が得られます。
図3:数式でのパラメーターの使用
[OK]をクリックしてデータテーブルの結果を見ると、次のようになっています。
図4:数式でパラメーターを使用した結果
したがって、数式はa0パラメータの現在の値を認識し、それに応じて適用します。 この重要な概念は、次のブログ投稿で、JMP NonlinearPlatformを使用して未知のパラメーターを解決するときに使用されます。
区分的関数のパラメーターの入力
このブログシリーズのパート2では、サンプルデータシリーズのブレークポイント間に適用する5つの単純な多項式を開発しました。 これらの多項式には、6つの未知のパラメーターがありました。 a0、b1、b2、c1、d1、およびd2。 また、多項式がアクティブである領域を定義する4つのカットポイント(X1、X2、X3、およびX4)がありました。 これらの各パラメーターを、妥当な開始値とともに、Formulaパラメーターリストに追加する必要があります。 終了すると、パラメータリストは次のようになります。
図5:区分的例のために入力および初期化された10個のパラメーターすべて
多項式の各係数の開始値を「1」と仮定したことに注意してください。 ブレークポイントX1からX4については、発生する可能性があると思われる「目玉」に基づいて値を推定することを選択しました。 これにより、JMPはブレークポイントの検索を開始するのに適した場所になります。
区分的数式の入力-ブールトリックを含む!
これで、数式エディターでパラメーターを設定する方法がわかりました。また、パート2に示した5つの区分的方程式のいずれかを数式エディターに入力する方法もわかりました。 しかし、どのようにして5つの区分的方程式すべてを同じ式に入力するのでしょうか。
1つの方法は、大きなIFステートメントを使用することです。たとえば、「If x @PatrickGiuliano 、以前のJMPコミュニティディスカッションスレッドで役立つトリックを投稿しました。
JMPは、ブール演算子(And、Or、Norなど)を認識します。 ブール演算子が数式で使用されている場合、ブールロジックはtrueの場合は1を返し、falseの場合は0を返します。 したがって、(X1 <:x&:x <= X2)などの演算子を設定できます。 この演算子は、「x」列の値(式では「:x」と呼ばれます)がパラメーターX1とX2の間にある場合は1を返し、それ以外の場合は0を返します。 したがって、X1-X2セグメントの区分的方程式に上記のブール式を単純に乗算することができます。 xの値が適切な範囲内にある場合、セグメント方程式がアクティブになります。 そうでない場合は、0を返します。 次に、他のすべての範囲に対して同じことを行い、すべての方程式を合計します。
これらすべてを実行すると、次のような式になります。
図6:完全な区分的数式(数式エディターモードで表示)
以下は、JSL入力形式の同じ情報です。
図7:完全な区分的式(JSLモードで表示)
要約すると、図6と図7では、基本的に、次のような式を新しい列(ypredと呼ばれる)に作成しました。
- 式で使用される10個の不明なパラメーターを定義します(各パラメーターに適切な開始値を指定します)。
- それぞれが適切なパラメーターを使用する、4つの区分的方程式について説明します。
- 各方程式の範囲を表す適切なブール不等式を乗算することにより、各区分的方程式をアクティブにします。
- 4つの方程式を合計して、最終的な式を求めます。
かなりクール...
シリーズの次
次回は、最終的に非線形プラットフォームで方程式を使用して、最適なパラメーターを解きます。 また、収束基準とアルゴリズムの選択についても説明します。
こんにちは@JerryFish 、私はこれまでこれらのブログ投稿を本当に楽しんでいます!毎日パラメーターの最適化を行っていない人にとっては、このリソースを参照して、その方法と、ここで説明する区分的非線形フィッティングなどのより高度なケースを処理する方法について復習することができます。
この投稿に関連する簡単な質問:「時間」にわたって徐々に増加(または減少)する傾向を生成するシミュレーションデータを生成したい場合(簡単にするために行の順序を使用できます)、JMPでこれをどのようにパラメーター化できますか? (または、モデルのパラメーター化を使用せずに、たとえばインスタント列の数式を組み合わせて使用するより簡単な方法はありますか?)
ありがとう!@PatrickGiuliano