今回は母平均の信頼区間推定(母分散:未知バージョン)をPythonでやってみたいと思います。
前回のこちらの記事では、母分散:既知でやりましたが、今回は未知のパターンになります。
母分散:未知の場合の母平均信頼区間の復習
まずは母平均の信頼区間について復習しておきましょう。
母分散:未知という通り、母平均の信頼区間を推定するときは、その母集団の確率分布の分散が既知か未知かでやり方が異なりますね。
そもそも信頼区間推定とは
タイトルにも「母平均の信頼区間の計算」と書いていますが、考えてみるとよくわからない表現だと思います。
何のデータを元に何を推定したいのかよくわからないですよね。
ちゃんと表現しておくと、「ある母集団がありその一部の標本からその母集団の平均を推定する」ということです。
なのでこの区間推定では、「母集団からの標本」を対象にするということを理解しておく必要があります。
この記事を読めば、Pythonを使って信頼区間推定の計算はできるようになりますが、そもそもその問題背景・問題設定を理解していないと意味がありませんので注意しましょう。
あと、信頼区間では95%信頼区間などをよく使いますが、この95%信頼区間というのは平均が95%の確率でその区間に入るというわけではありません。
ベイズ信用区間などはこの考えでいいのですが、95%信頼区間といった場合には、
「母集団から標本を取り、その平均から95%信頼区間を計算する作業を100回行ったときに、95回はその区間の中に母平均が含まれるということ」です。
(統計WEB参照→https://bellcurve.jp/statistics/course/8891.html)
母平均は一つですが、標本によってはデータが変わり推定区間が変わるので、このような解釈になると思えばよいです。
Scipyによる母平均の信頼区間推定(母分散:未知)
では、実際にScipyを使って母平均の信頼区間推定を行っていきましょう。
前回は母分散:既知だったので、標準正規分布を使って区間推定を行いましたが、今回は母分散:未知です。
この場合は分散を不偏分散を用いて標準誤差: σ/√nを計算しないといけないので、このσを不偏標準偏差sに置き換えて、s/√nで計算を行います。
この分布はt分布に従うことがわかっているので、まとめると母分散:未知の場合は上記のような標準誤差を用いてt分布でいかのように区間推定できます。
[μ − t(n-1) * s/√n, μ + t(n-1) * s/√n]
ここでt(n-1)は自由度n-1のt値です。
信頼区間の%や両側・片側で値は変わってきますので、状況によって選びましょう。
例題
では、以下の例題をやってみましょう。
「ある学校の1年生200人からランダムに10人選んだときに、国語のテストの点数は、平均:68点、不偏分散:300であった。このとき、学年の国語の点数の95%信頼区間を求めよ。ただし、点数は正規分布に従うとする。」
Scipyコード
上記の問題をやってみます。
状況として、ある学校の1年生という母集団から10サンプル(標本:X1~X10まで)抽出したときに、その標本分布を用いて平均国語の点数の95%信頼区間を求めます。
今回は母集団の母分散がわかっていませんが、標本から不偏分散を計算したときに不偏分散は300だったとわかっているとします。
今は不偏分散を与えていますが、簡単に標本から計算できます。
そしてt分布を用いて次のようなコードを書けば、信頼区間を求めることができます。
1 2 3 4 5 6 7 8 9 10 |
from scipy.stats import t n = 10 df = n - 1 var = 300 se = np.sqrt(var/n) loc = 68 lower, higher = t.interval(alpha=0.95, loc = loc, scale = se, df = df) print("{:.2f} < x < {:.2f}".format(lower, higher)) |
コードの簡単な解説をしましょう。
まず、t分布を用いるのでscipy.statsからtをimportします。
標本のサンプル数は10なのでn=10、自由度はn-1=9です。
そして、t.intervalに必要な信頼区間の値や標本平均、標準誤差、自由度を入れると信頼区間の上下の値を返してくれます。
簡単ですね!
では一応、手計算でも簡単なので検算してみましょう。
今回の信頼区間は、
[μ − 2.262 * s/√n, μ + 2.262 * s/√n] = [μ − 2.262 * sqrt(300/10), μ + 2.262 * sqrt(300/10)]
となりますので、これを計算するとちゃんと正しいことがわかります。
ちなみに2.262という値は自由度9のt分布の両側2.5%点のt値です。
手計算でもできますがscipyで計算できると簡単で便利ですね!