Web Analytics Made Easy - StatCounter

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

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

うさぎでもわかる実験の基礎 片対数・両対数グラフを用いた最小2乗法

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

今回も行基本変形サークルの会長と一緒に記事を書いてみました!

 

会長からの挨拶

またまたこんにちは! 行基本変形サークル会長です!

今回は皆さん気になっているであろう片対数・両対数グラフについてうさぎさんと一緒にいろいろと説明していきたいと思います!! よろしくお願いします!!

 

 

1.片対数・両対数グラフって?

まず、片対数・両対数ですが、それぞれ「かたたいすう」、「りょうたいすう」と読みます。「へんたいすう」とか読んじゃうと恥ずかしい思いをしちゃうので気を付けましょう。

 

それぞれ、片対数、両対数とか呼ぶことがありますが、基本的にそれは片対数グラフや両対数グラフなどの「グラフ」のことを指すと思ってもらって大丈夫です!

(片対数・両対数グラフのことをまとめて「対数グラフ」と呼んだりもします。)

 

まず、片対数グラフとは「軸のどちらか片方が対数の軸となっているグラフ」のことです。縦軸と横軸、どちらが対数軸でも良いのですが、私のイメージだと縦軸が対数軸となっているグラフの方が多い気がします。詳しくは後程のコーナーで説明します。

 

次に、両対数グラフとは「軸の両方が対数の軸となっているグラフ」のことです。

 

片対数グラフ・両対数グラフのグラフ用紙はこちらのホームページに掲載されていたのでぜひご覧ください。

ultrasonics.jp

 (今回片対数グラフの説明をするにあたって、神戸市立工業高等専門学校長谷研究室の片対数グラフを引用しています。[アクセス日:2019年9月29日])

 

今まで方眼のグラフに慣れていた方にとっては「なんだこれ…?」と思われる方もいらっしゃると思いますが、この軸に沿ってグラフを描くと、とってもいいことがあるんです! それでは、それぞれのグラフについて例を出しながら説明していきます!

 

ちなみに対数軸の底は基本的に10、すなわち常用対数軸とする場合がほとんど(というかそれ以外を見たことがない)ですので、今回もそれに則ってやっていきます。

2.対数軸の読み方・プロットの仕方

片対数グラフはまず目盛りの増え方が異なります。

ということで、目盛りに数字を振ってみました!

f:id:momoyama1192:20190929210415g:plain

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, … 不思議な増え方をしていますね…。

片対数グラフの1つ上の目盛りが広く、1つ下の目盛りが狭くなっているのが目盛りの間隔の変化のサインを表しています(この部分は必ず値が  10^n になります)。親切なグラフ用紙なら太線になっていることもあります。

このサインより上側に行くと1つあたりの目盛りの単位が10倍に、下側にいくと目盛りの単位が 1/10 倍になります。

 

ところでなぜ対数グラフの目盛りは広かったり狭かったりするのでしょうか?

 

対数グラフは対数の軸でしたね。

ここで、1〜10 の値それぞれに  \log_{10} をとって方眼紙と比較してみましょう。

 

f:id:momoyama1192:20190929210422g:plain

すると、1と2の間隔は  \log_{10} 1 \log_{10} 2 の間隔、2と3の間隔は  \log_{10} 2 \log_{10} 3 の間隔、と等しくなっていますね!

さらに  \log_{10} 3 から  \log_{10} 9 の値まで比べると方眼紙を使って片対数グラフを作ることができますね!

 

もう1つ、 10^n を境目に突然値の増え方が10倍になりましたね。この仕組みを図とともにわかりやすく書いてみました。

f:id:momoyama1192:20190929213131g:plain

