Web Analytics Made Easy - StatCounter

工業大学生ももやまのうさぎ塾

うさぎでもわかるをモットーに大学レベルの数学・情報科目をわかりやすく解説!

うさぎでもわかる実験の基礎 最小2乗法

こんにちは、ももやまです!

今日は行基本変形サークルの会長さんと一緒に最小2乗法についてまとめてみました。

 

 

0.会長の挨拶

こんにちは!! というか初めまして!! 行基本変形サークルの会長です!

 

いつも記事を書いているうさぎさんがハイパー忙しいウィークで更新が追い付かないかもしれない!!!!ということでピンチヒッターとしてやってきました!

 

いつもとはちょっと違う書きぶりとかまとめ方とかで分かりづらいかもしれませんがご容赦ください…

 

さて、今回は実験やデータの分析でとってもよく使う「最小二乗法」についてうさぎさんに変わって説明していきたいと思います!!

 

1.最小2乗法を使う理由

物理とかやっているといろんな関係式って出てきますよね!!

例えば、オームの法則とかだと、 V を電圧〔V〕、 I を電流〔A〕、 R を抵抗の大きさ〔Ω〕としたら、\[
I = \frac{V}{R}
\]の関係が成立しますよね!

 

さらに、これを関数としてとらえることもできますね!

例えば、 R = 20 \mathrm{[ \Omega ] } としたとき、IはVの関数  I(V) = V/20 ってかけますよね、これをグラフに書こうとしたら縦軸が  I 、横軸が  V で、原点を通る傾き1/20の直線になりますね。

でも、これだとちょっと見づらいかもしれませんので、今回は  V I の関数 V(I) 、つまり\[
V = RI \ \to \ V(I) = 20 I
\]として具体的にこの関数について扱えるようになるってことにしておきます!

じゃあ、もし電流を2Aだけ流したら、当然電圧は20×2 = 40〔V〕だけ流れるし、10A流したら電圧は20×10 = 200〔V〕流れるってことになりますね!

 

でも、実際に実験でこんな回路を組んでみて、こんな都合のいい値になることって…

 

そうです。まずないです。逆にぴったりになったら奇跡レベルです。

 

私が実際に実験してみて手に入れたデータがあるのですが、ここで紹介しておきますと、

電圧V [V] 電流I [mA]
0.001 0.001
0.100 4.965
0.199 9.999
0.300 15.051
0.400 19.960
0.500 25.027
0.601 30.081

って、やっぱり半端な値ばっかり…*1

 

ってわけで、このオームの法則の関係式に限らず、実験から超正確なデータを得ることは非常に難しく、ほぼ確実に「誤差」が入ってきちゃって、関係式から得られる値(これを「理論値」と言います。以下、「理論値」という言葉を用いて説明します。)とはちょっとずつずれちゃうってのが現実です。しかも、今回に関しては実験に使用した抵抗が20Ωのものだったとしても、その抵抗の大きさが「本当に」20Ωである保証はどこにもないですしね…

 

さあ、そこで、逆に実験で得られたデータをもとに理論値に近い関数のグラフを導出してみるのはどうでしょうか?

中学校や高校の実験でも、実験で測定することで得られた値(以下、測定値と言います)をグラフ用紙にプロットしていって、

「あ、ぱっと見これ直線だ!!!」

って思って、ちょうどいい感じに点が散らばるようにサーっと定規で線を引いた経験、皆さんあるのではないでしょうか?

 

あれ、今思えばむちゃくちゃいい加減なことをしていたなぁと思うのですが、それを計算によって求めるのが今回紹介する「最小二乗法」ってやつです!!

f:id:momoyama1192:20190929080923g:plain

 

結局、いろんな点を打ったグラフに直線を重ねるときに、そのすべての点と直線の距離の和が最小になるような形で直線を引きたい!ってことになっちゃいますよね。

 

ということは、最小二乗法、まだ何も説明してませんが、数学のどの部分の知識を使うかわかってきましたか…?

2乗、距離、和、最小… いろいろ使いそうですね、、、

ってことで漸くですが説明に入ろうと思います!

 

2.最小2乗法の仕組み

ある実験により得られたデータが  x を独立変数、 y を従属変数として  x の関数  y(x) として関係式\[
y = ax + b
\]を満たしていると予想できているとします*2

