- ベストアンサー
多変数の最小二乗法
Y=AX+Bという形で(Y,X)の組から係数A,Bを推定する方法が最小二乗法かと思います。(そのような整理が妥当であるか、意味があるか、についてはデータの分布形状や変動係数などで別途検証する必要がありますがここでは不問として) さて、その次ですが、YY=AX+BY+CZという関数で表示しようと考えたとします。(YY,X,Y,Z)というデータ系列があり、係数(A,B,C)を求めるというような解析です。(前述のようにそれが妥当かどうかは不問として。)係数A,B,Cを最小二乗法のようにできるだけ妥当に求める方法を教えていただきたいのですが。 1)たとえば、YY=AX+CCとして最小二乗法でAを求めたあと、残差CCについてCC=BY+CZとおいて再度最小二乗法でBを求めるというような手法を何度も行うとか? これだと解く順番に依存するようなので全部の順番でやって平均値を取るとか? 下手な考え休むに似たりのようですが。 2)カルマンフィルタ、ニューラルネットワークの手法で解析するということもあるでしょうか。その場合、YY=AX+BY+CZという枠組みではなくなりますが、それでもよいと言えばよいです。 このような問題を解く方法について解説されている本とか分野の名称(数理統計学とか?)などを教えて頂けると探索する手がかりとなります。今は手がかりすらはっきりしていないのです。 最小二乗法についてはその程度だったら専門分野ではなく、各分野で個別に解説されているようで込み入った問題になったときにどこを捜索したらよいかわからないもので質問しました。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなが選んだベストアンサー
Y(i)とA*X(i)+Bの差の2乗和を最小にするのがY=AX+Bという形での最小二乗法ですよね。 そのためにf(A,B)=Σ(Y(i)-A*X(i)+B)^2のA,Bに関する偏微分を計算し、 df/dA=0とdf/dB=0を連立させてA,Bを求めるとOKというものです。 YY=AX+BY+CZという形でもやることは同じです。 g(A,B,C)=Σ(YY(i)-A*X(i)-B*Y(i)-C*Z(i))^2として、A,B,Cに関する偏微分が0になる点を求めます。
その他の回答 (3)
- info22
- ベストアンサー率55% (2225/4034)
解き方の計算法は #3さんの方法で良いですね。 実際に最小二乗法を解くのは手計算では大変ですので エクセルやfree-softの「gnuplot」の中の関数fitting機能 を使います。 僕は後者のソフトを利用しています。データのファイルを読み込んで簡単にfittingによりA,B,Cを計算してくれます。 参考URL http://ayapin.film.s.dendai.ac.jp/~matuda/Gnuplot/gnuplot43-ja/node90.html gnuplotダウンロード先 ↓
- 参考URL:
- http://www.gnuplot.info/
お礼
回答ありがとうございます。 gnuplotはインストールしてあります。これはグラフ作成ツールという風に位置づけておりますが、このような計算機能もあるということですね。関数フィッティング機能ということは裏でそのような作業をやっているということ推察できます。エクセルもそうだと思いますが。 他にもたとえばRとかmaximaなどのフリーソフトにもそのような機能がありそうですね。 このようなフリー系の数理解析ソフト群はかなり進んできたように思います。ただ、使いこなすのが大変で1つに秀でたらかなり役に立つとは思いますが、目先があちこちに動いてなかなか習得できないでいます。
- dieci
- ベストアンサー率10% (1/10)
参考URLを書き忘れていました ソルバーはすべてのエクセルにもとから実装してある機能ではないので、使用されるときは参考URLを参考にしてください
- dieci
- ベストアンサー率10% (1/10)
私は以前はYY=AX+BY+CZなどの関数の係数を求める解析にはエクセルのソルバー機能を使って求めていました。 ソルバー機能はある目的のセルの値が最小になるように変数をエクセルが自動的に変化させ最適な値を求めてくれるという機能です。 f(x)=AX+BY+CZとしてA,B,Cをまず適当に定めて、各X,Y,Zにおいて(YY-F(X))^2を求めその合計値が最小になるようにすると最適なA,B,Cが求まったことになりますよね
お礼
なるほど。 gをA,B,Cでそれぞれ偏微分してゼロとなるようなA,B,Cを求めるということですね。いわれて見ればそういうことかと思いますが。 これは非線形となると話が違ってくるでしょうか。x^2, xy, y^2というような項が出てくるということですが。展開する関数に直交性があれば、それでも良いのかなとは思いますが。 回答ありがとうございました。