例えば20(つまり  \log_{10} 20 というのは\[
 \log_{10} 20 = \log_{10} 2 + \log_{10} 10
\]の2つに分解できますね。

同じ対数の底同士の足し算は真数同士の積で計算できますね。同様に 30, 40の場合も\[
 \log_{10} 30 = \log_{10} 3 + \log_{10} 10 \\
 \log_{10} 40 = \log_{10} 4 + \log_{10} 10
\]のように  \log_{10} 10 が足されていますね。

そのため、 10^n を境に値が10倍されるのです*1

 

ちなみに片対数グラフは  y 軸側だけ(もしくは  x 軸側だけ)が対数目盛ですが、両対数目盛は  x,  y 軸ともに対数目盛になっています。

3.片対数グラフについて

みなさん、極寒の地でコーヒーを飲むことってよくあるじゃないですか?(ない)

そんでもって、そのコーヒーを極寒に放置したらきっと急激に温度下がっちゃうじゃないですか?(それはそう)

というわけで、ちょっと私が極寒にコーヒーを放置してきて1分ごとの温度を測定してきましたので、そのデータをまずは御覧ください。

時間 (分) 温度 (℃)
0 94.79
1 85.23
2 78.07
3 71.45
4 64.33
5 60.21
6 54.72
7 51.13
8 47.75
9 43.68
10 41.65

 

と、本当に10分間でこんなに温度が下がっちゃうかはさておき、こんな感じで測定してきたのでとりあえずこれを「方眼の」グラフ用紙にプロットしてみますね!

 

プロットしてみると、こんな感じになると思います。

 

f:id:momoyama1192:20190929230805g:plain

0分目は最初の温度で、それから10分間1分毎に測定した結果をプロットしています。

 

ではこの結果、理論上どのような変化をしているのでしょうか?

Excel先輩の近似曲線機能を使って、直線で近似してみるとこうなります。

 

f:id:momoyama1192:20190929230809g:plain

まあ、こんなものか… って感じですよね。

ここで、温度変化を見てみると、最初の1,2分は10度近い温度減少が起きていますが、最後の9、10分のところなんか2度程度しか下がっていませんよね…?

ということは、線形じゃなくってもっといい近似ができるのかも…

試しに指数関数で近似してみると、

 

f:id:momoyama1192:20190929230813g:plain

わあ!! こっちの方がなんかしっかり来る!!!!

 

そうなんです。実は、理論上これは理論値線は指数関数の曲線になるんです*2

 

ということで、このような指数関数的な増減をするであろうものに対して有効であるのが片対数グラフなんです!

先程説明した通り、片対数グラフは軸の片方が対数軸になっているグラフでしたね。

 

試しに常用対数  \log_{10} を取ってみると、\[
\log_{10} 1 = 0, \ \ \ \log_{10} 10 = 1 , \ \ \ \log_{10} 100 = \log_{10} 10^2 = 2 \\
\log_{10} 1000 = \log_{10} 10^3 = 3
\]と、常用対数という制約(?)の下では規則的な増加をしていることがわかりますね。

ちなみに、…, -3, -2, -1, 0, 1, …というような方眼で言うところの負の数については同じように常用対数  \log_{10} を考えると、

…, 0.001, 0.01, 0.1, 1, 10, …

と変化していくはずですね。

 

気づいた方もいるかもしれませんが、対数軸には「0」という値は存在しません \log_{10} M という値の  M が真数条件で必ず  M \gt 0 を満たさなければならないからですね。

 

というわけで、もうこのあたりで感づいた方もおられるかもしれませんが、縦軸を対数軸にした片対数グラフで先程のコーヒーのグラフをプロットしてみましょう!

 

プロットした結果がこんな感じになります!

 

f:id:momoyama1192:20190929230818g:plain

(っ’ヮ’c)ウゥッヒョオアアァ!!!!!!! そうです、これ、直線になっちゃうんです。

(今回はちょっと値がすべて10℃から100℃の範囲にあるのでちょっと縦軸が対数だってわかりにくいですけど… ちなみに1℃から100℃の範囲だとこんな感じです。)

 

f:id:momoyama1192:20190929231838g:plain

ここまでしたら、理論曲線求める方法も何となくもうわかっちゃってますよね…?

 

そうです。最小二乗法です。

 

最小二乗法については詳しくは先日別枠で記事を書いてますのでそちらを見てください!

 

ここまでしたら、理論曲線求める方法も何となくもうわかっちゃってますよね…?

 

そうです。最小二乗法です。

 

最小二乗法については詳しくは先日別枠で記事を書いてますのでそちらを見てください!

www.momoyama-usagi.com

 

ただし、今回は注意しないといけないことがあって、時間を  x 軸、温度を  y 軸に取っているのですが、縦軸は常用対数軸なので、実際は  (x,y) というデータをプロットしているのですが、見た目的には  (x, \log_{10} y) というデータをプロットしていることになります!

 

つまり、最小二乗法に使う温度のデータもいったん常用対数を取ってあげないといけません

 

というわけで、使うデータはこんな感じになります。

 x (x :時間)  \log_{10} y ( y :温度)
0 1.976763
1 1.930592
2 1.892484
3 1.854002
4 1.808414
5 1.779669
6 1.738146
7 1.708676
8 1.678973
9 1.640283
10 1.619615

せっかくなので、 x の分散  \sigma_x^2 x,  y の共分散  s_{xy}、そして  x,  y のそれぞれの平均  \overline{x},  overline{y} から傾き  a と切片  b を求めてみましょう。\[
X = x, \ \ \  Y = \log_{10} y
\]としたときにきっとこのデータは\[
Y = aX + b
\]の関係を満たしそうなので、最小2乗法で  a,  b の最確値を求めるようとしたとき、\[
a = \frac{s_{XY}}{\sigma_{X}}, \ \ \ b = \overline{Y} - a \overline{X}
\]という関係が成り立ちますね!

 

これらから  a,  b の最確値を求めると、\[\begin{align*}
a & = \frac{s_{XY}}{\sigma_{X}}
\\ & = - \frac{0.35895}{10}
\\ & = - 0.03590 \cdots 
\end{align*}\]\[\begin{align*}
b & = \overline{Y} - a \overline{X}
\\ & = (1.784329 \cdots) - (-0.03590 \cdots ) \cdot 5
\\ & = \ 1.9638 \cdots
\end{align*}\]となります。

 

つまり、このコーヒーの温度は見た目\[
Y = -0.03590 X + 1.9638
\]という直線的な関係を満たしているということですね。

 

見た目の話なので、本当にこれで正しいのか疑問に思う方もいるかと思いますので、これを指数関数の式に戻すことを考えてみましょう。つまり、 (X,Y) で直線的な関係式となる式を  (x,y) で表し、さらに  y(x) という  x の関数として見ていこうということになりますね! 早速やっていくと、\[
Y = aX + b
\]という関係について、\[
X = x, \ \ \ Y = \log_{10} y
\]という置換をしているとしたとき、この線形的な関係式は、\[
\log_{10} y = ax + b
\]と変形できます。すなわち、これを  y について解くと、\[
y = 10^{ \log_{10} y } = 10^{ax + b} = 10^b \cdot 10^{ax}
\]となります。

 

実は  b という切片も  \log_{10} y 軸の切片ですので、実際の  y 切片を  b' とすると、\[
b = \log_{10} b'
\]という関係式を満たしています。つまり、上の式はさらに\[
y = 10^{\log_{10} b'} \cdot 10^{ax} = b' \cdot 10^{ax}
\]と変形できるんです。

 

というわけで、コーヒーの温度について、\[
a = - 0.03590, \ \ \ b = 1.9638 \ \to \ b' = 10^b \fallingdotseq 92.00
\]ですので、 x 分後のコーヒーの温度  y(x) は、\[
y(x) = 92.00 \cdot 10^{-0.3590x}
\]という関数で表される。

 

実際にこの関数に  x を0から10まで代入してみます。そして、もともとの実測値と計算により導出した理論値の差(誤差)を比較してみましょう。

 

このようになります。

 

f:id:momoyama1192:20190929230822g:plain

はじめの方は少し誤差が大きいですが、底を10とした指数関数の近似だとこれが最も理論値に近い曲線になるということですね。

 x が2より大きいと、誤差も小さく、無視できるようなものになりますね。

 

以上、長くなってしまいましたが「片対数グラフ」についてです。まとめとして「片対数グラフ」は

『指数関数』的な増減をしそうなデータをプロットするときに結果が直線になってとても見やすくなるグラフ」

です!

 

片対数グラフにおける回帰直線の求め方

指数関数的な増減をしそうなデータの回帰直線を求める場合、\[
X = x, \ \ \  Y = \log_{10} y
\]と置いてから最小2乗法を適用し、\[
Y = aX + b
\]の  a,  b の値を求めると回帰直線\[
b = \log_{10} b' \\ b' y = \cdot 10^{ax}
\]と変形することができる。

 

4.両対数グラフについて

続いて、両対数グラフについて説明していきます!

基本的には片対数と同じことをするのでこちらはさくさく説明していきますよ~

 

今回は先に結果から見ていきましょう!

 

両対数グラフでは、両方の軸が常用対数軸ですのであるデータをプロットしたいときに、本当は  (x,y) というデータなのですが、両方に常用対数をとった  (\log_{10} x, \log_{10} y) というデータを両対数グラフにプロットしていくことになりますね。それが線形的な関係を満たすと考えられるとき、見やすくするために\[
X = \log_{10} x, \ \ \ Y = \log_{10} y
\]とおくと、これも片対数と同じく\[
Y = aX + b
\]という関係式を満たすはずですね!\[
X = \log_{10} x, \ \ \ Y = \log_{10} y
\]と置換してますから、上の線形的な関係式は\[
\log_{10} y = a \log_{10} x + b
\]に等しく、実は切片  b も常用対数軸での切片であるので、方眼の  xy 座標平面に点をプロットするとしたときに真の切片の値  b' は\[
b = \log_{10} b'
\]を満たしている。つまり、上の関係式は\[\begin{align*}
\log_{10} y & = a \log_{10} x + \log_{10} b'
\\ & = \log_{10} b' + \log_{10} x^a 
\end{align*}\]すなわち、\[
y = b' x^a
\]となります。

 

