非線形方程式系の最小二乗回帰こんにちは - 私は物理プロセス (それが何を意味するか知っている人のためにイオン吸着) の適度に複雑なモデルを持っています。 2 つの開始変数 x1 と x2 と、x1 と x2 によって変化する 2 つの測定結果 y1 と y2 と、変化しない測定不可能または測定が困難な変数 g1,...,gn があります。 x1 と x2 の一方または両方を一連の行ごとに変更することもできます。 一連の非線形方程式 s = f(x1, x2, y1,...,y2, g1,...,gn) と、複雑さに応じて f のさまざまな変数の他の関数があります。モデルであってほしい。 方程式の例については、添付ファイルを参照してください。
これを行う典型的な方法は、Matlab で lsqnonlin を使用することです。 うまく機能しますが、走り出すのは大変です。 むしろ、(それほど単純ではない) 列式を使用したいと考えています。 ただし、それをどのようにコーディングするかは完全にはわかりません。 非線形回帰は単一の方程式に対して構築されており、すべて同じ を記述する 3 つの方程式では、再帰が大量に発生するように見えます。 損失関数が何になるのかもわかりません。 Matlab では、推測値を入力し、推測値と計算値の間の最小二乗を計算し、すべての推測と方程式の差の二乗和が許容範囲を超えた場合に更新し、ループします。 これは非線形プラットフォームによって内部的に行われると想定していますが、差の二乗和をゼロにしたいので、ターゲットはゼロでしょうか? そうでない場合、複数の方程式を作成するにはどうすればよいですか?
これが私が考えているよりもはるかに単純な場合は申し訳ありません。
高度な統計モデリングウィンドウズRe: 非線形方程式系の最小二乗回帰私が提案する 1 つの方法は、適切な損失関数を定義するという古いトリックです。 あなたの場合、失われた機能は次のとおりです。
(s-f1(...))^2 + (s-f2(...))^2 + (s-f3(...))^2 + ...
各要素はシステムの方程式の二乗誤差です。 それらを合計して、全体的な誤差を最小限に抑えます。 このアプローチは、非線形最小二乗問題を損失関数の最適化問題に変換します。
一方、連立方程式の非線形最小二乗法を使用することはまだ可能だと思います。 手順は次のとおりです。
- データテーブルを展開します。 行ごとにコピーを作成します。コピーの合計数は、システム内の数式の数と同じになります。 これ加えるこのタスクには役立つかもしれません。 セル値が方程式の数となる Freq 列を作成する必要があります。
- 次に、それほど単純ではない数式列を作成する必要があります。 最後のステップの行をどのように配置するかによっては、式を別の方法で記述する必要がある場合があります。 しかし、目標は次のとおりです。 元の行のコピーごとに、システム内の 1 つの方程式に割り当てます。 したがって、最終的には、行のすべてのコピーがシステム内の個別の方程式に関連付けられます。 おそらく、行番号を方程式番号に関連付ける方法を理解する必要があります。 上記のアドインの結果としてコピーが連続した行にある場合、マッピングを行うために「Modulo」関数が必要になる場合があります。
最後に、ご存知のように非線形を使用して最小二乗問題を解決します。
Re: 非線形方程式系の最小二乗回帰水分吸着プロセスをモデル化するために使用するコードがいくつかあります。これは、複数の物理モデルによって記述される平衡状態を求めます。ここで共有できるコードの汎用バージョンを作成できるかどうか確認してみます。
Re: 非線形方程式系の最小二乗回帰こんにちは@peng_liu答えてくれてありがとう、そして返事が遅くなってごめんなさい! 論文+生後2ヶ月の赤ちゃんだとフォローを忘れてしまいます。
あなたなら何を選びますか? 測定された s はありません。MATLAB コードでは s を推測し、更新します。 これをどのように行うことをお勧めしますか?
最小二乗法に関しては、面白そうです。 別のプロジェクト用に作成した、同様のことを行うテーブルはありますか? これまでのスクリプト作成の中で、行ベースの数式をあまり使用したことがなく、使用したとしても見事に失敗しました。
Re: 非線形方程式系の最小二乗回帰こんにちは@David_Burnham - はい、その汎用バージョンがあれば、非常に役立ちます。Re: 非線形方程式系の最小二乗回帰おめでとう!
したがって、「s」はここでは未知のパラメータです。 その場合は、すべての方程式を次のように書き換えます: 0 = f(...) - s。
または、方程式に既知の量がある場合は、それらを左側に移動します。 非線形プラットフォームを使用する場合、左側が Y になります。
例がないので作ってみました。 添付: eqns.jmp の無意味なシステム
それは持っています
- Y 列、既知の量。
- 数式列、方程式の右側のサイズのもの
- ラベル列は、奇数行が最初の方程式に対応し、偶数行が 2 番目の方程式に対応することを示します。
- 右側の方程式の一部である他の既知の量。
2 つの方程式を 1 つの列にディスパッチする方法を確認するには、「式」列の式を参照してください。
Re: 非線形方程式系の最小二乗回帰ご指導ありがとうございます@peng_liu !
テーブルを作成しました。行が数行あれば機能するように見えますが、行数を超えて実行しようとすると、次のようになります。

