2020 年度「データサイエンス基礎」 2020-06-02

きょうからデータサイエンスにはいる。 と言っても,Excel を使った統計学の基礎,といったところである。 この分野が専門でない担当者(岩瀬)が作成したため,不備はあるかと思う。

なお,レポートとして提出してもらうのは最後の一つだけなので, あとは,適当なファイル名で実験し,終わったら削除してしまって構わない。

Windows の場合,画面左下隅の Windows アイコンをクリックしてから calc... と打ちかかると,電卓を起動できる。

§2.1 平均と分散

A1 から A5 までに,1, 2, 3, 4, 5 を入力せよ。

A7 に,「=average(a1:a5)」と入力せよ。 コロン「:」をセミコロン「;」と間違えないように。 すると,A1 から A5 までのの平均の値 3 になる。 A8 に,「=var.p(a1:a5)」と入力せよ。 すると,A1 から A5 までの分散の値 2 になる。

ここでデータの平均と分散について説明する。 データを x1, x2, ..., xN とする。 N はデータの個数である。 以下,∑ は,i を 1 から N まで動かして足すものとする。

平均は,∑xi / N で定義される。これを m と書こう。 分散は,∑(xi - m)2 / N で定義される。 これの非負の平方根を σ と書く。 すると分散は σ2 である。 分散は,各データと平均との差の二乗の平均である。

分散は,次のように計算することもできる。 ∑(xi - m)2 / N = ∑ xi2 / N - 2∑ xi / N * m + m2 = ∑ xi2 / N - 2 m * m + m2 = ∑ xi2 / N - m2。 つまり,「データの二乗の平均 - データの平均の二乗」である。

上では,関数 average() と var.p() を使って平均,分散を計算した。 こんどは,自力でこれらを計算してみよう。

A9 に「=sum(a1:a5)」と打ち込むと,A1 から A5 までの和が A9 にはいる。 暗算したものと比較せよ。これを項数 5 で割るのは暗算でできよう。

B1 から B5 に,A1 から A5 までと,平均 3 との差の二乗を入力させよう。 それには,B1 に「=(a1-3)^2」と入力する。 「^」は Excel ではベキ乗を意味するのだった。 そして B1 の右下の小さな正方形を下へドラッグする。 はいった数値を暗算したものと比べよ。 次に,暗算でそれらの合計を項数 5 で割り,分散と一致したことを確かめよ。

こんどは,C1 から C5 に,A1 から A5 までのデータの二乗が, C7 にそれらの平均値がはいるようにせよ。 そして, 暗算により「データの二乗の平均 - データの平均の二乗」の公式で分散を計算して, 合っていることを確認せよ。

標準偏差は関数 stdev.p() で計算できる。 「=stdev.p(a1:a5)」のように使う。

付:分散には,var.s() という関数で計算されるものがある。 それは, ∑(xi - m)2 / (N - 1) で定義される。 分母の N が N - 1 に変わったものである。 この二つの定義の違いについては,この授業ではふれない。 標準偏差にも,stdev.s() という関数で計算されるものがある。

§2.2 一様乱数

A1 に「=rand()」と入力する。 最後の小かっこ開き,小かっこ閉じ,も忘れないように。 この関数は,0 以上 1 未満の一様乱数を返す(=計算する)ものである。 一様乱数の意味はのちに説明する。おおざっぱにいうと, もしも仮に「1 から 1000 までの自然数に値をとる一様乱数」と言ったら, この千個の数がどれも同じ確率で現れるもの,である。 (0 以上 1 未満の数は無限個あるので,これでは厳密な説明になっていない。)

A1 を範囲指定し,右下の小さな正方形を下にドラッグして,A10 までを埋めよ。 同じ値が並ぶのではなく,ばらばらな数で埋まるはずである。 次に,A1 から A10 までを範囲指定し,右下の小さな正方形を右にドラッグして, B1 ... B10 から J1 ... J10 までを乱数で埋めよ。 これらの乱数の値は F9 キーを押すごとに変わる。 (ファイルに保存し,ファイルを閉じ,再度開いても,値は変わる。)

K1 から K100 までを乱数で埋め,K 列を選択し, 「挿入」タブの中の「縦棒/横棒グラフの挿入」, 「2-D縦棒」のどれかを選ぶと棒グラフが描ける。 何の傾向もないのがわかるだろう。F9 キーを押すたびにグラフは変わる。 K1 から K1000 までにしたらどうだろう?

§2.3 二項分布 B(n,p)