つまり、両対数グラフを用いることでグラフがきれいな直線となるのはデータがべき関数的な増減をしそうなときです!

 

べき関数とは、簡単にいうと  y = x^a のような関数で、 x のなんとか乗(このなんとかは別に自然数じゃなくても実数でもなんでもいいです)というやつです。

 

じゃあ、試しに車の制動距離について調べてみましょう。

 

自動車学校に通っていたみなさんならわかると思いますが、制動距離とは

「車がブレーキをかけ始めてから完全に静止するまでに移動する距離」

のことですね。

(ちなみに、運転手がブレーキを踏もうとしてから実際に踏むまでに車の移動する距離のことを「空走距離」と言います。この空走距離と制動距離を合わせて停止距離と言います。これ車校のテストむちゃくちゃでますよ!!!)

 

車の速度と制動距離のデータはだいたいこんな感じみたいです。

時速 (km/h) 制動距離 (m)
20 3
30 6
40 11
50 18
60 27
70 39
80 54
90 68
100 84

 

縦軸を制動距離、横軸を時速として普通の方眼にこのデータをプロットしたら、こんなグラフになります。

f:id:momoyama1192:20190929230826g:plain

車が止まっているとき、すなわち 0 km/h のときは当然制動距離も0mなはずなので、このグラフ、理論上原点を通りそうですね。

 

