137

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

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

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

本章以外の解答

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

11.1

指数分布  E_{x} (\lambda) は次のように与えられる。


\begin{align}
E_{x} (\lambda) = \lambda e^{-\lambda x}
\end{align}

ここから得られる大きさ  n の標本  L (\lambda) は、


\begin{align}
L (\lambda) &= \prod_{i=1}^{n} E\_{xi} (\lambda) \\
&= \prod_{i=1}^{n} \lambda e^{-\lambda x_{i}}
\end{align}

であるから、 \lambda最尤推定量は、


\begin{align}
\frac{d}{d\lambda} \log L(\lambda) &= \frac{d}{d\lambda} \left( n \log \lambda - \lambda \sum_{i}^{n} x_{i} \right) \\
&= \frac{n}{\lambda} - \sum_{i}^{n} x_{i} \\
&= \frac{n}{\lambda} - n \cdot \bar{X} \\
&= 0
\end{align}

より、


\begin{align}
\lambda = \frac{1}{\bar{X}}
\end{align}

と求まる。

11.2

 X_{1}, X_{2} の線型推定量であるから、求める推定量 Y = aX_{1} + bX_{2} である。 またこれは不偏性を満たすことを利用すると、求める推定量 \hat{\mu} = aX_{1} + bX_{2} となるように  a, b の値を決められる。 したがって、


\begin{align}
E(\hat{\mu}) &= E(aX_{1} + bX_{2}) \\
&= aE(X_{1}) + bE(X_{2}) \\
&= a\mu + b\mu \\
&= \mu
\end{align}

より、 a + b = 1 の条件を得る。

また正規母集団の分散を  \sigma^{2} とすると、 \hat{\mu} の分散は、


\begin{align}
V(aX_{1} + bX_{2}) &= a^{2}V(X_{1}) + b^{2}V(X_{2}) \\
&= a^{2} \sigma^{2} + b^{2} \sigma^{2} \\
&= (2a^{2} - 2a + 1) \sigma^{2}
\end{align}

となるから、この分散を最小とする  a は、


\begin{align}
\frac{dV}{da} &= (4a - 2) \sigma^{2} \\
&= 0
\end{align}

より、


\begin{align}
a = \frac{1}{2}, b = \frac{1}{2}
\end{align}

であるから、分散の最小の推定量 \frac{1}{2} \sigma^{2} となる。

11.3

標本平均  \bar{X} は、


\begin{align}
\bar{X} &= \frac{9.75 + 7.95 + 12.8 + 8.25 + 9.86}{5} \\
&= 9.722
\end{align}

である。

標準化


\begin{align}
z = \frac{\bar{X} - \mu}{\sqrt{\sigma^{2} / n}}
\end{align}

を行うと、その信頼係数95%の信頼区間は、


\begin{align}
P \left( - z_{0.025} \le z \le z_{0.025} \right) &= P \left( - z_{0.025} \le \frac{\bar{X} - \mu}{\sigma^{2} / n} \le z_{0.025} \right) \\
&= P \left( - z_{0.025} \le \frac{\bar{X} - \mu}{4 / 5} \le z_{0.025} \right) \\
&= P \left( -\sqrt{\frac{4}{5}} z_{0.025} + 9.722 \le \mu \le \sqrt{\frac{4}{5}} z_{0.025} + 9.722 \right)
\end{align}

と表せる。 これを次のPythonプログラムを用いて求める。

from scipy.stats import norm
from math import sqrt

x1 = -sqrt(4/5) * norm.ppf(q=1-0.025, loc=0, scale=1) + 9.722
x2 = sqrt(4/5) * norm.ppf(q=1-0.025, loc=0, scale=1) + 9.722

print(f"{x1} <= u <= {x2}")

プログラムを実行すると、母平均  \mu の95%信頼区間

7.968954918846837 <= u <= 11.475045081153162

が得られる。

11.4

標本平均を  \bar{X} とする。


\begin{align}
z = \frac{\bar{X} - \mu}{\sqrt{\sigma^{2} / n}}
\end{align}

を行うと、その信頼係数99%の信頼区間は、


\begin{align}
P \left( - z_{0.005} \le z \le z_{0.005} \right) &= P \left( - z_{0.005} \le \frac{\bar{X} - \mu}{\sigma^{2} / n} \le z_{0.005} \right) \\
&= P \left( -\sqrt{\frac{\sigma^{2}}{n}} z_{0.005} + \bar{X} \le \mu \le \sqrt{\frac{\sigma^{2}}{n}} z_{0.005} + \bar{X} \right)
\end{align}

で表され、その幅が1以下であるという条件より、


\begin{align}
\left( \sqrt{\frac{\sigma^{2}}{n}} z_{0.005} + \bar{X} \right) - \left( -\sqrt{\frac{\sigma^{2}}{n}} z_{0.005} + \bar{X} \right) &= 2 \sqrt{\frac{\sigma^{2}}{n}} z_{0.005} \\
&\le 1
\end{align}

