この記事では、Python言語とScipyを用いて、母平均を区間推定(t分布)で求める方法をソースコード付きで解説します。
母平均の区間推定(t分布)
区間推定とは、母集団の特性値(母平均・母分散など)が存在する範囲(区間)を推定することです。 数値計算モジュールScipyの「scipy.stats.t.ppf」を使えば母分散が既知な場合の母平均の信頼区間を計算できます。 今回はそれを試してみました。
処理手順
プログラムの処理手順は下記の通りです。 ①数値計算モジュール「NumPy」をインポートする。 ②正規分布に従う母集団の平均を10, 標準偏差を1に設定する。 ③信頼区間の信頼係数を95[%]に設定する。 ④正規分布(10, 1)に従う正規分布からサイズ10の標本を抽出する。(np.random.normal) ⑤標本のサイズnを取得する。 ⑥t分布を用いて確率変数tを計算する。(区間推定:stats.t.ppf) ⑦確率変数t、既知の母分散sigma^2、標本のサイズnから95%信頼区間を計算する。 ⑧結果を表示する。
ソースコード
サンプルプログラムのソースコードです。
# -*- coding: utf-8 -*-
import numpy as np
from scipy import stats
def main():
(mu, std) = (10, 1) # 正規分布に従う母集団の平均10, 母分散1
sigma = np.sqrt(std) # 母集団の標準偏差
alpha = 0.95 # 信頼係数95[%]
ok = 0
x = np.random.normal(mu, sigma, 50) # 正規分布(mu, sigma)に従う正規分布からサイズ50の標本抽出
n = len(x) # 標本サイズnの取得
t = stats.t.ppf(1-(1-alpha)/2, n-1) # t分布を用いて確率変数tを計算
xa, sigma = np.average(x), np.std(x) # 標本の平均と分散を計算
t_min = xa - t * sigma / np.sqrt(n-1)
t_max = xa + t * sigma / np.sqrt(n-1)
print("信頼区間の下限:", t_min) # 9.53954697142
print("信頼区間の上限:", t_max) # 10.1222771569
if __name__ == '__main__':
main()
95%の確率で、母平均が9.53334278382~10.1336948921の間に収まることを意味します。 母平均の真値は10なので確かに収まりました。


コメント