線形近似してみますと

f:id:momoyama1192:20190929230830g:plain

こんな感じ。これはあまりにも不格好というか、そもそも原点も通らないですね…

まあわかっていると思いますが、この近似はよろしくありません。

f:id:momoyama1192:20190929230834g:plain

こちらは指数近似。先ほどの「片対数」グラフは指数近似でしたが、今回は「べき関数」に近似しますのでこちらもやはり不適切ですね。

横軸の数値が大きくなっていくほど誤差が大きくなっています。

出会ったころはいい子だと思ってたんだけど、だんだん本性でてきてやべぇやつになっちゃった子みたいですね。よくわかりませんけど。

 

さあ、お待たせしました。べき関数で近似してみましょう。

f:id:momoyama1192:20190929230838g:plain

おお!!これだよこれこれ!!! みなさんそう思いましたよね…?

やっぱり、この関係はべき乗で近似してよさそうですね!!

はい。長すぎる茶番にお付き合いいただきありがとうございました()

 

というわけで、 x 軸と  y 軸を両方常用対数軸にしてグラフを描いてみると、こうなります。

f:id:momoyama1192:20190929230842g:plain

お見事。ちゃんと線形っぽく並んでいますね。これならグラフも綺麗に書けそうです。

 

というわけで、直線的な関係になったということは、元の理論曲線がどんな関数かも導出できるってことですね…???

 