が得られ、 n の条件は、


\begin{align}
n &\ge \left( 2 \sigma z_{0.005} \right)^{2} \\
&= 36 z_{0.005}^{2}
\end{align}

で表される。 ここから、Pythonプログラム

from scipy.stats import norm

x = 36 * norm.ppf(q=1-0.005, loc=0, scale=1)**2

print(f"n >= {x}")

によって、

n >= 238.85627763676368

が得られるため、 n は 239以上となる必要がある。

11.5

投薬群の標本平均を  \bar{X_{1}}、標本分散を  s_{1}^{2}、母平均を  \mu_{1}、標本数を  m とする。
また、対照群の標本平均を  \bar{X_{2}}、標本分散を  s_{2}^{2}、母平均を  \mu_{2}、標本数を  n とする。

母分散が等しいと考えられるため、


\begin{align}
t = \frac{(\bar{X_{1}} - \bar{X_{2}}) - (\mu_{1} - \mu_{2})}{s \sqrt{\frac{1}{m} + \frac{1}{n}}}
\end{align}

は自由度  m + n - 2 のスチューデントのt分布に従う。

これを用いると  \mu_{1} - \mu_{2} の95%信頼区間は、


\begin{align}
P \left( -t_{0.025} \le \frac{(\bar{X_{1}} - \bar{X_{2}}) - (\mu_{1} - \mu_{2})}{s \sqrt{\frac{1}{m} + \frac{1}{n}}} \le t_{0.025} \right) &= P \left( -t_{0.025} s \sqrt{\frac{1}{m} + \frac{1}{n}} + (\bar{X} + \bar{Y}) \le \mu_{1} - \mu_{2} \le t_{0.025} s \sqrt{\frac{1}{m} + \frac{1}{n}} + (\bar{X} + \bar{Y}) \right)
\end{align}

となる。

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

import numpy as np
from scipy.stats import t
from math import sqrt

x1 = np.array([7.97, 7.66, 7.59, 8.44, 8.05, 8.08, 8.35, 7.77, 7.98, 8.15])
x2 = np.array([8.06, 8.27, 8.45, 8.05, 8.51, 8.14, 8.09, 8.15, 8.16, 8.42])
x1_bar = x1.mean()
x2_bar = x2.mean()
m = x1.size
n = x2.size
s = sqrt((np.sum((x1 - x1_bar)**2) + np.sum((x2 - x2_bar)**2)) / (m + n - 2))
t_val = t.ppf(q=1-0.025, df=m+n-2)

print("{} <= u1 - u2 <= {}".format(
    -t_val * s * sqrt(1/m + 1/n) + (x1_bar - x2_bar),
    t_val * s * sqrt(1/m + 1/n) + (x1_bar - x2_bar)
))

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

-0.44185376487974576 <= u1 - u2 <= -0.010146235120252423

11.6

母分散が等しくないと考えられるため、ウェルチの近似法を利用する。

標準法の標本平均を  \bar{X_{1}}、標本分散を  s_{1}^{2}、母平均を  \mu_{1}、標本数を  m とする。
また、簡便法の標本平均を  \bar{X_{2}}、標本分散を  s_{2}^{2}、母平均を  \mu_{2}、標本数を  n とする。

このとき、自由度が


\begin{align}
\nu = \frac{ \left( \frac{s_{1}^{2}}{m} + \frac{s_{2}^{2}}{n} \right)^{2} }{ \frac{ \left( s_{1}^{2} / m \right)^{2} }{m - 1} + \frac{ \left( s_{2}^{2} / n \right)^{2} }{n - 1} }
\end{align}

に最も近い整数としたときに、


\begin{align}
t = \frac{(\bar{X_{1}} - \bar{X_{2}}) - (\mu_{1} - \mu_{2})}{\sqrt{\frac{s_{1}^{2}}{m} + \frac{s_{2}^{2}}{n}}}
\end{align}

で表されるスチューデントのt分布に従う。

これを用いると  \mu_{1} - \mu_{2} の95%信頼区間は、


\begin{align}
P \left( -t_{0.025} \le \frac{(\bar{X_{1}} - \bar{X_{2}}) - (\mu_{1} - \mu_{2})}{\sqrt{\frac{s_{1}^{2}}{m} + \frac{s_{2}^{2}}{n}}} \le t_{0.025} \right) &= P \left( -t_{0.025} \sqrt{\frac{s_{1}^{2}}{m} + \frac{s_{2}^{2}}{n}} + (\bar{X} + \bar{Y}) \le \mu_{1} - \mu_{2} \le t_{0.025} \sqrt{\frac{s_{1}^{2}}{m} + \frac{s_{2}^{2}}{n}} + (\bar{X} + \bar{Y}) \right)
\end{align}