これは本当に行が多すぎるだけの問題なのでしょうか? 行を最小限 (この場合は 3 行) まで削減すると、エラーが継続するようで、新しいテーブルを作成する必要があります。 これについて何か考えはありますか? これは、面倒ではないように、モデルのベアボーン バージョンで作成したテーブルです。 また、パラメーターを独自の列 (Phi0、sigma0、pHf) に配置し、列の式を見やすくするために中間式を拡張しました。
Re: 非線形方程式系の最小二乗回帰このデータ テーブルを使用して非線形プラットフォームを実行する方法がわかりません。 どれが Y で、どれが X ですか?
ただし、「式」列が X の場合は機能しないと思います。 X の式では、テーブル変数ではなくパラメーターを使用する必要があります。
以下は、その「無意味なデータ テーブル」の X 列がどのようになっているかを示しています。

「式」列の「パラメータ」には何もリストされていません。
Re: 非線形方程式系の最小二乗回帰おい@peng_liu - はい、パラメーターによって式の長さが 100 倍になったため、それらを Phi0、sigma0、および pHf 列 (タイトルとして「.」が付いている列の後の列 6 ~ 8) にダンプし、非線形プラットフォームの下部にある「中間式の展開」ボックス。 そうすることでパラメータを使用できますが、各パラメータには非常に多くの「拡張カテゴリ」があるため、数式列の操作が不可能になることはありません。
それは理にかなっていますか?
添付のスクリーンショットには、それらの列と数式内の位置が明確に示されているはずです。
Re: 非線形方程式系の最小二乗回帰@peng_liuまた、1) 数値導関数のみのオプションはメイン プラットフォームに渡されるようで、2) 複数の方程式にパラメーターがある場合、次の結果が得られるようだということがわかりました。エラー。 それが何かを物語っているかどうかはわかりません。 そのエラーへの参照が見つからないので、困っています。
Re: 非線形方程式系の最小二乗回帰説明してくれてありがとう、 @ehchandlerあなたが今何をしているのか理解しています。 あなたがやっていることは、このような複雑な問題に対する素晴らしいトリックです。 私にとって何か新しいことです!
エラーメッセージを見てみました。 「数値導関数のみ」にチェックを入れる必要があります。

