【統計学入門(東京大学出版会)】第9章 練習問題 解答
東京大学出版会から出版されている統計学入門(基礎統計学Ⅰ)について第9章の練習問題の解答を書いていく。
本章以外の解答
本章以外の練習問題の解答は別の記事で公開している。
必要に応じて参照されたい。
9.1
を標本平均とすると、その期待値 は母集団の平均 になる。 また、標本分散 の期待値 は母集団の分散 になる。
この関係を用いることで、標本分布は母集団の分布を知るための手掛かりになると言える。
9.2
標本平均
標本分散
9.3
表に示されている系列に対して、 と をそれぞれ計算する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]
いずれの系列についても、 のほうが に近い値であることがわかる。
9.4
を利用すると、
となる。
9.5
のとき
A地点より信号を 回送信し、B地点で正しく受信する回数はそれぞれ次の確率で発生しうる。
正しく受信する回数 | 確率 |
---|---|
0 | |
1 | |
2 | |
3 |
このうち、2回以上正しく受信できれば信号は正しく伝達されたと判断できるから、
のとき
同様にして、
正しく受信する回数 | 確率 |
---|---|
0 | |
1 | |
2 | |
3 | |
4 | |
5 |
このうち、3回以上正しく受信できれば信号は正しく伝達されたと判断できるから、
となる。
9.6
1時間あたりの来客数を確率変数 とすると、午前3時間の来客数は で表せる。 各確率変数 の確率分布が母集団 に従うとき、 の確率分布は に従う。 であるから確率分布は、
であるから、午前3時間の来客数が5人以上である確率は、
と求まる。 参考のため、この計算を行う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年あたりの交通事故死亡者数が記載されているから、 を1年間あたりの交通事故死亡者数として確率分布が次のようになる。
したがって1年間あたりの交通事故死亡者数が10人未満である確率は、次の式から得られる。
この式を利用して各都道府県における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年の交通事故死傷者数を として次の式から得られる。
この式を利用して各都道府県における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)
各データを とすると、母集団の平均は次の式で与えられる。
母集団の平均を求める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人の標本 を得たとして、標本平均 と標本分散 は次の式で与えられる。
母集団から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)の結果を用いる。 ある組み合わせにおける標本平均を とすると、標本平均の期待値 と分散 はそれぞれ、
となる。これらの式を用いて標本平均の期待値と分散を求める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)より となるから、標本平均の期待値は母平均に等しいことが示された。
一方、次の関係式、
を求める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
Pythonの random.random
を利用して[0, 1]の正規分布を作って、これに2500をかけることで乱数表の場所を決めてそこから4桁の数値を取得する。
重複が生じた場合は再度同様の処理を行う。
4桁の数値が1000を超える場合(★)についても再度同様の処理を行う。
5000人の場合も同様の手続きで行えるが、上記の★に相当する可能性が少なくなるのでより容易に乱数を取得できる。