となる。

これをPythonプログラム

import numpy as np
from scipy.stats import t
from math import sqrt
from decimal import Decimal, ROUND_HALF_UP

x1 = np.array([25, 24, 25, 26])
x2 = np.array([23, 18, 22, 28, 17, 25, 19, 16])
x1_bar = x1.mean()
x2_bar = x2.mean()
m = x1.size
n = x2.size
s21 = np.sum((x1 - x1_bar)**2) / (m - 1)
s22 = np.sum((x2 - x2_bar)**2) / (n - 1)
s = sqrt((np.sum((x1 - x1_bar)**2) + np.sum((x2 - x2_bar)**2)) / (m + n - 2))
nu = (s21/m + s22/n)**2 / ((s21/m)**2/(m-1) + (s22/n)**2/(n-1))
nu = int(Decimal(str(nu)).quantize(Decimal('0'), rounding=ROUND_HALF_UP))
t_val = t.ppf(q=1-0.025, df=nu)

print(f"nu: {nu}")
print("{} <= u1 - u2 <= {}".format(
    -t_val * sqrt(s21/m + s22/n) + (x1_bar - x2_bar),
    t_val * sqrt(s21/m + s22/n) + (x1_bar - x2_bar)
))

によって求めると、

nu: 8
0.4417583693791478 <= u1 - u2 <= 7.558241630620852

が得られる。

11.7

i)

標本平均を  \bar{X}、標本分散を  s^{2}、母平均を  \mu、標本数を  n としたとき、


\begin{align}
t = \frac{\bar{X} - \mu}{\sqrt{s^{2}/n}}
\end{align}

が自由度  n - 1 のスチューデントのt分布に従う。

ここから母平均  \mu の99%信頼区間は、


\begin{align}
&P \left( -t_{0.025} \le \frac{\bar{X} - \mu}{\sqrt{s^{2}/n}} \le t_{0.025} \right) \\
&= P \left( -t_{0.025} \sqrt{\frac{s^{2}}{n}} + \bar{X} \le \mu \le t_{0.025} \sqrt{\frac{s^{2}}{n}} + \bar{X} \right)
\end{align}

を求めればよい。

これを求めるPythonプログラムは次のようになる。

import numpy as np
from scipy.stats import t
from math import sqrt

x = np.array([21.8, 22.4, 22.7, 24.5, 25.9, 24.9, 24.8, 25.3, 25.2, 24.6])
x_bar = x.mean()
n = x.size
s2 = np.sum((x - x_bar)**2)/(n-1)
t_val = t.ppf(q=1 - 0.005, df=n-1)

print("{} <= u <= {}".format(
    -sqrt(s2/n) * t_val + x_bar,
    sqrt(s2/n) * t_val + x_bar
))

上記のプログラムを実行すると、

22.779046896409294 <= u <= 25.640953103590707

が得られる。

ii)

母分散を  \sigma^{2}、標本分散を  s^{2}、標本数を  n としたとき、


\begin{align}
\chi^{2} = \frac{(n-1)s^{2}}{\sigma^{2}}
\end{align}

が自由度  n - 1 \chi^{2} 分布に従う。

ここから、母分散  \sigma^{2} の95%信頼区間は、


\begin{align}
&P \left( \chi_{0.975}^{2} \le \frac{(n-1)s^{2}}{\sigma^{2}} \le \chi_{0.025}^{2} \right) \\
&= P \left( \frac{s^{2}(n-1)}{\chi_{0.025}^{2}} \le \sigma^{2} \le \frac{s^{2}(n-1)}{\chi_{0.975}^{2}} \right)
\end{align}

を求めればよい。

これを求めるPythonプログラムは次のようになる。

import numpy as np
from scipy.stats import chi2

x = np.array([21.8, 22.4, 22.7, 24.5, 25.9, 24.9, 24.8, 25.3, 25.2, 24.6])
x_bar = x.mean()
n = x.size
s2 = np.sum((x - x_bar)**2)/(n-1)
chi2_val_1 = chi2.ppf(q=1-0.025, df=n-1)
chi2_val_2 = chi2.ppf(q=1-0.975, df=n-1)

print("{} <= sigma2 <= {}".format(
    s2 * (n-1) / chi2_val_1,
    s2 * (n-1) / chi2_val_2
))

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

0.9172692525451521 <= sigma2 <= 6.461660438291186

iii)

東京の最低気温の標本平均を  \bar{X_{1}}、標本分散を  s_{1}^{2}、母平均を  \mu_{1}、標本数を  m とする。
また、大阪の最低気温の標本平均を  \bar{X_{2}}、標本分散を  s_{2}^{2}、母平均を  \mu_{2}、標本数を  n とする。

母集団が等しいと仮定すると、


