137

機械学習関連の技術記事を投稿します。137と言えば微細構造定数

【統計学入門(東京大学出版会)】第9章 練習問題 解答

東京大学出版会から出版されている統計学入門(基礎統計学Ⅰ)について第9章の練習問題の解答を書いていく。

本章以外の解答

本章以外の練習問題の解答は別の記事で公開している。
必要に応じて参照されたい。

9.1

 \bar{X} を標本平均とすると、その期待値  E(\bar{X}) は母集団の平均  \mu になる。 また、標本分散  s^{2} の期待値  E(s^{2}) は母集団の分散  \sigma^{2} になる。

この関係を用いることで、標本分布は母集団の分布を知るための手掛かりになると言える。

9.2

標本平均


\begin{align}
\bar{X} &= \frac{1}{n} \sum_{i=1}^{n} X_{i} \\
&= \frac{1.22+1.24+1.25+1.19+1.17+1.18}{6} \\
&\fallingdotseq 1.208333
\end{align}

標本分散


\begin{align}
s^{2} &= \frac{1}{n-1} \sum_{i=1}^{n} (X_{i} - \bar{X})^{2} \\
&= \frac{1}{6-1} \left( (1.22 - 1.21)^{2} + (1.24 - 1.21)^{2} + (1.25 - 1.21)^{2} + (1.19 - 1.21)^{2} + (1.17 - 1.21)^{2} + (1.18 - 1.21)^{2} \right) \\
&\fallingdotseq 0.0011
\end{align}

9.3

表に示されている系列に対して、 s^{2} S^{2} をそれぞれ計算するPythonプログラムを次に示す。

import numpy as np

a = np.array([
    [0.3104913, 0.3304700, 0.0324358, 0.8283330, 0.1727581, 0.6306326, 0.7210595, 0.2451280, 0.7243750, 0.8197760],
    [0.2753351, 0.4359388, 0.7160295, 0.7775517, 0.3251019, 0.1736023, 0.0921532, 0.1318467, 0.0642188, 0.8002448],
    [0.3368585, 0.2513685, 0.2697405, 0.1164189, 0.3085003, 0.2234060, 0.9427391, 0.5800890, 0.7194922, 0.8344245],
    [0.4086511, 0.8016156, 0.3221239, 0.8498936, 0.4362011, 0.8559286, 0.9982964, 0.5540422, 0.3757575, 0.1312537],
    [0.4449823, 0.1457471, 0.9303545, 0.1033269, 0.4415264, 0.5430776, 0.8274743, 0.3946336, 0.8696082, 0.6028266],
])
ave = np.mean(a, axis=1, keepdims=True)
s2 = np.sum((a - ave)**2, axis=1) / 9
S2 = np.sum((a - ave)**2, axis=1) / 10

print("sigma^2: {}".format(1.0 / 12))
print(f"s^2: {s2}")
print(f"S^2: {S2}")

プログラムを実行すると、次の結果が得られる。

sigma^2: 0.08333333333333333
s^2: [0.08647192 0.08349042 0.08298067 0.08143628 0.08140686]
S^2: [0.07782473 0.07514138 0.0746826  0.07329265 0.07326618]

いずれの系列についても、 s^{2} のほうが  \sigma^{2} に近い値であることがわかる。

9.4


E(X_{i}^{2}) = V(X_{i}) + E(X_{i})^{2} = \sigma^{2} + \mu^{2} \\
\displaystyle E(\bar{X}^{2}) = V(\bar{X}) + E(\bar{X})^{2} = \frac{\sigma^{2}}{n} + \mu^{2} \\
\displaystyle \sum_{i=1}^{n} E(X_{i} \bar{X}) = E \left( \sum_{i=1}^{n} X_{i} \bar{X} \right) = E \left( n \bar{X} \sum_{i=1}^{n} \frac{X_{i}}{n} \right) = nE(\bar{X}^{2}) = n\mu^{2} + \sigma^{2}

を利用すると、


\begin{align}
E(s^{2}) &= \frac{1}{n-1} \sum_{i=1}^{n} E(X_{i} - \bar{X})^{2} \\
&= \frac{1}{n-1} \sum_{i=1}^{n} \left( E(X_{i}^{2}) - 2E(X_{i}\bar{X}) + E(\bar{X}^{2}) \right) \\
&= \frac{1}{n-1} \left( \sum_{i=1}^{n} \left( \sigma^{2} + \mu^{2} + \frac{\sigma^{2}}{n} + \mu^{2} \right) - 2 (n\mu^{2} + \sigma^{2}) \right) \\
&= \sigma^{2}
\end{align}

となる。

9.5

 n=3 のとき

A地点より信号を  n 回送信し、B地点で正しく受信する回数はそれぞれ次の確率で発生しうる。

正しく受信する回数 確率
0  1 \cdot (0.1)^{3}
1  {}_{3}C_{1} \cdot 0.9 \cdot (0.1)^{2}
2  {}_{3}C_{2} \cdot (0.9)^{2} \cdot 0.1
3  1 \cdot (0.9)^{3}