もう、何をするか皆さんおわかりですね…???????

 

そうです。最小二乗法です。

 

ですが、今回は両軸が常用対数軸ですので、xとy、両方に常用対数を取ってから最小二乗法を適応させてあげなければいけません。

というわけで、さっそく常用対数を取ってみるとデータはこんな感じになります。

f:id:momoyama1192:20190929230847g:plain

というわけで、さっそく\[
X = \log_{10} x, \ \ \ Y = \log_{10} y
\]として最小2乗法により関係式\[
Y = aX + b
\]の傾きと切片  a,  b の最確値を決定していきましょう!

先程と同様、\[
a = \frac{s_{XY}}{\sigma_{X}}, \ \ \ b = \overline{Y} - a \overline{X}
\]という関係を用いると、\[\begin{align*}
a & = \frac{s_{XY}}{\sigma_{X}}
\\ & = - \frac{0.102498 \cdots}{0.048222 \cdots}
\\ & = 2.125557 \cdots 
\end{align*}\]\[\begin{align*}
b & = \overline{Y} - a \overline{X}
\\ & = (1.340394 \cdots) - (-2.125557 \cdots ) \cdot 5
\\ & = -2.334401 \cdots
\end{align*}\]と求まります。つまり、この直線は見た目\[
Y = 2.1256 X - 2.3344
\]

という線形的な関係式を満たしていることになりますね。

 

さあもうひと踏ん張り!これをもともとの  (x,y) というデータに対応させて  y(x) という制動距離のべき関数の関係式を導こう!

最初に説明した通り、両対数グラフ上で見た目\[
Y = aX + b
\]という関係式を満たしているとき、実際には\[
y = b' \cdot x^a \ \ \ ( b = \log_{10} b' \ \to \ b' = 10^b)
\]というべき乗の関係式が成り立っているのだから、最小二乗法で導いた\[
a = 2.1256, \ \ \ b = -2.3344 \to b' = 10^b = 10^{-2.3344} = 0.00463019 \cdots
\]を代入すると、\[
y(x) = 0.004630 \cdot x^{2.1256}
\]という関係式が導出できた。

きっと、これが車の制動距離をデータから導出した理論値曲線なはずですね!

 

実際にxに20から100までの値を代入して、その誤差を確認してみましょう。

f:id:momoyama1192:20190929230851g:plain

はい。こんな感じになります。まあ妥当なものでしょう。まあもともとあったデータが整数値だったので、それから近似した式としては優秀なものでしょう()

 

はい、というわけで両対数グラフについて説明していきました!

まとめとしては「両対数グラフ」は

『べき関数』的な増減をしそうなデータをプロットするときに結果が直線になってとても見やすくなるグラフ」

です!

 

