#はじめに
統計学入門第11章は推定がテーマになっている章です。このうち練習問題11.4と11.7をPythonで解いてみました。環境はAnacondaを使用している。
#解く
##11.4
問題
11.4
母分散$\sigma^2=9$の正規母集団から大きさ$n$の標本を抽出して、母平均$\mu$の信頼係数$99%$の信頼区間を求めたい.その幅を$1$以下にするには,$n$をいくつ以上にすべきか.
母分散$\sigma^2$が既知のとき、母平均$\mu$の信頼係数$1-a$(信頼区間の%を0<1-a<1の割合で表したもの)の信頼区間は$[\overline{X}-Z_{\alpha/2}・\sigma/\sqrt{n},~~~~\overline{X}+Z_{\alpha/2}・\sigma/\sqrt{n}]$と表される。
標準正規分布におけるメジアンからの上側の)ここでの問題は、上側と下側の差が1以下となるnを求めたいので$(\overline{X}+Z_{\alpha/2}・\sigma/\sqrt{n})-(\overline{X}-Z_{\alpha/2}・\sigma/\sqrt{n})\leq1$を求める
Sympyに上の式を解かせて答えを求める。
import sympy as sym
import scipy.stats as stats
n = sym.Symbol('n')
bottom, up = stats.norm.interval(alpha=0.99) #メジアンを中心に値の99%が含まれる範囲の限界を求める。
sigma = 3 #標準偏差
F = 2*up*(sigma/sym.sqrt(n)) - 1 <= 0 #上の式
print(sym.solve(F, n))
(238.856277636764 <= n) & (n < oo)
$n$は標本数だから整数であるべきで答えは239以上となります
##11.7
問題
11.7
東京の1988年8月1日から10日までの最低気温は
$21.8,~22.4,~22.7,~24.5,~25.9,~24.9,~24.9,~24.9,~24.9,~24.0~(^\circ C)$
であった.以下,正規母集団を仮定する.
i) 母平均$\mu$の信頼係数$99%$の信頼区間を求めよ.
ii) 母分散$\sigma^2$の信頼係数$95%$の信頼区間を求めよ.
iii)さらに,大阪の同期の最低気温は
$22.1,~25.3,~23.3,~25.2,~25.3,~24.9,~24.9,~24.9,~24.9,~24.9,~24.0~(^\circ C)$
であった.東京(1)と大阪(2)の最低気温差$\mu\equiv\mu_1-\mu_2$の$95%$信頼区間を作れ.なお,二つの母分散は等しいと仮定せよ.
i) 母平均$\mu$の信頼係数$99%$の信頼区間を求めよ.
母分散$\sigma^2$が未知のとき母平均$\mu$の信頼係数$1-\alpha$の信頼区間は$[\overline{X}-t_{\alpha/2}(n-1)・s/\sqrt{n},~~~~\overline{X}+t_{\alpha/2}(n-1)・s/\sqrt{n}]$
と表される。よって上の区間に標本から求められる値を代入すれば良い。
import numpy as np
import scipy.stats as stats
import sympy as sym
min_tokyo = np.array([21.8, 22.4, 22.7, 24.5, 25.9,
24.9, 24.8, 25.3, 25.2, 24.6])
n = len(min_tokyo) # 標本数
tokyo_std = np.std(min_tokyo, ddof=1) # 不偏分散からの標準偏差
tokyo_var = np.var(min_tokyo, ddof=1) # 不偏分散
tokyo_mean = min_tokyo.mean() # 東京の平均
# i)
bottom1, up1 = stats.t.interval(
df=n - 1, alpha=0.99, loc=tokyo_mean, scale=tokyo_std/np.sqrt(n))
# df→自由度(n-1) alpha→99%→0.99 loc→平均 scale→出てくる値にかける値
print(bottom1, up1)
結果
22.779046896409294 25.640953103590707
ii) 母分散$\sigma^2$の信頼係数$95%$の信頼区間を求めよ.
母分散$\sigma^2$の信頼係数$1-\alpha$の信頼区間は
$[(n-1)s^2/\chi^2_{\alpha/2}(n-1),~~~~(n-1)s^2/\chi^2_{1-\alpha/2}(n-1)]$
と表される。よって上の区間に標本から求められる値を代入すれば良い。
# ii)
bottom2, up2 = stats.chi2.interval(alpha=0.95, df=n-1) #df→自由度(n-1) alpha→95%区間
print((n-1)*tokyo_var / up2, (n-1)*tokyo_var / bottom2) #区間の式通りに計算
結果
0.9172692525451521 6.461660438291186
iii)さらに,大阪の同期の最低気温は
$22.1,~25.3,~23.3,~25.2,~25.3,~24.9,~24.9,~24.9,~24.9,~24.9,~24.0~(^\circ C)$
であった.東京(1)と大阪(2)の最低気温差$\mu\equiv\mu_1-\mu_2$の$95%$信頼区間を作れ.なお,二つの母分散は等しいと仮定せよ.
まず、東京と大阪の最低気温の差をとって1標本として推定する。i)と同様に解けばよい。$[\overline{X}-t_{\alpha/2}(n-1)・s/\sqrt{n},~~~~\overline{X}+t_{\alpha/2}(n-1)・s/\sqrt{n}]$
であるから、
# iii)
min_osaka = np.array([22.1, 25.3, 23.3, 25.2, 25.3,
24.9, 24.9, 24.9, 24.9, 24.0])
# 差をとって計算するバージョン
min_sa = min_tokyo - min_osaka # 東京と大阪の差の標本
sa_mean = min_sa.mean() # 差の平均
sa_std = min_sa.std() # 差の標準偏差
bottom3, up3 = stats.t.interval(
df=n-1, alpha=0.95, loc=sa_mean, scale=sa_std/np.sqrt(n))
print(bottom3, up3)
結果
-0.9709402658776036 0.4309402658776038
次に、母分散が等しい2標本として推定する。信頼係数$1-\alpha$の信頼区間は
$[\overline{X}-\overline{Y}-t_{a/2}(m+n-2)s\sqrt{1/m+1/n},\overline{X}-\overline{Y}+t_{a/2}(m+n-2)s\sqrt{1/m+1/n}]$
と表される。(m:xの標本数,n:yの標本数)この区間の式に代入すれば良い。
# 2標本で解くバージョン
osaka_mean = min_osaka.mean() #大阪の平均最低気温
var_sum_t = sum((min_tokyo - tokyo_mean) ** 2) #東京の(標本−標本平均)^2の和
var_sum_o = sum((min_osaka - osaka_mean) ** 2) #大阪の(標本−標本平均)^2の和
two_var = (var_sum_t + var_sum_o) / (2*n-2) #東京と大阪の合併した分散
two_std = np.sqrt(two_var) #上の文さんから求めた標準偏差
bottom4, up4 = stats.t.interval(
df=2*n-2, alpha=0.95, loc=tokyo_mean-osaka_mean, scale=two_std*np.sqrt(2/n))
print(bottom4, up4)
結果
-1.427203591568164 0.8872035915681649
1標本問題として推定したほうが、2標本として推定するよりも区間が小さくなる。
#おわりに
いろいろと説明不足感が否めないが、検索力を高めよう。