このとき、 x,  y n 個の測定値の組をそれぞれ  (x_i, y_i)  (i = 1, 2, 3, \cdots, n) とし、これらの方程式からつぎの方程式\[
y_i = a x_i + b
\]における係数  a,  nb の最確値を求めることを考えてみましょう。

 

この係数  a,  b の最確値を複数の測定値から求めようとするのが最小二乗法です!

それでは、本題に入りましょう。

 

3.最小2乗法を用いた計算法

測定の組  (x_i, y_i) で生じた誤差(測定の不確かさ)を  r_i とすると、つぎの式(誤差方程式といいます)\[
r_i = y_i - a x_i - b
\]

が成立します。(ここでの  y は実際に得た値、 ax + b は計算によって得た値なので測定値と理論値の差が誤差  r となります。)

 

グラフで考えてみましょう。

f:id:momoyama1192:20190929084416j:plain

ここでの誤差というのは「理論値」を表す最終的に引きたい直線(今その係数や切片を求めようとしているやつです)と、実際に実験により得た「測定値」の「差」のことですね。つまり、この誤差ができるだけ小さくなる( = 0 に近づく)  a b の値を求めればいいということですね!ただ、それが今回はn個あるということなのですべての場合について考えるということで、それの和\[
\sum^n_{i = 1} r_i
\]が0に最も近づくような  a b の値を求めましょう!

 

…と言いたいのですが、これだと誤差  r は正の値もマイナスの値も取ってしまいそうなので足してるうちに誤差と誤差で打ち消しあったりして…あんまりよろしくなさそうなので、二乗和を取ってみましょう!*3 そうすることで、誤差を正負の値ではなくて、ズレの大きさとして考えることが出来ますね!

というわけで、最小二乗法では\[
\sum^n_{i = 1} r_i^2
\]が最小(二乗しちゃうと値は全部正になるので、0に近づく=最小 としていいわけです)になるような  a,  b の値を求めたらいいわけですね!(だから最小二乗法!)

 

これを  a,  b の二変数関数  S(a,b) とでも考えてみましょう。つまり、S(a, b)が最小になるときってのは、 r^2 が全部正だし二乗の式ってのだから何となく2次関数っぽいし… って考えてたらわかりそうですかね…? そうです。このとき最小値=極小値ですね!

つまり、必要条件として、 a,  b の値というのは2変数関数  S の停留点(極値を取る可能性のある点のことです)でなければなりませんね!

 

もしかしたらまだ停留点についてよく理解できていない方もいらっしゃるかもしれませんが、その方はまずこちらの記事を読んでいただけるといいかもしれません!

www.momoyama-usagi.com

 

さて、では停留点を求めていきましょう。Sはaとbの関数ですのでSをa, bそれぞれについて「偏微分」して、その式を0で結んであげればいいわけですね!

実際に計算してみると、\[\begin{align*}
S(a,b) = & \sum^n_{i = 1} r_i^2 
\\ = & \sum^n_{i = 1} \left( y_i - a x_i - b \right)^2
\\ = &\sum^n_{i = 1} \left( y_i^2 + a^2 x_i^2 +b^2 - 2a x_i y_i - 2b y_i + 2ab x_i \right)
\end{align*}\]ですので、\[\begin{align*}
\frac{\partial S}{\partial a} = &
\sum^n_{i = 1} \frac{\partial}{\partial a} \left( y_i^2 + a^2 x_i^2 +b^2 - 2a x_i y_i - 2b y_i + 2ab x_i \right)
\\ = & \sum^n_{i = 1} \left( 2ax_i^2 - 2x_i y_i + 2 b x_i \right)
\end{align*}\]\[\begin{align*}
\frac{\partial S}{\partial b} = &
\sum^n_{i = 1} \frac{\partial}{\partial b} \left( y_i^2 + a^2 x_i^2 +b^2 - 2a x_i y_i - 2b y_i + 2ab x_i \right)
\\ = & \sum^n_{i = 1} \left( 2b -  2 y_i + 2a x_i \right)
\end{align*}\]となっていますから、このとき\[
\frac{\partial S}{\partial a} = 0, \ \ \ \frac{\partial S}{\partial b} = 0
\]ですので、\[\begin{align*} &
\sum^n_{i = 1} \left( 2ax_i^2 - 2x_i y_i + 2 b x_i \right)
\\ = & \ 2 \sum^n_{i = 1} \left( ax_i^2 - x_i y_i + b x_i \right)
\\ = & \ 2  \left( a \sum^n_{i = 1} x_i^2 - \sum^n_{i = 1} x_i y_i + b \sum^n_{i = 1} x_i \right) = 0
\end{align*} \]\[\begin{align*} &
\sum^n_{i = 1} \left( 2b -  2 y_i + 2a x_i \right)
\\ = & \ 2 \sum^n_{i = 1} \left( b -   y_i + a x_i \right)
\\ = & \ 2  \left( b \sum^n_{i = 1} 1 - \sum^n_{i = 1} y_i + a \sum^n_{i = 1} x_i \right) = 0
\end{align*} \]となり、\[
a \sum^n_{i = 1} x_i^2 - \sum^n_{i = 1} x_i y_i + b \sum^n_{i = 1} x_i = 0 \\
bn - \sum^n_{i = 1} y_i + a \sum^n_{i = 1} x_i = 0
\]という2つの関係式が導出されましたね!*4