両対数グラフにおける回帰直線の求め方

べき関数的な増減をしそうなデータの回帰直線を求める場合、\[
X = \log_{10} x, \ \ \ Y = \log_{10} y
\]と置いてから最小2乗法を適用し、\[
Y = aX + b
\]の  a,  b の値を求めると回帰直線\[
b = \log_{10} b' \ \to \ b' = 10^b \\
y = b' \cdot x^a
\]と変形することができる。

 

5.Excel上で片・両対数版の最小2乗法を計算させる

では、Excelで片対数、両対数の最小2乗法の曲線の傾きと切片を求める方法についてまとめていきます。

まず、求めたい曲線の傾きと切片のデータを選んでから散布図を表示させてから線をクリックし、「近似直線の追加」を選択してください。

↓ここまでは通常の最小2乗法と同じです。わからなければこちらのほうに図を使ってわかりやすく説明しているのでこちらをご覧ください。

www.momoyama-usagi.com

(1) 片対数グラフの回帰曲線を求める場合

片対数グラフの回帰曲線  y = 10^b \cdot 10^{ax} a,  b' の値を求める場合、近似曲線のオプションで「指数近似」を選びましょう。

f:id:momoyama1192:20190929230746j:plain

 

グラフに数式を表示する、にチェックを入れたら無事\[
y = 92.00 e^{-0.08265x}
\]と表示されましたね。(数字の表示桁数は各自で調整しましょう。)

f:id:momoyama1192:20190929230756g:plain

しかし、底が 10 ではなく  e になってしまってます。なので直しましょう。\[
e^{-0.08265x} = 10^{a'}
\]となるような  a' を求めます。\[
\log_{e} e^{-0.08265x} = a' \log_{e} 10 \\
-0.08265 x = a' \log_{e} 10
\]となるので、\[
a' = \frac{-0.08265}{\log_{e} 10} = -0.3589 
\]となり、\[
y = 92.00 10^{-0.3589x}
\]と求められます。

※出た値に  \frac{1}{\log_{e} 10} 倍すれば  10^{a' x} の形に直せます。

(2) 両対数グラフの回帰曲線を求める場合

両対数グラフの回帰曲線  y = b' \cdot x^a a,  b' の値を求める場合、近似曲線のオプションで「累乗近似」を選びましょう。

f:id:momoyama1192:20190929230742j:plain

グラフに数式を表示する、にチェックを入れたら無事\[
y = 0.0004630 x^{2.126}
\]と表示されましたね。

(数字の表示桁数は各自で調整しましょう。)

f:id:momoyama1192:20190929230800g:plain

 

6.さいごに

はい、結局長くなってしまいましたが片対数・両対数グラフの対数グラフについてその書き方やもともとの理論曲線、さらにどんなときにその対数グラフを用いるのが有効かなどについて説明していきました。

 

実は、私は大学の実験の授業の最初に提出したレポートでしかまだこの対数グラフを描いたことがないのですが、人によってはこれからじゃんじゃん使っていくようになる人もいると思いますのでこれを気に是非とも覚えてください!

 

それと、理論曲線を求めるのにもやはり「最小二乗法」は欠かせない存在なのでそちらも忘れずセットで必ず覚えておいてください!!!

 

以上、長くなりましたが今回は片対数・両対数グラフについて説明していきました! もしかしたらまた違う記事でも登場するかもしれないのでその時はよろしくお願いします!! それでは!!!!

*1:80,90,100, 200, 300のように100を超えるとさらに値が10倍されるのも  \log_{10} 100 = 2 が足されているからです!

*2:だって、線形だとしたらいつか温度マイナスになっちゃいますもんね…。 いくら極寒だといっても飲み物が凍るほどのことはあんまりないですもんね… 基本は究極に放置しておくとコーヒーが置かれている環境(今回なら極寒)の気温に近づくと言われているので、数学の極限を考えるとその外気の値に収束するはずですね。