いっかくのデータサイエンティストをいく

1からプログラミングとデータサイエンスを独習したい

【統計学】ベルヌーイ試行の成功確率(RとPython)

ベルヌーイ試行の成功確率についての検定を行います。ベルヌーイ試行とはコインの表と裏のように二者択一の問題です。 例を考えたほうがわかりやすいので、有斐閣統計学」P322の例題10.2をそのまま実装してみます。

例題

新たにF内閣が発足し、支持率の調査を行ったところ、A社の調査では、1000人の回答者のうち、580人が支持するとした。一方、B社の調査では、100人のうち58人が支持するとした。両調査の支持率は変わらない。前の内閣の支持率は50%であったが、現内閣の支持率は改善したであろうか。それぞれの調査会社の結果について5%の検定をしなさい。(森棟他「統計学」(有斐閣)P322 例題10.2)

考え方

もし支持率が変わっていないが調査が悪くて支持率が高く出ているなら、母平均は前回調査結果の50%であります。 よって帰無仮説は μ = 50% 対立仮説は支持率が上昇しているなので μ > 50% つまり 標準化統計量(Z値)が有意水準5%の標準正規分布の値よりも大きい場合、帰無仮説を棄却でき、 支持率は改善したといえます。

Rで実装

Z <- function(p_hat, p_0,n){
#===================
# p_hat  : 標本平均(平均成功率)
# p      : 母平均(母比率)
# p(1-p) : 母分散
# P_0(1-p_0): 帰無仮説の下での分散
# p = p_0  : 帰無仮説
# n       : 観測個数
#===================
  (p_hat-p_0)/sqrt((p_0*(1-p_0))/n)
}

#A社の調査(Z値)
A <- Z(0.58, 0.5, 1000)
A
#[1] 5.059644

#標準正規分布の右裾5%点
z_a <- qnorm(0.05, lower.tail=F)
#[1] 1.644854

#帰無仮説は棄却できるか
A > z_a
#[1] TRUE

#B社の調査(Z値)
B <- Z(0.58, 0.5, 100)
B
#[1] 1.6

#標準正規分布の右裾5%点
z_b <- qnorm(0.05, lower.tail=F)
#[1] 1.644854

#帰無仮説は棄却できるか
B > z_b
#[1] FALSE

Pythonで実装

import math
from scipy.stats import norm 

def Z (p_hat, p_0,n):
#===================
# p_hat           : 標本平均(平均成功率)
# p                  : 母平均(母比率)
# p(1-p)             : 母分散
# P_0(1-p_0)      : 帰無仮説の下での分散
# p = p_0          : 帰無仮説
# n                    : 観測個数
#===================
    z = (p_hat-p_0)/math.sqrt((p_0*(1-p_0))/n)
    return z

#A社の調査(Z値)
A = Z(0.58, 0.5, 1000)
print(A)
#5.059644256269404

#標準正規分布の右裾5%点
z_a = norm.ppf(q=0.95, loc=0, scale=1)
print(z_a)
#1.6448536269514722

#帰無仮説は棄却できるか
A > z_a
#Out[14]: True

#B社の調査(Z値)
B = Z(0.58, 0.5, 100)
print(B)
#1.5999999999999992

#標準正規分布の右裾5%点
z_b = norm.ppf(q=0.95, loc=0, scale=1)
print(z_b)
#1.6448536269514722

#帰無仮説は棄却できるか
B > z_b
#Out[16]: False

結論

A社は帰無仮説を棄却できたが、B社は棄却できませんでした。A社のほうが標本サイズが大きく精度が向上していると考えられます。よってこの場合、B社の調査は統計学的に信頼できないが、支持率は上昇していると思われます。