パラメータが 300 以上あり、基礎となるシンボリック導関数が限界に達しています。
行数は 337 ですが、パラメータは 339 個あります。 このサブセットでは解決策が得られません。 フルセットに問題がないことを願っています。
一方、あなたの設定を見ていて、興味深いことに気づきました。 あなたの主題がわかりません。 ただし、設定では、Phi0、sigma0、および pHf は pH0 の離散関数です。 3 つと pH0 の関係はわかっていますか? それらの間で連続的な関係 (未知のパラメーターが少ない) がわかっている場合は、パラメーターの数を大幅に削減できる可能性があります。
Re: 非線形方程式系の最小二乗回帰@peng_liuわかりました、それはもっと理にかなっています。 シンボリック導関数コードの項またはパラメーターの数の制限をご存知ですか? いくつかの数値を含む列を用意し、「by」機能を使用して計算をセグメント化できると考えているからです。 シンボリック導関数は非常に高速です。
そして、うーん。 新しいパラメータがどこから来たのかわかりません。 入ったら確認してみます。 気づいてくれてありがとう。 関連する 3 つの質問: 1) パラメーターの数をどのように確認しましたか、2) 列の数式メニューでパラメーターを一括削除する方法はありますか? 私の知る限り、右クリックして削除をクリックする必要があります。 3) テーブルを使用してパラメータとその範囲を入力する方法はありますか? これは本当にスピードアップに役立ちます。
ありがとう!
Re: 非線形方程式系の最小二乗回帰制限はパラメータの数によるものではありません。 ただし、パラメータの数はあなたの場合の要因です。 したがって、試して確認する必要があります。
システムには、ファイ、シグマ、pHf という 3 つの異なるタイプのパラメータがあるようです。 それらはすべて pH0 の値に条件付けされています。 したがって、パラメータは異なる pH0 によって独立しています。 おっしゃるとおり、「By」フィットを行うと複雑さを軽減できます。
PS「By」が希望どおりに機能しません。 すべての行には、列内のすべてのパラメータが表示されます。 By の個々の行にパラメータのサブセットだけを表示させることは可能かわかりません。
Nonlinear を起動するとパラメータの数が表示されます。 パラメータの設定が可能です。 右クリックしてテーブルを作成し、行を数えます。 最後の 2 行については、JSL 式を編集することをお勧めします。 列の数式エディタを開きます。 それをコピーして、JSL エディターに貼り付けます。 編集後、コピーして貼り付けてください。 これにより、パラメータのリストを編集できます。
「1」セクションはパラメータのリストです。 「2」が実際の式です。

Re: 非線形方程式系の最小二乗回帰「By」の使い方の続きです。
Byを使用してパラメータの数を減らし、行間の独立性を利用する方法があるようです。
「ナンセンスシステム」のv2を添付します。 まず、私が設定した内容を説明します。

2 つの連立一次方程式を設定しました。 行 1 と 2 はシステム「a」、グループ列です。 そして、行 3 と行 4 はシステム「b」です。
各線形システムには 2 つのパラメータ「b0」と「b1」がありますが、これらはシステムによって異なります。 そして、パラメーター x1 と x2 を使用して「SimY」を生成します。 分析のために SimY を Y にコピーします。
ここで「式」列を見てください。グループによって「b0」と「b1」を区別していません。

次に、By = Group を指定して Nonlinear を実行します。 そして、レポートは次のとおりです。

