5
4

More than 3 years have passed since last update.

母比率の差の95%信頼区間をPythonで求めたいだけ

Last updated at Posted at 2020-02-03

母比率の信頼区間ではなく、母比率の差の信頼区間。

母比率の差とは

ここでは詳しい説明は省略。
下記サイトがわかりやすい。

母比率の差の信頼区間

なぜ求めたいのか

業務で「カイ二乗検定」や「母比率の差の検定」を行うことがしばしば。
有意差があるかという結論に注目するのはもちろん大事だけども、それに着目しているだけだと、効果量やバラツキ等が捉えづらい
もう少し直感的にわかるようにしよう!という流れ。

母比率の信頼区間はライブラリで求められるようだけど、母比率の差の信頼区間はどうやらないみたい(1分調べ)。
Pythonで母比率の95%信頼区間を区間推定し、妥当なサンプルサイズを決定する方法

計算式も複雑ではないので、さくっと実装する。

計算式

(\hat{p_1} - \hat{p_2}) - z_\frac{\alpha}{2} \times \sqrt{\frac{\hat{p_1}(1 - \hat{p_1})}{n_1} + \frac{\hat{p_2}(1 - \hat{p_2})}{n_2}} \leq \hat{p_1} - \hat{p_2} \leq \\ (\hat{p_1} - \hat{p_2}) + z_\frac{\alpha}{2} \times \sqrt{\frac{\hat{p_1}(1 - \hat{p_1})}{n_1} + \frac{\hat{p_2}(1 - \hat{p_2})}{n_2}}

詳しい説明は先に紹介したサイトで解説している。
左式をlower bound、右式をupper boundと言ったりする。

lower boundとupper boundが0を跨いでなければ、有意な差があるといえる。
95%信頼区間の求め方とは?有意差との関連や1.96の意味と計算式まで

ソースコード

動きゃええやん教なので、雑なのはご愛敬。

2×2のクロス集計表をcsvで食べさせるイメージ。

購入 未購入
50 100
40 120
main.py
import csv
import numpy as np

# パラメータ
z = 1.96

# テストデータ読み込み
with open('test.csv') as f:
    reader = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)
    d = [row for row in reader]

# 母比率を算出
p = [d[0][0]/sum(d[0]), d[1][0]/sum(d[1])]

# 95%信頼区間を算出
lb = (p[0]- p[1]) - z * np.sqrt(p[0] * (1 - p[0]) / sum(d[0]) + p[1] * (1 - p[1]) / sum(d[1]))
ub = (p[0]- p[1]) + z * np.sqrt(p[0] * (1 - p[0]) / sum(d[0]) + p[1] * (1 - p[1]) / sum(d[1]))

# 結果を出力
print('母比率の差の95%信頼区間: {:.3f} <= p1 - p2 <= {:.3f}'.format(lb, ub))

おわりに

ニッチだったかもしれないけど、便利なはず...。

5
4
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
5
4