【Scipy】母平均の区間推定(母分散が既知)

この記事では、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なので確かに収まりました。

おすすめ記事

Python入門 サンプル集
NumPy入門 サンプル集

コメント