それぞれのシステムに対して個別の正しい解決策を見つけます。
Re: 非線形方程式系の最小二乗回帰@peng_liuはい、私も同様に問題に遭遇しました。 あなたの解決策は良さそうです! ただし、それをテーブルに適用しようとすると、エラーが発生します。 添付の表に明らかな問題があることがわかりますか? Phi0、sigma0、および pHf はすべて以前と同じです。 ただし、あなたが言及した「by」メソッドの「循環分類」列を作成しましたが、「列ごとのパラメータ」があります。 この列のレベルを使用してパラメータをカテゴリ別に展開します。 :Cyclic Categorization と :Parameter by columns は直交しているため (または正しい単語が何であれ)、これにより、パラメーターがわずかなオフセット (pH0 が x 軸) で曲線全体にわたって反復できるようになり、それらを組み合わせることができます。最後にもう一度。 ただし、前述したように、パラメータのレベルの 1 つを更新するだけで失敗し、その理由はわかりません。
これは by がカテゴリによって展開されたパラメータとどのように相互作用するかに問題があるのでしょうか?
Re: 非線形方程式系の最小二乗回帰Column3 に欠損値があります。これは、結果が 1 つのグループのみにある理由を説明しています。 しかし、私が推奨したように「公式」は設定されていません。 説明のために test.v2 を添付します。 このアプローチでは、中間の Phi0、sigma0、および pHf は必要なくなります。
Re: 非線形方程式系の最小二乗回帰@peng_liuああ、当然だ。 どうしてそんなに多くの欠落行を見逃したのかわかりません。 気づいてくれてありがとう。
それで、おそらく私が誤解しているのですが、pH0がx軸であるため、あなたの解決策は単にby列がx列であることを意味しますか?たとえば、100 個の x 値がある場合、いわば 100 個の「グループ」があることになります。
もしそうなら、列ごとに展開するバージョンの方が、各ポイントの自己完結型の最小化ではなく、複数のポイントにわたる誤差を最小限に抑えることができるので、より優れているのではないでしょうか? それとも、損失関数を処理するにはポイントごとの方が良い方法でしょうか? 私は手持ちの Matlab コードを JMP に当てはめているだけですが、最小化アルゴリズムの専門知識はあまりないので、最善のテクニックが何であれ、私はそれに全力を尽くしています。
PS そして、私が明確にしなかったかもしれませんが、各 pH0 値 (従属変数) の各パラメーターには一意の値のセットが存在する必要があります。 だからこそ、カテゴリー別に展開する必要があると考えたのです。
ありがとう!
Re: 非線形方程式系の最小二乗回帰元の表の「式」列は pH0 に依存していることがわかります。 ただし、test.jmp の「式」列は pH0 に依存しません。 それは私たちの間に誤解があると思います。 元のデータを引き続き使用させていただきます。そのため、Phi0、sigma0、pHf は「列ごとのパラメーター」ではなく、pH0 に依存します。
最初の 3 行を見てみましょう。

pH0 = 0.2。 そのため、最初の行の式は次のように表すことができます。
f1(ファイ0_pH0_0.2、シグマ0_pH0_0.2、pHf0_pH0_0.2)。
2 行目と 3 行目の数式は次のとおりです。
f2(Phi0_pH0_0.2、sigma0_pH0_0.2、pHf0_pH0_0.2) および
f3(ファイ0_pH0_0.2、シグマ0_pH0_0.2、pHf0_pH0_0.2)。 3 つの行がグループ 1 を形成します。
次に行4、5、6を見てください。 pH0 = 0.3。 したがって、3 つの式は次のとおりです。
f1(ファイ0_pH0_0.3、シグマ0_pH0_0.3、pHf0_pH0_0.3)、
f2(Phi0_pH0_0.3、sigma0_pH0_0.3、pHf0_pH0_0.3)、および
f3(ファイ0_pH0_0.3、シグマ0_pH0_0.3、pHf0_pH0_0.3)。 3 行はグループ 2 を形成します。
Group1 と Group2 は同じパラメータのセットを共有しません。 彼らは独立しています。 Group1 のエラーを最小限に抑えることは、Group2 のエラーを最小限に抑えることとは何の関係もありません。 したがって、グループごとに最適化できます。
中間の 3 つの列にパラメータ設定を Phi0_pH0_0.2、Phi0_pH0_0.3、Phi0_pH0_0.4 などとして保持すると、各行にはそれらのすべてが表示されます。 Nonlinear by pH0 を実行すると、各グループに数百のパラメーターがリストされることがわかります。 ただし、その中で、各行および 3 行ごとに関連するものは 3 つだけです。
私がやったのは、「式」列内に 3 つのパラメーターのみを作成することです。 それらに paramPhi0、paramSigma0、parampHf という名前を付けました。 たとえ 3 つしかなくても、「pH0」で非線形を実行すると、プラットフォームは「pH0」で 3 つのパラメーターの異なるセットを作成します。 文字通り、「pH0」によってそれらの数百のパラメーターを作成します。 そして、pH0 によるそれぞれの小さな非線形では、3 つのパラメーターを考慮するだけで済みます。