二項分布 B(n,p) について説明する。 n は自然数,p は 0 以上 1 以下の実数である。 一回の試行である事象が起こる確率が p だとする。 これを n 回おこなう。 この事象が r 回起こる確率は nCrprqn-r である。 ただしここで q = 1-p とする。また,00 が現れたらそれは 1 とみなす。 この分布の平均は np, 分散は npq となることが高等学校の数学 B の教科書に載っている。

以下,二項分布に関する実験をしてみよう。

A1 に「=if(rand()<1/3,1,0)」と打ち込め。 if は,そのあとに書かれた条件 rand()<1/3 が真か偽かにより, その次に書かれた 1 または 0 でそのセルを埋める。 rand() は 0 以上 1 未満に値をとる乱数を返すから, これは,確率 1/3 で 1, 確率 2/3 で 0 を返すことになる。 これは,1個のサイコロを振って,1 か 2 が出たら 1, それ以外なら 0, という試行にあたる。

A1 を範囲指定し,右下の小さな正方形を右へドラッグし,J1 までを埋める。 次に,A1 から J1 までを範囲指定して,右下の小さな正方形を下へドラッグし, 第 1000 行までを埋めよ。

A 列を範囲指定し,「挿入」タブの中の「統計グラフの挿入」。 「ヒストグラム」のうちの左のものをクリックすると, 0 が約 2/3, 1 が約 1/3 であることがわかる。 (このグラフは消す。)

L1 に「=sum(a1:j1)」と打ち込む。 これは,A1 から J1 までを,サイコロを 10 回振ったものとみなし, 1 または 2 が出た回数を記録したものになる。 そして,L1 の右下の小さな正方形を下にドラッグして,L1000 までを埋めよ。 これで,10 回振るという試行を 1000 回繰り返したことにあたる。

L1 から L1000 までの平均を L1002 に,分散を L1003 に記入せよ。 上で述べた値に近いだろうか? (n は 1000 ではなく 10 である。注意。)

次に,いま埋めた L1002 と L1003 を消去したのち, L 列を範囲指定し,ヒストグラムを書かせてみよ。

ここで,横軸の目盛りの取り方がうまくない場合があるので,調整しよう。 ただし,以下の説明は文章では伝わりにくいかもしれないので, うまくできない人はしなくてもよい。 横軸の下の,数が書かれている部分を右クリックし, 「軸の書式設定」。「ビンの幅」の左の灰色の○をクリック。 右の,数値を入れる窓に,1 と記入。

この分布の形を頭に入れよう。 F9 を押すごとに乱数が変わるから,このヒストグラムの形も変わる。

§2.4 連続な値をとる確率関数,確率密度関数

連続な値をとる確率変数に対し,ある関数 f(x) があって, その確率変数が a 以上 b 以下の値をとる確率が ∫ab f(x) dx (関数 f(x) の a から b までの定積分)で与えられるとき, 関数 f(x) をその確率変数の確率密度関数という。

関数 f(x) は負でない値をとる関数で, ∫-∞+∞ f(x) dx = 1 を満たす。 (この左辺は,定積分 ∫-M+N f(x) dx において, M → ∞, N → ∞ としたものである。 このような積分は広義積分と呼ばれる。 第 2 クォーターの微分積分学の授業で学ぶ。)

確率密度関数 f(x) に従う確率変数の平均 m は ∫xf(x)dx で, 分散は ∫(x-m)2f(x)dx で定義されることが, 高等学校の数学 B の教科書に載っている。

§2.5 一様分布の平均と分散

確率密度関数が f(x) = 1 (0 ≤ x < 1), = 0(それ以外) で与えられる確率変数を,一様分布に従うという。 その平均は 1/2, 分散は 1/12 であることを計算で確かめよ。 (上で述べた積分を実行すればよい。)

§2.6 確率密度関数に従う乱数

ある確率密度関数 f(x) があって,ある乱数が a 以上 b 以下の値をとる確率が ∫ab f(x) dx で与えられるとき, その乱数はその確率密度関数に従うという。

上で扱った一様乱数は,f(x) = 1 (0 ≤ x < 1), = 0(それ以外),に従う乱数である。 (この関数が区間 [0, 1) で定数なので一様乱数と呼ばれる。 この関数は不連続なので高等学校までの知識では積分できないが,いまは気にしないこと。)

A1 から A1000 までを一様乱数で埋め,その平均と分散を計算させてみよ。 上に述べたものと合うだろうか?

§2.7 標準正規分布 N(0,1)