\begin{align}
f = \frac{\bar{X} - \bar{Y}}{\sqrt{s_{1}^{2}/m + s_{2}^{2}/n}}
\end{align}

は自由度  m + n - 2 のスチューデントのt分布に従う。

したがって  \mu_{1} - \mu_{2} の95%信頼区間は、


\begin{align}
&P \left( -t_{0.025} \le \frac{\bar{X} - \bar{Y}}{\sqrt{s_{1}^{2}/m + s_{2}^{2}/n}} \le t_{0.025} \right) \\
&= \left( -t_{0.025} \sqrt{s_{1}^{2}/m + s_{2}^{2}/n} + (\bar{X} - \bar{Y}) \le \mu_{1} - \mu_{2} \le t_{0.025} \sqrt{s_{1}^{2}/m + s_{2}^{2}/n} + (\bar{X} - \bar{Y}) \right)
\end{align}

を求めればよい。

これを求めるPythonプログラムは次のようになる。

import numpy as np
from scipy.stats import t
from math import sqrt

x1 = np.array([21.8, 22.4, 22.7, 24.5, 25.9, 24.9, 24.8, 25.3, 25.2, 24.6])
x2 = np.array([22.1, 25.3, 23.3, 25.2, 25.3, 24.9, 24.9, 24.9, 24.9, 24.0])
x1_bar = x1.mean()
x2_bar = x2.mean()
m = x1.size
n = x2.size
s21 = np.sum((x1 - x1_bar)**2) / (m - 1)
s22 = np.sum((x2 - x2_bar)**2) / (n - 1)
t_val = t.ppf(q=1-0.025, df=m+n-2)

print("{} <= u1 - u2 <= {}".format(
    -t_val * sqrt(s21/m + s22/n) + (x1_bar - x2_bar),
    t_val * sqrt(s21/m + s22/n) + (x1_bar - x2_bar)
))

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

-1.4272035915681638 <= u1 - u2 <= 0.8872035915681646

11.8

標本数が  n = 50 であるため、中心極限定理が使える。 このとき二項母集団の標本平均は正規分布に従うから、標準化を行うことで標準正規分布に従うことがわかる。

なお、二項母集団  Bi(n, p) の平均と分散は次の式で表される。


E(x) = np \\
V(x) = np(1-p)

したがって、 p の95%信頼区間は、


\begin{align}
&P \left( -z_{0.025} \le \frac{\bar{X} - np}{\sqrt{np(1-p)}} \le z_{0.025} \right) \\
&= P \left( \bar{X} - z_{0.025} \sqrt{\frac{\bar{X} ( 1 - \bar{X} ) }{n}} \le p \le \bar{X} + z_{0.025} \sqrt{\frac{\bar{X} ( 1 - \bar{X} ) }{n}} \right)
\end{align}

を求めることができる。 ここで、 \bar{X} は標本平均、 n は標本数とした。

Pythonプログラム

from scipy.stats import norm
from math import sqrt

x_bar = 27 / 50
n = 50
z_val = norm.ppf(q=1-0.025, loc=0, scale=1)

print("{} <= p <= {}".format(
    x_bar - z_val * sqrt(x_bar * (1 - x_bar) / n),
    x_bar + z_val * sqrt(x_bar * (1 - x_bar) / n)
))

を実行することで、

0.4018538186513706 <= p <= 0.6781461813486295

を得る。

11.9

中心極限定理が使う。 このときポアソン母集団の標本平均は正規分布に従うから、標準化を行うことで標準正規分布に従うことがわかる。

ポアソン分布は再生性により、標本数  n のときに  Po(n\lambda) に従う。 したがってこの平均と分散は次の式で表される。


E(x) = n\lambda \\
V(x) = n\lambda

したがって、 \lambda の99%信頼区間は、


\begin{align}
&P \left( -z_{0.005} \le \frac{\bar{X} - n\lambda}{\sqrt{n\lambda}} \le z_{0.005} \right) \\
&= P \left( \bar{X} - z_{0.005} \sqrt{\frac{\bar{X}}{n}} \le \lambda \le \bar{X} + z_{0.005} \sqrt{\frac{\bar{X}}{n}} \right)
\end{align}

を求めることができる。 ここで、 \bar{X} は標本平均、 n は標本数とした。

Pythonプログラム

import numpy as np
from scipy.stats import norm
from math import sqrt

x = np.array([4, 3, 5, 4, 8, 2, 5, 9, 3, 5])
x_bar = x.mean()
n = x.size
z_val = norm.ppf(q=1-0.005, loc=0, scale=1)
print("{} <= lambda <= {}".format(
    x_bar - z_val * sqrt(x_bar / n),
    x_bar + z_val * sqrt(x_bar / n)
))

を実行することで、

3.015413109851419 <= lambda <= 6.5845868901485805

を得る。