最小2乗法
1次式への近似
 
\(n\) 組のデータ \( (x_i \ y_i) \) を回帰式 \( y=a+bx \) に近似する。
 
このとき,誤差は \( y_i - (a + b x_i) \) で表される。
 
最も確からしい回帰式を与える定数 \(a\),\(b\) は誤差の平方の総和
\( z = \sum \{ y_i - (a + b x_i) \}^2 \)
が最小になるように選ばれる。ただし, \( \sum = \displaystyle \sum_{i=1}^{n} \) とする。
 
\(z\) を \(a\),\(b\) でそれぞれ偏微分し,\(0\) とおく。
\begin{align} an + b\sum x_i &= \sum y_i\\ a\sum x_i + b\sum x_i^2 &= \sum x_i y_i \end{align}
これらを連立して解けば,\(a\),\(b\) を得ることができる。
 
連立方程式を行列に変換する。
左辺の係数を係数行列とし,\(\boldsymbol{A}\) とおく。
\( \boldsymbol{A} = \begin{pmatrix} n & \sum x_i \\ \sum x_i & \sum x_i^2 \end{pmatrix} \)
 
変数 \(a\) および \(b\) を列ベクトルとし,\(\boldsymbol{X}\) とおく。
\( \boldsymbol{X} = \begin{pmatrix} a \\ b \end{pmatrix} \)
 
右辺の定数項を列ベクトルとし,\(\boldsymbol{C}\) とおく。
\( \boldsymbol{C} = \begin{pmatrix} \sum y_i \\ \sum x_i y_i \end{pmatrix} \)
 
このように定義された行列およびベクトルによって上記の連立方程式を表現できる。
\( \boldsymbol{A}\boldsymbol{X} = \boldsymbol{C} \)
すなわち
\( \begin{pmatrix} n & \sum x_i \\ \sum x_i & \sum x_i^2 \end{pmatrix} \begin{pmatrix} a \\ b \end{pmatrix} = \begin{pmatrix} \sum y_i \\ \sum x_i y_i \end{pmatrix} \tag{1} \)
 
解法1
 
係数行列 \(\boldsymbol{A}\) の行列式を \(D\) とし,\(D\) の第 \(i\) 列を定数ベクトルで置換した行列式を \(\Delta_i\) とするとき,
\( \displaystyle \frac{\Delta_i}{D} \)
は \(i\) 番目の変数の解となる。これをクラマーの公式という。ただし,\(D \ne 0\)。
 
具体的には
\begin{align} D &= |\boldsymbol{A}|\\ &= \begin{vmatrix} n & \sum x_i \\ \sum x_i & \sum x_i^2 \end{vmatrix}\\ &=n \sum x_i^2 - (\sum x_i)^2 \end{align}
 
\begin{align} \Delta_a &= \begin{vmatrix} \sum y_i & \sum x_i \\ \sum x_i y_i & \sum x_i^2 \end{vmatrix}\\ &= \sum x_i^2 \sum y_i - \sum x_i \sum x_i y_i \end{align}
 
\begin{align} \Delta_b &= \begin{vmatrix} n & \sum y_i \\ \sum x_i & \sum x_i y_i \end{vmatrix}\\ &= n \sum x_iy_i - \sum x_i \sum y_i \end{align}
 
したがって
\begin{align} a &= \displaystyle \frac{\Delta a}{D}\\ &= \displaystyle \frac{\sum x_i^2 \sum y_i - \sum x_i \sum x_i y_i}{n \sum x_i^2 - (\sum x_i)^2} \tag{2} \end{align}
\begin{align} b &= \displaystyle \frac{\Delta b}{D}\\ &= \displaystyle \frac{n \sum x_i y_i - \sum x_i \sum y_i}{n \sum x_i^2 - (\sum x_i)^2} \tag{3} \end{align}
 
ここで,\(|D| \ll 1\) となるときには値が発散するので,位取りを工夫するなどして回避する必要がある。
 
 
演習1
 
 実験によって以下の 10 組のデータ \( (x_i \ y_i) \) を得た。解法 1 によって \(y = ax+b \) に近似せよ。
\(i\)\(x_i\)\(y_i\)
13360
22649
34579
492154
588148
663108
771121
860103
91836
102039
 
 
手順 以下の表を作成し,各列の総和を最下行に記入する。データ数 \(n = 10\),および求めた各総和を式(2),(3)に代入して解を得る。
\(i\) \(x_i\) \(y_i\) \(x_i^2\) \(x_i y_i\)
1336010891980
226496761274
3457920253555
492154846414168
588148774413024
66310839696804
77112150418591
86010336006180
91836324648
102039400780
\(\sum \)5168973333257004
 
 \(y = 7.23 + 1.60 x\)
 
 
解法2
 
式(1)の \(\boldsymbol{A}\) を右辺に移項すると
\( \boldsymbol{X} = \boldsymbol{A}^{-1} \boldsymbol{C} = \boldsymbol{B} \)
新たに得られる定数ベクトル \( \boldsymbol{B} \) の各要素は各変数の解に等しい。
 