ex を exp(x) とも書く。 実数 m, 正の実数 σ に対し, f(x) = exp(-(x-m)2/(2σ2)) / √(2πσ2) を確率密度関数にもつ確率変数を,正規分布に従うという。 m が平均,σ2 が分散になる。この分布を N(m, σ2) と書く。

m や σ が違っても,横軸のスケールが変わるだけなので, N(0, 1) を考えよう。これを標準正規分布と呼ぶ。 このとき f(x) = exp(-x2/2) / √(2π) である。

A 列を,「A1 = -3, A2 = -2.875」で始まる等差数列で,A49 まで埋めよ。 A49 の値は 3 になるはずである。 Excel の関数 NORM.DIST(引数1,0,1,false) は標準正規分布である。 B1 に「=norm.dist(a1,0,1,false)」と打ち込め。 そして B1 を範囲指定し,その右下の小さな正方形を下へ B49 までドラッグする。 それから B 列を折れ線グラフで表示してみよ。 これが正規分布の形である。実際には,-∞ から +∞ まで分布する。 (確かめたら全部削除して,先に進む。)

f(x) = exp(-x2/2) / √(2π) を -∞ から x まで積分すると, 実数全体の集合から [0, 1] への狭義単調増加関数が得られる。 これの逆関数が Excel の NORM.INV(引数1,0,1) である。 そこで(少しギャップがあるが)「=norm.inv(rand(),0,1)」とすると, 標準正規分布に従う乱数が得られる。

A1 から A1000 をこの乱数で埋め,ヒストグラムを表示させてみよ。

§2.8 二項分布と正規分布

A1 から A21 に 0, 1, 2, ..., 20 を入れる。 B1 に「=fact(5)/fact(a1)/fact(5-a1)*(1/3)^a1*(2/3)^(5-a1)」と入力する。 B1 を範囲指定し,右下の小さな正方形を B6 の右下までドラッグする。 これが,5Cr(1/3)r(2/3)5-r である。

C1 に =fact(10)/fact(a1)/fact(10-a1)*(1/3)^a1*(2/3)^(10-a1) と入力し, C11 まで。

D1 に =fact(20)/fact(a1)/fact(20-a1)*(1/3)^a1*(2/3)^(20-a1) と入力し, D21 まで。

B, C, D 列を範囲指定し, 「挿入」タブの中の「グラフ」「2-D 折れ線」で折れ線グラフを書かせると, 二項分布 B(5, 1/3), B(10, 1/3), B(20, 1/3) のグラフが書ける。

B(n, p) で n が大きくなると正規分布に近づくのが実感できただろうか?

§2.9 中心極限定理

中心極限定理とは, 平均 m, 分散 σ2 の確率分布があるとき, それに従う n 個の確率変数 X1, X2, ..., Xn の平均 (X1 + X2 + ... + Xn)/n は, n が大きいとき, 平均 m, 分散 σ2/n の正規分布に近づく, というものである。 (最初の確率分布は,どんなものでもよいというわけではないらしいが, 特に条件はない。)

わざと,いびつな分布をとりあげよう。 f(x) = 2x (0 ≤ x < 1), = 0(それ以外)という確率密度関数に従う乱数を考える。 それには,この関数を -∞ から x まで積分して得られる狭義単調増加関数の逆関数を考えればよいのだった。 それは √y だから,「=sqrt(rand())」と打ち込めばよいことがわかる。 この確率密度関数に従う確率変数の平均,分散を求めると 2/3, 1/18 になることを積分して確認せよ。

新規ファイル 200602.xlsx で以下の操作をせよ。

A1 に「=sqrt(rand())」と打ち込み,右下の小さな正方形を右にドラッグし, P1 までを埋めよ。 次に A1 から P1 までを範囲指定して,右下の小さな正方形を下にドラッグし, 第 1000 行までを埋めよ。

A1 から A1000 までの平均,分散を Excel に計算させ, A1002, A1003 に入力せよ。F9 キーを押すたびに乱数は変わるので,何度か押してみよ。 上で計算で求めた値と合ったらそれらは消せ。

A1 から P1 までの平均を R1 に入力せよ。 R1 を範囲指定して,右下の小さな正方形を下にドラッグし, R1000 までを埋めよ。 R1 から R1000 までの平均と分散はいくつに近くなるはずか? ここで n は 16 である。 それを R1002 と R1003 に入力せよ。確かめたらそれらは消せ。

R1 から R1000 までを,ヒストグラムで表示させよ。

保存し,提出せよ。


岩瀬順一