さて、ここでちょっと整理、ちょっとシグマが多くなったので見づらくなったため以降、シグマの記号を別の記号 [  ] をつかって\[
\sum^n_{i = 1} x_i y_i = [xy]
\]のように書いていこうと思います。

すると、さっきの2つの関係式は\[
a [ x^2] - [xy] + b [x] = 0 , \ \ \ \ a[x] - [y] + nb = 0
\]というふうに(見た目)簡単に書けますね!

これはただの連立1次方程式なので、これを解くと  a,  b の値が求まります!

 

実際に解いてみると、\[
a = \frac{n [xy] - [x][y]}{n [x^2] - [x]^2} , \ \ \ \ b = \frac{[x^2][y] - [x][xy]}{n [x^2] - [x]^2} 
\]ってな感じに求まっちゃいます!

 

こうして  a,  b の最確値の値を求める一連の手順が最小二乗法です!

 

 

最小2乗法における回帰直線 y = ax + b の計算法2つの測定の組  (x_i, y_i) で生じた誤差(測定の不確かさ)を  r_i とし、誤差方程式\[
r_i = y_i - a x_i - b
\]の  r の2乗の総和\[
\sum^{n}_{i = 1} r^2
\]が最小になるような  a,  b を、\[
a = \frac{n [xy] - [x][y]}{n [x^2] - [x]^2} = \frac{ n \sum^n_{i = 1} x_i y_i - \sum^n_{i = 1} x_i \sum^n_{i = 1} y_i }{ n \sum^n_{i = 1} x_i^2 - \left( \sum^n_{i = 1} x_i \right)^2 }
\\ b = \frac{[x^2][y] - [x][xy]}{n [x^2] - [x]^2} = \frac{ \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \sum^n_{i = 1} (x_i y_i) \sum^n_{i = 1} x_i }{ n \sum^n_{i = 1} x_i^2 - \left( \sum^n_{i = 1} x_i \right)^2 }
\]と取ることで回帰直線  y = ax + b を求めることができる。
しかし、 a,  b を求める数式が少し複雑ですよね。
そこでこの記事の第7章に  a,  b の数式を簡単化したバージョンの公式も書いてあるので気になる人は第7章に飛んでみましょう。

 

4.具体例(電流と電圧)

というわけで、さっきの電流と電圧のお話に戻りましょう。

オームの法則の式は\[
V = RI
\]ですが,今回の実験では初期の起電力がもしかしたらあるかもしれないのでそれを  V_0 とでもすると、これは\[
V = RI + V_0
\]と書けますね。これは、線形的な関係であって最小二乗法で  R V_0 の最確値が出せそうですね! 上の式で言うところの  a R b V_0 になります!

 

ということで、先ほどの実験データ(下に載せています)から最小2乗法を適用してみましょう。

電流 I [mA] 電圧 V [V]
0.001 0.001
4.965 0.100
9.999 0.199
15.051 0.300
19.960 0.400
25.027 0.500
30.081 0.601

本当に理論値通りの値\[
a = R = 20 \mathrm{ [ \Omega ] } , \ \ \ \ b = V_0 = 0 \mathrm{ [ V ] } 
\]になるかを実際に先ほど導出した式に代入して計算してみましょう!

