LoginSignup
1
2

More than 1 year has passed since last update.

(随時更新)母平均・母分散の推定・検定をpythonで行う

Last updated at Posted at 2021-05-17

母分散既知:正規分布に従う統計量を使用した母平均の検定

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...
$$

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2