母分散既知:正規分布に従う統計量を使用した母平均の検定
ex.問題引用:意味が分かる統計解析p171
作成する統計量
$$
\frac{\bar{x}-\mu}{\sqrt{\frac{\sigma^{2}}{n}}}
$$
優位水準5%
母数:μ = 150,s^2 = 2^2 # 工場なら母分散既知でもおかしくない
標本:N = 100,Xbar = 151
帰無仮説:母平均は増加していない。
対立仮説:母平均は増加した。
mu = 150
s2 = 2**2
N = 100
xbar = 151
x = (xbar - mu) / np.sqrt(s2/N) # 今回は母分散既知なので統計量が正規分布に従う
①xbarの棄却域を調べるアプローチ
mu + 1.96 * np.sqrt(s2/N) # xbarの棄却域、上側5%点
>>>150.392
xbar > 150.392 より帰無仮説は棄却され、対立仮説「母平均が増加した。」が採択される。
②統計量の棄却域を調べるアプローチ。こっちの方が式変形など不要なので、個人的には楽。
ss.norm(0,1).ppf(0.95)
1.6448536269514722
x = xbar - mu / np.sqrt(s2/N) # 今回は母分散既知なので統計量が正規分布に従う
x # 5.0、標準正規分布に従う統計量
これが1.64を超えているので、帰無仮説は棄却され、対立仮説「母平均が増加した。」が採択される。
③棄却域を調べ、統計量が生起するp値まで調べるアプローチ。こっちの方は正確にP(X>5)となる確率まで調べている。この場合棄却域を調べずに関数が出してくれるp値だけを見てもいいのだが、上側5%点を知りたいため結局棄却域を調べている。
ss.norm(0,1).ppf(0.95)
1.6448536269514722
x = xbar - mu / np.sqrt(s2/N) # 今回は母分散既知なので統計量が正規分布に従う
x # 5.0、標準正規分布に従う統計量
# P(X>5.0)(=p値)を調べる。
ss.norm(0,1).cdf(x=5.0)
0.9999997133484281 どうやらこれを1から引けばX>5.0が起こる確率が出てきそう
1 - ss.norm(0,1).cdf(x=5.0)
2.866515719235352e-07
p値が 0.05 より小さいので、帰無仮説は棄却され、対立仮説「母平均が増加した。」が採択される。
母分散未知:t分布に従う統計量を使用した母平均の検定
ex.問題引用:意味が分かる統計解析p171
優位水準5%
母数:μ = 150,
標本:N = 100,Xbar = 151,s^2 = 2^2(不変分散であることに注意)
帰無仮説:母平均は増加していない。
対立仮説:母平均は増加した。
母数、標本について前提を確認
mu = 150
s2_h = 2**2 # こっちは不偏分散
N = 10
xbar = 151
import scipy.stats as ss
②統計量の上側%点と棄却域を調べるアプローチ
# t分布の上側5%点を確認 自由度はn-1
print('t(9)分布の上側5%点', ss.t(9).ppf(0.95))
1.8331129326536335
T=>1.8331129326536335で帰無仮説が棄却される
統計量Tを調べてみる。
T = (xbar - mu) / np.sqrt(s2_h/N) # 今回は母分散未知なので統計量がt分布に従う
T
1.5811388300841895
これは棄却域に入らないため、帰無仮説は受容され、母平均は増加していないことになる。
------------追記------------
P(T>1.5811388300841895)を確認してみる。
1 - ss.t.cdf(x=1.5811388300841895,df=9)
0.07415235368327966
統計量1.5811388300841895は100回標本をとったら7回は観測されるということ
母分散未知:χ^2分布に従う統計量を使用した母分散の95%信頼区間の推定
ex.問題引用:意味が分かる統計解析p147
作る統計量は
$$
下側5%点\leq\chi^{2}=\frac{(n-1) s^{2}}{\sigma^{2}}\leq上側5%点
$$
だが、pythonは不等式を解けないので、式変形して以下の形に持っていって計算する。
$$
\frac{(n-1) s^{2}}{\chi_{0.975}^{2}(9)} \leq \sigma^{2} \leq \frac{(n-1) s^{2}}{\chi_{0.025}^{2}(9)}
$$
import scipy.stats as ss
sample = np.array([184.2,176.4,168.0,170.0,159.1,\
177.7,176.0,165.3,164.6,174.4,])
s2 = sample.var(ddof=1)
degree_of_freedom = len(sample)-1 #9
# chi^2分布の5%点を調べる
print(ss.chi2(9).ppf(0.025)) # 2.7003894999803584
print(ss.chi2(9).ppf(0.975)) # 19.02276779864163
#上側
print(((len(sample)-1)*s2)/ss.chi2(9).ppf(0.025))
print(((len(sample)-1)*s2)/ss.chi2(9).ppf(0.975))
187.6251555576279
26.634452218681822
よって信頼区間は
$$
26.6344...\leq \sigma^{2} < 187.6251...
$$