逆行列を手計算によって求めるのは煩雑なので,Excelを利用する。
  1. 係数行列 \(\boldsymbol{A}\) と定数ベクトル \(\boldsymbol{C}\) の各要素を入力する。
  2. \(\boldsymbol{A}\) と同じ大きさの領域を別の場所にドラッグして選択する。
  3. =minverse(」を入力。
  4. \(\boldsymbol{A}\) をドラッグして選択。→範囲が入力される。
  5. )」を入力。<Shift>と<Ctrl>を同時に押しながら<Enter>を押して確定。→逆行列 \(\boldsymbol{A}^{-1}\) の要素が表示される。
  6. \(\boldsymbol{C}\) と同じ大きさの領域を別の場所にドラッグして選択する。
  7. =mmult(」を入力。
  8. \(\boldsymbol{A}^{-1}\) をドラッグして選択。→範囲が入力される。
  9. ,」を入力。\(\boldsymbol{C}\) をドラッグして選択。→範囲が入力される。
  10. )」を入力。<Shift>と<Ctrl>を同時に押しながら<Enter>を押して確定。→定数ベクトル \(\boldsymbol{B}\) の要素が表示される。
詳細は Excelによる連立1次方程式の解法 を参照のこと。
 
 
解法3
 
Excelを利用できるなら,もっと簡単に近似式を求めることができる。ただし,理系の人間ならば上述の原理を理解していなければならない。
 
  1. データ列を用意し,散布図を作成する。ただし,「線なし」とする。
  2. プロットを右クリックし,「近似曲線の追加」を選択。「線形近似」を選択。
  3. 「オプション」タブをクリックする。「グラフに数式を表示する」をチェック。「OK」をクリック。
  4. 数式を見て,傾きと切片を読み取る。
 
この方法は最も簡単であり,作業の妥当性を視覚的に確認できる点で優れている。ただし,得られた定数をその後の計算に直接利用できない欠点がある。
 
 
発展1
 
最小2乗法は上述の1次式だけでなく,さまざまな形式の回帰式に適用することができる。
 
\(n\) 組のデータ \( (x_i\ y_i ) \) を回帰式 \(y=ax \) に近似する方法を説明せよ。
 
解法1および解法3について,それぞれ解いてみよう。解法3では,「オプション」タブの「切片」をチェックし,「0」を入力すればよい。
 
 
解法3-2
 
LINEST関数を使い,定数をセルに格納する。
 
 
作業の妥当性を視覚的に確認するために,散布図を作成し,ここで得た定数を用いて直線を描くことが必要。作画時にはセルに格納した値を参照する。
 
 
2次式への近似
 
\(n\) 組のデータ \( (x_i \ y_i ) \) を回帰式 \( y=ax+bx^2 \) に近似する。
 
1次式の場合と同様に
\begin{align} a\sum x_i^2 + b\sum x_i^3 &= \sum x_i y_i\\ a\sum x_i^3 + b\sum x_i^4 &= \sum x_i^2 y_i \end{align}
これらを連立して解けば,\(a\),\(b\) を得ることができる。
 
 
解法4
 
係数行列と定数ベクトルは
\( \begin{pmatrix} \sum x_i^2 & \sum x_i^3 \\ \sum x_i^3 & \sum x_i^4 \end{pmatrix} , \begin{pmatrix} \sum x_i y_i \\ \sum x_i^2 y_i \end{pmatrix} \)
 
\(a\), \(b\) を算出する。
\begin{align} a &= \displaystyle \frac{\Delta a}{D}\\ &= \displaystyle \frac{\sum x_i^4 \sum x_i y_i - \sum x_i^3 \sum x_i^2 y_i}{\sum x_i^2 \sum x_i^4 - (\sum x_i^3)^2} \end{align}
\begin{align} b &= \displaystyle \frac{\Delta b}{D}\\ &= \displaystyle \frac{\sum x_i^2 \sum x_i^2 y_i - \sum x_i^3 \sum x_i^2 y_i}{\sum x_i^2 \sum x_i^4 - (\sum x_i^3)^2} \end{align}
 
 
解法5
 
Excelを利用できるなら,もっと簡単に近似式を求めることができる。ただし,理系の人間ならば上述の原理を理解していなければならない。
 
    データ列を用意し,散布図を作成する。ただし,「線なし」とする。
    プロットを右クリックし,「近似曲線の追加」を選択。「多項式近似」を選択。次数は「2」とする。
    「オプション」タブをクリックする。「切片」をチェックし,「0」を入力。「グラフに数式を表示する」をチェック。「OK」をクリック。
 
 
発展2
 
回帰式が2項式 \( y=aX_1 + bX_2 \) である場合には,最小2乗法によって最も確からしい定数 \(a\), \(b\) を簡単に求めることができる。ここで,\(X_1\), \(X_2\) は \(x\) の関数あるいは定数である。
 
最小2乗法とは必ずしも1次式に回帰させる方法ではない!
 
 
発展3
 
データを最小2乗法によって回帰式 \(y=ax^b\) に近似する方法を説明せよ。
 
同様にして,3項式に近似することもできる。
 
 
発展4
 
データを最小2乗法によって回帰式 \(y=ax+bx^2+cx^3\) に近似する方法を説明せよ。
 
 
発展5
 
\(n\) 組のデータ \( (x_i \ y_i \ z_i ) \) を最小2乗法によって回帰式 \(z = ax + by \) に近似する方法を説明せよ。
 
 
発展6
 
六方晶系の格子定数 \(a_0\) および \(c_0\) は面間隔 \(d\) および Miller指数 \(h\),\(k\),\(l\) との間に
\( \displaystyle \frac{1}{d^2} = \frac{4}{3} \left( \frac{h^2+hk+k^2}{a_0^2} \right)+\frac{l^2}{c_0^2} \)
なる関係がある。
粉末X線回折の結果から \(n\) 本の回折線を得た。面間隔と,それに対応する Miller指数から,最小2乗法によって格子定数を推定する方法を説明せよ。
 
 
最小2乗法