ここでは、理論の式の  x が電流  I y が電圧  V を表していますので、具体的に\[
R = \frac{n [IV] - [I][V]}{n [I^2] - [I]^2} , \ \ \ \ V_0 = \frac{[I^2][V] - [I][IV]}{n [I^2] - [I]^2} 
\]となりますね。

 

ここで、計算により  R V_0 の最確値を求めるにあたって、単なる電流  I や電圧  V の値以外にも、1回の測定における電流  I と電圧  V の積の値だったり、電流  I の値を二乗したものであったりと、ほかにも必要となってくる値がありますので、いったんその値を計算してみましょう。

 

ここで注意ですが、電流  I と電圧  V の積  IV は最終的にその和を求めればいいのですが、測定の組  (I_i, V_i) の積  I_i V_i n 個足した和  [ IV ] と、 I_i の和  [ I ]  V_i の和  V との積  [ I ] [ V ] 必ずしも一致するとは限らないので注意です!きちんと組ごとに積  I_i V_i を計算してそれらを  n 回足したものをとして計算しましょう!

(これは、先に2つの値の積を取ってから足す  a \times b + a \times b と先に同じ値の和を取ってから積を取る  (a+a)(b+b) の値が必ず一致するとは限らないということと同じです!)

 

というわけで、今回は私の友達のExcel君に計算してもらいました。

電流の単位が [mA] ですので、[A] に変換するために  10^{-3} をかけることで\[
[I] = 0.105084 \mathrm{ [A] },  \ \ \ \ [V] = 2.101 \mathrm{ [V] } \\
[IV] = 0.045577783 \mathrm{ [A \cdot V] }, \ \ \ \ [I^2] = 0.002280782718 \mathrm{ [A^2] }
\]と求めることができます!

