プログラミングを完全に理解したエンジニアのメモ

チラ裏レベルのことしか書いてないインターネットの藻屑

仮説検定ではサンプル数を決めてからやらないとダメですよ!!!!!

大学の授業で気づいたことがあった。ある授業でクラウド会計の認知度が増加していると言っていたグループがあった。 引用先のデータはこのサイトのページ中段の認知度の表である。 www.m2ri.jp

この数値(認知度のパーセンテージ)をみて増加している => クラウド会計の認知度は増加していると判断している。 たしかに認知度のパーセンテージだけ見れば認知度は増加している。

が、あまり認知度は増加していないかなと思う。

簡単に表すとこのようになる。

知っている 知らない 知っている人の割合
2015 12,705 9,420 22,125 57.4%
2016 12,328 7,785 20,113 61.3%

一応カイ二乗で見てみると

> prop.test(c(12705,12328),c(22125,20113))

    2-sample test for equality of proportions with continuity correction

data:  c(12705, 12328) out of c(22125, 20113)
X-squared = 65.199, df = 1, p-value = 6.769e-16
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.04811520 -0.02928403
sample estimates:
   prop 1    prop 2 
0.5742373 0.6129369 

この時の帰無仮説は認知度は変わらない、対立仮説は認知度が変わった(増加した)となる。

p値は限りなく0に近いし、パッと見、有意差があるように見える。 しかし、サンプル数が多すぎていわゆる「第一種の過誤」を起こしている。

過誤をせずに仮説検定をするには必要なサンプル数を見積もってから行う必要がある。 今回の例ではどのくらい割合が増加すれば認知度が増加したと判断できるかが難しいが、 (かなり少なめに見積もって)5%くらい上がれば少し認知度が上がったと判断できる(と思う)。

> power.prop.test(p1 = 0.57,p2 = 0.62,sig.level = 0.05,power = 0.8,alternative = "one.sided")

     Two-sample comparison of proportions power calculation 

              n = 1190.827
             p1 = 0.57
             p2 = 0.62
      sig.level = 0.05
          power = 0.8
    alternative = one.sided

すると適切なサンプル数は1191であると判断できる。

今回のデータを単純に適切なサンプル数に圧縮するとこのようになる。

> n = 0.05; prop.test(c(n*12705,n*12328),c(n*22125,n*20113))

    2-sample test for equality of proportions with continuity correction

data:  c(n * 12705, n * 12328) out of c(n * 22125, n * 20113)
X-squared = 3.1096, df = 1, p-value = 0.07783
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.08154433  0.00414509
sample estimates:
   prop 1    prop 2 
0.5742373 0.6129369 

2015年と2016年ではあまり差がないようという結果になる。

まとめ

ちゃんとサンプル数を見積もってから検定をしよう!!! おかしなところがあったらコメントかtwitter(@fuji_and_tora)まで