このうち、2回以上正しく受信できれば信号は正しく伝達されたと判断できるから、


\begin{align}
{}_{3}C_{1} \cdot (0.9)^{2} \cdot 0.1 + 1 \cdot (0.9)^{3} = 0.972
\end{align}

となる。

 n=5 のとき

同様にして、

正しく受信する回数 確率
0  1 \cdot (0.1)^{5}
1  {}_{5}C_{1} \cdot 0.9 \cdot (0.1)^{4}
2  {}_{5}C_{2} \cdot (0.9)^{2} \cdot (0.1)^{3}
3  {}_{5}C_{3} \cdot (0.9)^{3} \cdot (0.1)^{2}
4  {}_{5}C_{4} \cdot (0.9)^{4} \cdot 0.1
5  1 \cdot (0.9)^{5}

このうち、3回以上正しく受信できれば信号は正しく伝達されたと判断できるから、


\begin{align}
{}_{5}C_{3} \cdot (0.9)^{3} \cdot (0.1)^{2} + {}_{5}C_{4} \cdot (0.9)^{4} \cdot 0.1 + 1 \cdot (0.9)^{5} = 0.99144
\end{align}

となる。

9.6

1時間あたりの来客数を確率変数  X_{i} とすると、午前3時間の来客数は  X = X_{1} + X_{2} + X_{3} で表せる。 各確率変数  X_{i} の確率分布が母集団  P_{o} (\lambda) に従うとき、 X = X_{1} + X_{2} + X_{3} の確率分布は  P_{o} (n \lambda) = P_{o} (3 \lambda) に従う。  \lambda = 1.5 であるから確率分布は、


\begin{align}
f_{4.5} (x) = e^{-4.5} \cdot \frac{(4.5)^{x}}{x!}
\end{align}

であるから、午前3時間の来客数が5人以上である確率は、


\begin{align}
1 - \sum_{x=0}^{4} f_{4.5} (x) = 0.468
\end{align}

と求まる。 参考のため、この計算を行うPythonプログラムを次に示す。

from math import exp, pow, factorial

sum_ = 0.0
lambda_ = 4.5
for x in range(0, 5):
    sum_ += exp(-lambda_) * pow(lambda_, x) / factorial(x)

print(1 - sum_)

上記のプログラムを実行すると、次の結果が得られる。

0.4678964236252845

9.7

i)

交通事故のような稀に起こる事象に関しては、ポアソン分布が利用できる。 表では1年あたりの交通事故死亡者数が記載されているから、 \lambda を1年間あたりの交通事故死亡者数として確率分布が次のようになる。


\begin{align}
f_{\lambda} (x) = e^{-\lambda} \frac{\lambda^{x}}{x!}
\end{align}

したがって1年間あたりの交通事故死亡者数が10人未満である確率は、次の式から得られる。


\begin{align}
\sum_{x=0}^{9} f_{\lambda} (x) = \sum_{x=0}^{9} e^{-\lambda} \frac{\lambda^{x}}{x!}
\end{align}

この式を利用して各都道府県における1年間の交通事故死亡者数が10人未満である確率を求めるプログラムは、次のようになる。

from math import exp, pow, factorial

prefs = {
    "Hokkaido": 9.7,
    "Tokyo": 4.0,
    "Osaka": 5.7,
    "Fukuoka": 7.8,
}

for pref, lambda_ in prefs.items():
    sum_ = 0.0
    for x in range(0, 10):
        sum_ += exp(-lambda_) * pow(lambda_, x) / factorial(x)

    print(f"{pref}: {sum_}")

上記のプログラムを実行すると、次の結果が得られる。

Hokkaido: 0.49597884175020945
Tokyo: 0.991867757203066
Osaka: 0.9351825280291335
Fukuoka: 0.7411089165697634

ii)

1日の交通事故死傷者数は、1年の交通事故死傷者数を365で割ったものと考えてよい。 したがって1日あたりの死者数が5人未満である確率は、1年の交通事故死傷者数を  \lambda として次の式から得られる。


\begin{align}
\sum_{x=0}^{5} f_{\lambda / 365} (x) = \sum_{x=0}^{5} \exp \left( \frac{-\lambda}{365} \right) \frac{(\lambda / 365)^{x}}{x!}
\end{align}

この式を利用して各都道府県における1年間の交通事故死傷者数が5人未満である確率を求めるプログラムは、次のようになる。

from math import exp, pow, factorial

prefs = {
    "Hokkaido": 526.6,
    "Tokyo": 508.7,
    "Osaka": 703.8,
    "Fukuoka": 867.2,
}

for pref, lambda_ in prefs.items():
    sum_ = 0.0
    for x in range(0, 5):
        sum_ += exp(-lambda_/365) * pow(lambda_/365, x) / factorial(x)

    print(f"{pref}: {sum_}")

上記のプログラムを実行すると、次の結果が得られる。

Hokkaido: 0.9839920186786263
Tokyo: 0.9859939779933685
Osaka: 0.9535909639906193
Fukuoka: 0.9071305858827781

9.8

