公開日: 11/25/2021

微分した式について

「非線形回帰」プラットフォームでは、一般的な演算を含む計算式に、解析的な微分が使用されます。この節では、どのような微分式が求められるかを紹介します。

「Nonlinear Example」フォルダにある「Negative Exponential.jmp」サンプルデータでは、「非線形」列の実際の計算式は次のようになっています。

Parameter({b0=0.5, b1=0.5},b0*(1-Exp(-b1*X)))

計算式エディタではParameter演算の部分が表示されません。しかし、列にはこの形で保存され、「非線形回帰」起動ダイアログボックスにもこの形で表示されます。「b0」と「b1」という2つのパラメータには初期値が与えられていて、反復計算の初期値として使われます。

「非線形回帰」プラットフォームでは、プラットフォーム用に計算式のコピーが作成され、それが編集されてパラメータが抽出されます。また、パラメータへの参照が、パラメータが推定される個所にマップされます。「非線形回帰」プラットフォームは、予測式をパラメータについて微分した式を内部的に求めます。[微分した式の表示]コマンドを使うと、その微分された式がログに表示されます。

予測モデル:

b0 * First(T#1=1-(T#2=Exp(-b1*X)), T#3=-(-1*T#2*X))

この予測モデルを、パラメータについて微分した式は、次のとおりです。

{T#1, T#3*b0}

微分は、次のように行われます。

補助式を繰り返し計算する手間を省くため、モデルは、微分計算に必要な補助式を保存するいくつかの部分に分割され、その部分ごとに値が計算されます。その補助式を含む部分にはT#1T#2、という名前がつきます。

モデルで追加の補助式を計算する必要が生じると、最初の引数式の値を戻す「First」関数が使用されます。また、この時、その他の引数も計算されます。この場合、微分を計算するために、補助式を含む変数が追加で作成されます。

微分表自体は、推定されるパラメータごとに式をまとめたリストになっています。先ほどの例では、b0についてのモデルの微分はT#1です。この変数には1-(Exp(-b1*X))という式が含まれています。b1について微分した式はT#3*b0で、先ほど示した割り当てに代入すると-(1*Exp(-b1*X)*X)*b0となります。いろいろな最適化処理が行われるものの、演算の組み合わせは常に最適とは限りません。たとえば、T#3の式では、二重の負の符号が使われています。

損失関数を指定すると、計算式エディタはパラメータについての微分を取ります。モデルがある場合は、モデルについて1次微分および2次微分した式を取ります。

関数の解析的な微分ができないときは、NumDeriv関数を使って数値的な微分が行われます。その場合はプラットフォームに、関数の変化量を計算するために使用するδが表示されます。適切な数値微分を得られるように、いろいろな値のδを試してみる必要があるかもしれません。

ヒント

モデルを式で表す方法はたくさんありますが、それらの式の効率は大きく違います。Ratkowsky(1990)は、その著作の中でいろいろな式を比較しています。

計算式に繰り返し出てくる補助式がある場合は、一時的なローカル変数へ割り当てるといいでしょう。そして、計算式内でそれらの一時的なローカル変数を利用してください。たとえば、次のようなモデル式があったとします。

If(Y==0, Log(1/(1+Exp (モデル))), Log(1-1/(1+Exp (モデル))));

式の一部を一時的なローカル変数に割り当てると、次のような単純な式になります。

temp=1/(1+Exp (モデル));
If(Y==0, Log((temp), Log(1-(temp));

微分機能は、割り当てや条件式があっても問題なく機能します。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).