(少し前に有効数字の記事で「有効数字気にしようね!!!」って内容が多分出ていると思います。しかし、今回は細かい値まで出してみようということでそのまま計算してみようと思います*5

 

有効数字云々がいまいちよくわかってない人はこちらの記事で確認しましょう!

www.momoyama-usagi.com

 

というわけで、以上の値を計算して  R V_0 の最確値を求めてみると、\[
R = \frac{n [IV] - [I][V]}{n [I^2] - [I]^2} = 19.9606644303157 \mathrm{ [ \Omega ]  }\\
V_0 = \frac{[I^2][V] - [I][IV]}{n [I^2] - [I]^2} = 0.00049336271 \mathrm{ [ V ]  }
\]とそれぞれ求まりました。

(有効数字を考慮すると 19.96 [Ω]、0.0004934 [V] となります。[ともに有効数字は4桁])

 

よって直線の傾きと切片が下のように求まりましたね!

f:id:momoyama1192:20190929083958g:plain

 R は 20[Ω]、 V_0 は 0[V]という公称値*6と比較してみても、十分納得できる結果となっていますね!

 

さて、一つしか例をやっていませんが、何となくでも最小二乗法の使い方について理解してもらえたでしょうか…?

 

5.なぜ最小「2乗」法なのか

ところで、どうして最小「2乗」法なんだとおもいますか・・・?

最小「1乗」法がよろしくない理由は上でも説明した通り、誤差に正負があると打ち消しあってしまうからでしたね。

でも、だとしたら最小「4乗」法とか、そもそも誤差に絶対値を取る最小「1乗絶対値」法みたいなのでもいいと思いませんか…?

 

実はこの問題、とっても説明が難しいのですが、結局最小「2乗」法がベストなのです。(まあだから今こうして普及しているのですが。)

 

最小「4乗」法や最小「1乗絶対値」法みたいなのが使われない理由としては、誤差は0.001程度の小さいものから1を超えるものまで様々な可能性があって、それを4乗もしたらその差がとっても大きなものになってしまうというのもありますし、そもそも偏微分とかしていく上で4乗とかあったら嫌ですもんね← 

絶対値も一緒で、結局場合分けとかいろいろしないといけないのでかなりめんどくさくなります。

 

だから、ちょうどすべての誤差を正にして「振れ幅」として扱うことができ、計算も比較的ラクである最小「2乗」法がベターだということです。

 

6.最小2乗法の応用

実はこの最小二乗法、必ずしも直線にしか適応できないというわけではなく、\[
y = \frac{a}{x} + b
\]というような反比例の式でも、\[
X = \frac{1}{x} , \ \ \ \ Y = y
\]とおくことで、\[
Y = aX + b
\]という1次式に変形できるので最小2乗法により  a,  b の値を求めることができたり、\[
C = \gamma T + A T^3
\]というような比熱の式であっても、 T \not = 0 の仮定の下で両辺を  T で割り\[
\frac{C}{T} = \gamma + AT^2
\]として、\[
X = T^2 , \ \ \ \ Y = \frac{C}{T}
\]とおくことで\[
Y = AX + \gamma
\]という1次式に変形できるので、最小2乗法により  A,  \gamma の値を求めることが出来たりします!

 

7.最小2乗法の式の簡単化

先ほど紹介した最小2乗法の式\[
a = \frac{n [xy] - [x][y]}{n [x^2] - [x]^2} = \frac{ n \sum^n_{i = 1} x_i y_i - \sum^n_{i = 1} x_i \sum^n_{i = 1} y_i }{ n \sum^n_{i = 1} x_i^2 - \left( \sum^n_{i = 1} x_i \right)^2 }
\\ b = \frac{[x^2][y] - [x][xy]}{n [x^2] - [x]^2} = \frac{ \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \sum^n_{i = 1} (x_i y_i) \sum^n_{i = 1} x_i }{ n \sum^n_{i = 1} x_i^2 - \left( \sum^n_{i = 1} x_i \right)^2 }
\]の形はかなり複雑ですよね。

手計算をするのは言うまでもなく嫌だし、Excelなどで計算させるのもかなり式入力がめんどくさいですよね。

なので、この式を簡単化しましょう。

(1) 共分散

式を簡単化する前に、簡単化に使う共分散について説明しましょう。

共分散  s_{xy} は、ある  i 番目( i = 1,2,3, \cdots, n)データ  x_i における平均  \overline{x} のずれ( x の残差)と別のデータ  y_i における平均  \overline{y} からのずれ( y の残差)の積の平均を表します。式で書くと、\[
\frac{1}{n} \sum^n_{i = 1} (x_i - \overline{x})(y_i - \overline{y})
\]と表せます。

この式を変形すると、\[\begin{align*} &
\frac{1}{n} \sum^n_{i = 1} ( x_i y_i - x_i \overline{y} - y_i \overline{x} + \overline{x} \cdot \overline{y}
\\ = & \overline{x_i y_i} -  \overline{y} \cdot \frac{1}{n} \sum^n_{i = 1} x_i -  \overline{x} \cdot\frac{1}{n} \sum^n_{i = 1} y_i + \frac{1}{n} \cdot n \overline{x} \cdot \overline{y} 
\\ = & \overline{x_i y_i} - \overline{y} \cdot \overline{x} - \overline{x} \cdot \overline{y} + \overline{x} \cdot \overline{y}
\\ = & \overline{x_i y_i} - \overline{x} \cdot \overline{y}
\end{align*} \]となり、2つの積の平均 - それぞれの平均の積からも共分散を出せることがわかりましたね。

(2) 式の変形

では、実際に共分散を使って式を変形してみましょう。式変形がめんどくさいので基本的には結果だけわかればOKです。

 

 \overline{x},  \overline{y} はそれぞれ  x の平均、 y の平均、 \sigma_x^2 x の分散\[
\sigma_x^2 = \frac{1}{n} \sum^n_{i = 1} x_i^2 - \left( \frac{1}{n} \sum^n_{i = 1} x_i \right)^2
\]を表しています。

\[ \begin{align*}
a & = \frac{ n \sum^n_{i = 1} (x_i y_i) - \sum^n_{i = 1} x_i \sum^n_{i = 1} y_i }{ n \sum^n_{i = 1} x_i^2 - \left( \sum^n_{i = 1} x_i \right)^2 }
\\ & = \frac{ \frac{1}{n^2} \left( n \sum^n_{i = 1} x_i y_i - \sum^n_{i = 1} x_i \sum^n_{i = 1} y_i \right) }{  \frac{1}{n^2} \left( n \sum^n_{i = 1} x_i^2 - \left( \sum^n_{i = 1} x_i \right)^2 \right) }
\\ & = \frac{ \frac{1}{n} \sum^n_{i = 1} (x_i y_i) - \frac{1}{n} \sum^n_{i = 1} x_i \cdot\frac{1}{n} \sum^n_{i = 1} y_i }{ \frac{1}{n} \sum^n_{i = 1} x_i^2 - \left( \frac{1}{n} \sum^n_{i = 1} x_i \right)^2 }
\\ & = \frac{ \overline{x y} - \overline{x} \cdot \overline{y} }{ \sigma_x^2 }
\\ & = \frac{ s_{xy} }{ \sigma_x^2 }
\end{align*} \]となり、 a x,  y の共分散  s_{xy} および  x の分散  \sigma_x^2 を用いて\[
a =\frac{ s_{xy} }{ \sigma_x^2 }
\]で求めることができますね!

 a は「  x,  y の共分散 ÷  x の分散 」で計算できる!)

 

同様に  b も\[\begin{align*}
b & =  \frac{ \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \sum^n_{i = 1} (x_i y_i) \sum^n_{i = 1} x_i }{ n \sum^n_{i = 1} x_i^2 - \left( \sum^n_{i = 1} x_i \right)^2 }
\\ & = \frac{ \frac{1}{n^2} \left( \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \sum^n_{i = 1} (x_i y_i) \sum^n_{i = 1} x_i \right) }{ \frac{1}{n^2} \left( n \sum^n_{i = 1} x_i^2 - \left( \sum^n_{i = 1} x_i \right)^2 \right) }
\\ & =  \frac{ \frac{1}{n^2} \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \frac{1}{n^2} \sum^n_{i = 1} (x_i y_i) \sum^n_{i = 1} x_i }{ \frac{1}{n} \sum^n_{i = 1} x_i^2 - \left( \frac{1}{n} \sum^n_{i = 1} x_i \right)^2 }
\\ & =  \frac{ \frac{1}{n^2} \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \frac{1}{n^2} \sum^n_{i = 1} (x_i y_i) \sum^n_{i = 1} x_i }{ \sigma_x^2 }
\end{align*} \]となる。

ここから先は分子のみの変形を考える。\[\begin{align*} &
\frac{1}{n^2} \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \frac{1}{n^2} \sum^n_{i = 1} (x_i y_i) \sum^n_{i = 1} x_i
\\ = & \frac{1}{n^2} \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \frac{1}{n^2} \sum^n_{i = 1} (x_i y_i) \sum^n_{i = 1} x_i + ( \overline{x} )^2 \overline{y} - ( \overline{x} )^2 \overline{y}
\\ = & \frac{1}{n^2} \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \frac{1}{n} \sum^n_{i = 1} (x_i y_i) \cdot \sum^n_{i = 1} x_i + \frac{1}{n} \sum^n_{i = 1} x_i \cdot \overline{x} \cdot  \overline{y} - \frac{1}{n^3} \sum^n_{i = 1} x_i \sum^n_{i = 1} x_i \sum^n_{i = 1} y_i
\\ = & \frac{1}{n^2} \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \frac{1}{n^3} \sum^n_{i = 1} x_i \sum^n_{i = 1} x_i \sum^n_{i = 1} y_i - \frac{1}{n} \sum^n_{i = 1} (x_i y_i) \cdot \frac{1}{n} \sum^n_{i = 1} x_i + \frac{1}{n} \sum^n_{i = 1} x_i \cdot \overline{x} \cdot  \overline{y} 
\\ = & \frac{1}{n} \sum^n_{i = 1} y_i \left(  \sum^n_{i = 1} x_i^2  - \left( \sum^n_{i = 1} x_i  \right)^2  \right) - \frac{1}{n} \sum^n_{i = 1} x_i \left( \frac{1}{n}\sum^n_{i = 1} (x_i y_i) -\overline{x} \cdot  \overline{y} \right)
\\ = & \overline{y} \sigma_x^2 - \overline{x} \left( \overline{xy} - \overline{x} \cdot \overline{y} \right)
\\ = & \overline{y} \sigma_x^2 - \overline{x} s_{xy}^2
\end{align*} \]
となる。

よって、\[\begin{align*} &
\frac{ \frac{1}{n^2} \sum^n_{i = 1} x_i^2 \sum^n_{i = 1} y_i - \frac{1}{n^2} \sum^n_{i = 1} (x_i y_i) \sum^n_{i = 1} x_i }{ \sigma_x^2 }
\\ = & \frac{ \overline{y} \sigma_x^2 - \overline{x} \sigma_x^2 }{ \sigma_{x}^2 }
\\ = & \overline{y} -\overline{x} \cdot \frac{s_{xy}^2}{\sigma_x^2}
\\ = & \overline{y} - a \overline{x} \ \left( \because a = \frac{ s_{xy} }{ \sigma_x^2 } \right)
\end{align*} \]となる。

 

※変形はこちらのページを参考にさせていただきました!
参考文献:「Black学科へようこそ! 自然科学のための数学 最小2乗法」 
(2019年9月29日アクセス)

 

よって、下のような結果が得られます。(結果が理解できれていれば十分です)

 

2つの測定の組  (x_i, y_i) で生じた誤差(測定の不確かさ)を  r_i とし、誤差方程式\[
r_i = y_i - a x_i - b
\]の  r の2乗の総和\[
\sum^{n}_{i = 1} r^2
\]が最小になるような  a,  b を、\[
a = \frac{ s_{xy} }{ \sigma_x^2 }
\\ b = \overline{y} - a \overline{x}
\]と取ることで回帰直線  y = ax + b を求めることができる。

 \overline{x},  \overline{y} はそれぞれ  x,  y の平均、 \sigma_x^2 x の分散、 s_{xy} x,  y の共分散を表します。

(こちらの方が簡単に求められますね!)

最小2乗法における回帰直線 y = ax + b の簡単な求め方

実際に第3章で計算したデータと同じ電圧と電流で正しい値がでるかを調べてみましょう。(電流  I x、電圧  V y、抵抗  R a、起電力  V_0 b に相当)

電流 I [mA] 電圧 V [V]
0.001 0.001
4.965 0.100
9.999 0.199
15.051 0.300
19.960 0.400
25.027 0.500
30.081 0.601

電流  I が [mA] になっているので、 10^{-3} 倍して [A] になおしてから共分散  s_{xy} および分散  \sigma_{x} を計算します。\[
s_{xy} = 0.0020053 = 2.0053 \times 10^{-3} \\
\sigma_{x} = 0.00010047 = 1.0047 \times 10^{-4}
\]なので、\[
a = R = \frac{s_{xy}}{\sigma_{x}} = 19.959
\]となります[有効数字4桁]。( b で計算するために1桁多く求めている)

同様に  b も求めます。 x の平均  \overline{x} y の平均  \overline{y} はそれぞれ、\[
\overline{x} = 0.015012 \\
\overline{y} = 0.30014
\]なので、\[\begin{align*}
b & = V_0
\\ & = \overline{y} - a \overline{x} 
\\ & = 0.0005155
\end{align*} \]となります。

先ほどの計算式より比較的ラクに計算できましたね!

 

(Excelでは共分散は covar 関数、分散は var.p 関数を使ってラクラク計算することができます!)

 

8.Excelで最小2乗法を自動計算させる方法

実は、回帰直線  y = ax + b はExcel上で簡単に計算をさせることができます。

今回はExcelで回帰直線の値を求める方法についてわかりやすくまとめました!

 

皆さん、Excelの準備はいいですか!?

 

Step1:データを入力

まずは、データを入力してください。今回は上の例で挙げた電流と電圧から抵抗  R と起電力  V_0 を求めます。

電流の値は [mA] ではなく、 A で入力してください。

データの入力が終わったら挿入ボタンをクリックしてください。

f:id:momoyama1192:20190928204747j:plain

 

Step2:散布図を表示させる

つぎに入力したデータをすべて選択し、上側にある「おすすめグラフ」をクリックします。

f:id:momoyama1192:20190928204751j:plain

 

すると、グラフの種類が出てきます。

その中から「散布図」を選び、OKをクリックします!

(おそらく一番上に「散布図」が出てきます)

f:id:momoyama1192:20190928204658j:plain

 

すると、グラフが出てきます。

Step3:y = ax + b の a,b の値を表示させる

つぎに、出てきたグラフの線を右クリックしてください。

f:id:momoyama1192:20190928204707j:plain

 

すると、色々出てくるので「近似直線の追加」を選んでください。

f:id:momoyama1192:20190928204711j:plain

 

すると、右側に「近似直線の書式設定」ウィンドウが出てくるので、線形近似であることを確認してから「グラフに数式を表示する」をクリックしてください。

f:id:momoyama1192:20190928204715j:plain

 

すると、下のように  y = ax + b a,b の値が表示されます。

f:id:momoyama1192:20190928204719j:plain

今回の場合は \[ y = 19.961x + 0.0005\] なので  a = R = 19.961,  b = V_0 = 0.0005 となることがわかります。

 

しかし、 b の部分の有効数字が1桁しか表示されていませんね。

なので  a,  b の桁数をもっと多く表示させる設定をしてみましょう。

(表示させる必要がないときはここで終了です。)

 

Step4:表示桁数を変える

 y = ax + b の値(今回は  y = 19.961x + 0.0005)が表示されている部分をクリックしてください。

f:id:momoyama1192:20190928204723j:plain

 

すると、このようなウィンドウが右側に表示されています。

そこからカテゴリを「数値」もしくは「指数」を選んでください。
(指数を選ぶと  a \times 10^n の形で表示されます。)

f:id:momoyama1192:20190928204727j:plain

※万が一この表示になっていない場合、この画像にある棒グラフのアイコンをクリックすると出てくるはずです。

 

(1) 数字を選んだ場合

表示させる小数点以下の桁数を入力してください。

f:id:momoyama1192:20190928204731j:plain

 

桁数を入力してから、適当な箇所をクリックすると自動的に設定が反映されます。

f:id:momoyama1192:20190928204735j:plain

ちゃんと小数第8位まで表示されましたね。

 

(2) 指数を選んだ場合

指数を選んだ場合、 a \times 10^n の形で表示されます。

 a の部分に表示させたい桁数を入力してください。

f:id:momoyama1192:20190928204739j:plain

 

桁数を入力してから、適当な箇所をクリックすると自動的に設定が反映されます。

f:id:momoyama1192:20190928204743j:plain

ちゃんと  a \times 10^n の形( a は小数第4位まで)で表示されましたね。

※ Eは10の何乗かを表しています。例えば E-04 であれば  10^{-4}、E+01であれば  10^{1} を表しています。

 

9.さいごに

行基本変形サークルの会長さんより一言

というわけで、この最小二乗法、超万能です。グラフ書く上で困ったら最小二乗法、バンバン使っていきましょう!! 

 

以上、超簡単かつ超雑ですが最小二乗法についてまとめてみました!

もしかしたらまた別の記事でお目にかかることがあるかもしれないのでその時まで、また!

 

私ももやまより一言

以上、行基本変形サークルさんと一緒に最小2乗法の記事を書いてみました!

この記事を読んで最小2乗法についてわかっていただければ本当にありがたいです!

 

*1:今回は都合上、電圧Vを設定してそこから電流Iを測定しています。やってること逆じゃねえか!って思う方もいらっしゃるでしょうが、今回はこれらの測定の結果からRが本当に20Ωの抵抗かどうかを判断していきたいのでどちらを設定し、どちらを測定したかはさほど重要ではありません。抵抗値は20Ωである(はず)という条件の下、実験しました。

*2: y(x) x のように、自身の値が変化する以外に値の変わりようがない変数を独立変数 y のように、独立変数である  x の値が変化することで自身の値が変化するような変数を従属変数といいます。

*3:統計のときに偏差(平均と測定値の差のことを全部足したら打ち消しあって0になっちゃうから分散とか求めるときは偏差の「二乗和」を取るってのと似てますね!

*4:シグマと微分演算子は有限の和であればいつでも交換することができます! つまり、 nが有限の値であれば\[
\frac{d}{dx} \sum^n_{i = 1} S(x) = \sum^n_{i = 1} \frac{d}{dx} S(x)
\]は常に成立します。これは何変数関数にでも有効ですし、偏微分にも有効です。数学的帰納法を使えば簡単に証明できるので気になった方は是非証明してみてください!

*5:今回の場合は  [ IV ] ,  [ I^2 ] は有効数字4桁に揃えましょう。人によっては小数点以下をそろえる人とかもいるみたいだけど…

*6:このような実際どうかわからないけどこの値のはず!というような値のことを公称値とよびます。