jnobuyukiのブログ

JavaScriptとR言語を中心に研究活動に役立つwebアプリケーション技術について考えていきます。twitter ID: @j_nobuyuki

ビッグデータ解析と統計的帰無仮説による検証の関係(2)

f:id:jnobuyuki:20140910215334p:plain前回、ビッグデータで何度も同じ統計的検定を繰り返す問題について考えました。今回は、一度にたくさんのサンプルを使って統計的検定を行うことによって生じる問題を取りあげます。

サンプルサイズが大きくなると

「ある母集団を想定して、そこから得たサンプルの性質を通じて母集団について知りたい。」
これが統計学を仮説の検証に用いるロジックの一つです。なので、一般に、サンプル数が増えれば、母集団についての情報の精度があがると期待できます。

では、これが最近のビッグデータで用いられるような10万以上のサンプルサイズを考えるとどうなるでしょうか?基本的には母集団の代表値の精度が上がるので、良いのですが、あまりにデータが多いと極端に精度がよくなってしまいます。シミュレーションで考えてみましょう。

R言語によるシミュレーション

1サンプルのt検定をいろいろなサンプル数でやってみましょう。今回は平均0、分散1のガウス分布からサンプルを生成します。つまり、t検定では本来、0よりも大きいまたは小さいという結論が得られないはずの条件です。今回のシミュレーションでは、推定値と標準誤差の大きさに注目します。

nsample = c(10,100,1000,10000,100000) #サンプルサイズを10から100000まで試します。
nsim = 1000 #シミュレーションの回数は1000で固定

resmu = rep(0, length(nsample)) #平均の推定値の記録用
resse = rep(0, length(nsample)) #標準誤差の推定値の記録用

for (i in 1:length(nsample)){
  estimatearr = rep(0,nsim)
  sdarr = rep(0, nsim)
  for (j in 1:nsim){
    data <- rnorm(nsample[i])
    resTtest <- t.test(data, mu = 0)
    estimatearr[j] <- resTtest$estimate #mu
    searr[j] <- resTtest$estimate/resTtest$statistic #standard error
    
  }

  resmu[i] <- mean(estimatearr)
  resse[i] <- mean(searr)
  hist(estimatearr)
  hist(searr)
  
}

print(resmu)
print(ressd)

試しに上記のシミュレーションを実行したところ、以下のような結果になりました。
f:id:jnobuyuki:20140910215334p:plain

この図でわかるように、推定値は、サンプルサイズの影響をほとんど受けませんが、標準誤差(ばらつき)はサンプルサイズが大きくなるほど小さくなります。仮にt検定をして有意差が得られた場合を考えてみてください。どんなサンプルサイズでも「有意差が得られた」だけで考えれば、得られた値が0よりもかなり大きいまたは小さいという印象を持ってしまいそうになります。しかし、有意差と言えるために最低限必要な差の大きさは、サンプルサイズが100,000の場合は極端に小さいです。なので、サンプルサイズが大きいときには、ちょっとした差でも「統計的な有意差」として報告される可能性があることを覚えておきましょう。

サンプルサイズが大きいときの対処

サンプルサイズが極端に大きいときには、結果を注意してみた方がよさそうです。以下に二つの対処法を紹介します。

統計的有意性の基準を厳しくする

一般に「統計的に有意な差が得られた」と言っている場合は、危険率(結論が誤りである確率)を5%にすることが多いです。サンプルサイズが大きいときは、これを1%水準または0.1%水準で考えるといいかもしれません。では、サンプルサイズがどの程度の場合に厳しい基準を用いればいいでしょうか。
Statistical significance in Big Data | Big Data Econometrics
こちらのブログで推奨されている方法を用いるとサンプルサイズ10,000程度で1%水準、100,000よりも大きい場合には0.1%水準を使った方がよさそうです。

効果量に注目する

もう一つの対処法は、有意差が得られたかどうかではなく、どの程度の差が生じているのかに注目することです。効果量の指標の一つにdという指標があります。今回の例で用いている1サンプルのt検定の場合、dは次のように求めます。

d = \frac{\mu_e - 0}{\sigma}

Cohen(1988)が提案したdの目安では、d=0.2が効果量小、d=0.5で効果量中、d=0.8で効果量大とされています。標準偏差を基準として、有意差の大きさを評価できるので、大きな差なのか小さな差なのかを考える場合に有効です。

まとめ

ビッグデータ解析で、極端に大きなサンプルを解析する場合には、有意差の基準を厳しくしたり、効果量に注目したりなどしながら、慎重に結果を解釈しましょう。

追記:2014/9/10 用語やシミュレーションの書き方についての指摘を受けて何か所か修正しました。