i)

各データを  X_{i} とすると、母集団の平均は次の式で与えられる。


\begin{align}
X = \sum_{n=1}^{5} \frac{X_{n}}{5}
\end{align}

母集団の平均を求めるPythonプログラムを次に示す。

import numpy as np

a = np.array([171.0, 167.3, 170.6, 178.7, 162.3])

print(np.mean(a))

上記のプログラムを実行すると、次の結果が得られる。

169.97999999999996

ii)

3人の標本  X_{1}, X_{2}, X_{3} を得たとして、標本平均  \bar{X} と標本分散  s^{2} は次の式で与えられる。


\displaystyle \bar{X} = \sum_{n=1}^{3} \frac{X_{n}}{3} \\
\displaystyle s^{2} = \frac{1}{3-1} \sum_{n=1}^{3} (X_{n} - \bar{X})^{2}

母集団から3人の標本を抽出する組み合わせと、その時の標本平均と標本分散を求めるPythonプログラムを次に示す。

import numpy as np
import itertools

a = [171.0, 167.3, 170.6, 178.7, 162.3]

for c in itertools.combinations(a, 3):
    ca = np.array(c)
    X = ca.mean()
    s2 = np.sum((ca - X)**2) / (ca.size - 1)
    print(f"{c}: X={X}, s^2={s2}")

上記のプログラムを実行すると、次の結果が得られる。

(171.0, 167.3, 170.6): X=169.63333333333333, s^2=4.123333333333301
(171.0, 167.3, 178.7): X=172.33333333333334, s^2=33.8233333333332
(171.0, 167.3, 162.3): X=166.86666666666667, s^2=19.06333333333329
(171.0, 170.6, 178.7): X=173.4333333333333, s^2=20.84333333333329
(171.0, 170.6, 162.3): X=167.96666666666667, s^2=24.123333333333253
(171.0, 178.7, 162.3): X=170.66666666666666, s^2=67.32333333333315
(167.3, 170.6, 178.7): X=172.19999999999996, s^2=34.40999999999988
(167.3, 170.6, 162.3): X=166.73333333333332, s^2=17.463333333333267
(167.3, 178.7, 162.3): X=169.43333333333334, s^2=70.65333333333312
(170.6, 178.7, 162.3): X=170.53333333333333, s^2=67.24333333333314

iii)

ii)の結果を用いる。 ある組み合わせにおける標本平均を  \bar{X}_{i} とすると、標本平均の期待値  E(\bar{X}) と分散  V(\bar{X}) はそれぞれ、


\begin{align}
E(\bar{X}) = \sum_{i=1}^{n} \frac{\bar{X}_{i}}{n}
\end{align}

\begin{align}
V(\bar{X}) &= \sum_{i=1}^{n} \left( \bar{X}_{i} - E(\bar{X}) \right)^{2} \\
&= E(\bar{X}^{2}) - E(\bar{X})^{2} \\
&= \sum_{i=1}^{n} \frac{\bar{X}_{i}^{2}}{n} - \left( \sum_{i=1}^{n} \frac{\bar{X}_{i}}{n} \right)^{2}
\end{align}

となる。これらの式を用いて標本平均の期待値と分散を求めるPythonプログラムを次に示す。

import numpy as np
import itertools

a = [171.0, 167.3, 170.6, 178.7, 162.3]

Xi = []
for c in itertools.combinations(a, 3):
    ca = np.array(c)
    X = ca.mean()
    s2 = np.sum((ca - X)**2) / (ca.size - 1)
    
    Xi.append(X)

Xi_arr = np.array(Xi)
EX = np.sum(Xi_arr) / Xi_arr.size
VX = np.sum(np.mean(Xi_arr**2) - np.mean(EX)**2)
print(f"EX: {EX}, VX: {VX}")

上記のプログラムを実行した結果を次に示す。

EX: 169.98, VX: 4.7876000000032946

ここで母平均はi)より  169.97999999999996 \fallingdotseq 169.98 となるから、標本平均の期待値は母平均に等しいことが示された。

一方、次の関係式、


\begin{align}
V(\bar{X}) = \frac{N-n}{N-1} \cdot \frac{\sigma^{2}}{n}
\end{align}

を求めるPythonプログラムを次に示す。

import numpy as np

a = np.array([171.0, 167.3, 170.6, 178.7, 162.3])
sigma2 = np.sum(np.mean(a**2) - np.mean(a)**2)

N = a.size
n = 3
VX = (N - n) * sigma2 / ((N - 1) * n)
print(VX)

上記のプログラムを実行すると、次の結果が得られる。

4.787600000002082

これは標本平均の分散と等しい。

9.9

Pythonrandom.random を利用して[0, 1]の正規分布を作って、これに2500をかけることで乱数表の場所を決めてそこから4桁の数値を取得する。 重複が生じた場合は再度同様の処理を行う。 4桁の数値が1000を超える場合(★)についても再度同様の処理を行う。

5000人の場合も同様の手続きで行えるが、上記の★に相当する可能性が少なくなるのでより容易に乱数を取得できる。