こんにちは。

キャスレーコンサルティングSI部の杉です。

前回に引き続き、R言語の記事になります。

丸2年にわたってR言語について書いてきました。
回帰分析、主成分分析、因子分析、ベイズ推定について記述しましたが、
今回は仮説検定について説明します。
(R言語について触れるのは一旦今回で最後かなと思ってます)

いつものように、検定についてサラッと説明して実際にデータを扱って仮説を立てて検定を行ってみたいと思います。

■仮説検定とは

まずは仮説検定について簡単に説明します。そのまま仮説して検定するという二つの手順になります。

【手順1】

あるデータに対して、まず最初に仮説を立てます。仮に二種類の変数からなるデータとします。
※なんでもいいです。例えば開発中の新薬実験データなど。
新薬の効果が旧薬の効果よりも効果が高いという傾向が『多かった』とします。

仮説として『二つの変数は互いに関係がないのでデータの偏りは偶然』という仮説を立てます。
※これを帰無仮説という

【手順2】

もしも、『データの偏りは偶然生じる』確率が無視できるほど低ければこの仮説は棄却されることとなります。
つまり、仮説が間違っていたということになり、新薬と旧薬の効果は同じという仮説は「正しくない」ということになります。
言い換えると、新薬の方が効果が高いという仮説が立てられます。

例によって大雑把すぎる言い方ですが、まとめると
自分の持っているデータをもとに仮説を立てて、その仮説が『正しそう』か、『正しくなさそう』かを判断をするということです。

graph_hypothesis

また、
帰無仮説では『新薬も旧薬も効果は同じ』という仮説を立てるのに対し、対立仮説では『新薬は旧薬よりも効果が高い』という仮説を立てます。
ただし、効果が高いというデータをいくら持ってきても厳密に証明するのが難しいので帰無仮説を用いて効果を判定することが比較的一般なようです。
(つまり帰無仮説を否定することで検定を行うわけです)

■検定をするにあたって

どのくらいの精度で結果を導けばよいのでしょうか?
一般的に使われるのが、95%や、99%といった精度となります。
この精度を下げていくと正確さを欠くので信頼度も落ちてしまうことになります。
(ただし、正確さを欠く分、比較差は出てきます。)

このバランスで一番使われているのが95%や99%といった数字となるわけです。
(反対に、どんな仮説に対しても100%正しいとは断言できません。)

つまり、起こる確率が95%や99%の範囲内であればその仮説(帰無仮説)を採用することとします。

以下の例では95%の信頼区間を使用しています。
残りの5%は危険率(もしくは有意水準)と言って、『ミスを評価してしまう』基準のことになります。
言い換えれば、その帰無仮説は本当は正しいのに誤って否定してしまう確率のことです。

参考程度までに、基本的な検定手法としては以下のものがあります。
扱うデータの種類や数によって検定を行う手法が異なります。

  • カイ二乗検定

二つの離散変数間に関係があるかどうかを検定する

  • t検定

何らかの値を持ったある集団AとBがあったとして、そこに平均差があるかどうかの検定
(例えば男女間の身長に差があるかどうか)

  • 分散分析

2つ以上の水準を考慮しながらそれぞれの要因の有意性や要因を探る検定
意味のない変動(誤差変動)と意味のある変動(要因によって変化した部分)の分散を分け、
その分散比を求めることで要因が関係しているかを判定します。

  • z検定(正規分布を用いた検定)

正規分布を用いる検定手法。母集団が完全に分かっている場合に用いる。
(すべての対象者に同じ調査を行い、標準偏差がハッキリわかっていることが前提)

  • 二項検定

ある事象が起こるか起こらないかだけを記録する繰り返し型の事象に対する検定

■検定におけるまとめ

統計的仮説検定のアプローチ

  • データをもとに帰無仮説を立てる

二つの間のデータには関係性はない

  • 有意水準を導く

データの偏りが偶然生じる確率を導き、一定の有意水準を定めて
その確率が水準を下回るときは『無視できる』として帰無仮説を棄却する。
有意水準は5%か1%が一般的(ただし、5%や1%にしなければいけないというものではない)。

これらを実際にRを用いると以下のようになります。

t検定で例に挙げたを男女の身長差を取り上げてみます。

例題)男女の身長に差があるのか?
成人の男性A~E(5人)、女性A~E(5人)の計人の身長を調査したとします。

平均身長
男性身長(cm) 163 171 173 167 170 168.8
女性身長(cm) 151 146 157 155 148 151.4

この表を見ると、男女の身長の平均は約17cmの開きがあるため、
当たり前のように『男女の身長には差がある』ということがわかります。
そこで、『一般的な男女の身長に差があるのか?』を上の既知のデータから予測してみましょう。

この場合は先の例のとおり、t検定を用いてみます。t.test関数を用いることでt検定を行うことができます。
信頼区間を95%として行ってみましょう。
また、二つの郡(男女の身長)の分散が等しいこととします。

機械的にt検定を行うときはt.testの第三引数をtrueとしてもいいですが、ここで言いたいことは、
『男女の身長』の分散が等しいことを帰無仮説として検定を行っているということです。
t検定を行う際は『等分散』であることを事前に確認しておく必要があるためです。

>malHeight <- c(163, 171, 173, 167, 170)
>femHeight <- c(151, 146, 157, 155, 148)
>t.test(x=malHeight, y=femHeight, conf.level=0.95, var.equal=TRUE)

実行結果:

tTest_sampl

実行結果で、femHeight 0.0002ということから、5%の範囲内なので帰無仮説が棄却されます。

以下、検定の結果

  • 検定結果は有意となる

すなわち、男性と女性の身長(平均の身長)に差はないという帰無仮説が否定され、
男性の平均身長168.8cmと、女性の平均身長151.4cm では差があるという結果になるのです。
ただし、ここで出している結果はあくまで『予測』であって、間違っている可能性もあります。
(特に、採取したデータが『たまたま男女で差が出た』ことによって)

例えばこの場合、0.0002なので、0.02%の確率で検定結果が間違っているという見方ができます。
やはり、極めて稀なため検定結果から『たまたま差が出た』とは考えにくいのではないか?という結論に達します。

■実際に仮説検定を行ってみる

セ・リーグとパ・リーグ、どちらが強いか?

なんとなく検定について客観的にでもわかったと思うので、もう少し実践的なデータを用いて検定を行ってみたいと思います。
今度は、グラフ化もして説明していきます。
以前、メジャーリーグの選手の傾向を主成分分析で分析しました。

今回は、日本のセ・リーグとパ・リーグの間に『強さの差』があるのかどうかを二項検定を用いて分析してみたいと思います。
2005年から始まったセ・パ交流戦(11ヵ年)の成績に着目しました。
日本シリーズだとお互いのリーグの代表1チーム同士が戦うため、セ・パ『全体の力差』感を出すためにあえて交流戦に絞りました。
利用したデータは公式のホームページから。

  1. 2005年~2014年の交流戦成績
  2. 2015年の交流戦成績

(パ:61勝、セ:44勝、引分:3)
このデータを見ると、2009年以外はパ・リーグが勝ち越していることがわかります。
よって、データ上では「パ・リーグの方が強い」という推測ができます。
11年間でパ・リーグは865勝、セ・リーグは774勝。
以下、検定するにあたっての仮説の設定となります。

  • 帰無仮説:セ・パで力差は無いものとする。
  • 検定する統計量は、セ・パの勝利数とする。
  • 各チームの資金状況などは考慮しない(純粋に勝利数)。
  • 引き分けは今回はカウントしない。

二項検定ではdbinomを使用します。
dbinom(勝利数, 全体の数, 勝利する確率)となります。
ここでは引き分けはノーカウントとするため、全体は1639試合としています。
また、お互いに戦力差がないことを仮定しているため、勝率は0.5(50%)としています。

>dbinom(865, 1639, 0.5)実行結果:
[1] 0.001576014
>

つまり、セ・パの戦力に差がなかったと仮定すると、1639試合おこなって
パ・リーグが865回勝利する確率は0.0016(0.16%)程度ということがわかります。
dbinomはベクトルも定義できるため、700勝から900勝まで定義してプロットしてみます。
以下のグラフは勝ち数に対する確率の分布になります。

>wins <- 700:900
>plot(wins, dbinom(wins, 1639, 0.5))

grapph_hypothesis_dbinom2
pbinom関数を使って、勝ち数がx以下になる確率を計算してみます。

>round(pbinom(wins, 900, 0.5), 5)
[28] 0.00000 0.00000 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 0.00002
[37] 0.00002 0.00003 0.00003 0.00004 0.00005 0.00006 0.00007 0.00009 0.00010
[46] 0.00013 0.00015 0.00019 0.00022 0.00027 0.00032 0.00039 0.00046 0.00055
[55] 0.00066 0.00078 0.00092 0.00109 0.00129 0.00151 0.00177 0.00208 0.00242
[64] 0.00283 0.00328 0.00381 0.00441 0.00509 0.00586 0.00674 0.00773 0.00885
[73] 0.01011 0.01151 0.01309 0.01485 0.01681 0.01898 0.02139 0.02406 0.02699
[82] 0.03022 0.03377 0.03765 0.04188 0.04650 0.05151 0.05694 0.06282 0.06915
[91] 0.07597 0.08329 0.09112 0.09949 0.10840 0.11788 0.12793 0.13855 0.14977
[100] 0.16157 0.17396 0.18694 0.20051 0.21464 0.22934 0.24459 0.26037 0.27666
[109] 0.29343 0.31065 0.32831 0.34635 0.36475 0.38346 0.40246 0.42168 0.44109
[118] 0.46065 0.48030 0.50000 0.51970 0.53935 0.55891 0.57832 0.59754 0.61654
[127] 0.63525 0.65365 0.67169 0.68935 0.70657 0.72334 0.73963 0.75541 0.77066
[136] 0.78536 0.79949 0.81306 0.82604 0.83843 0.85023 0.86145 0.87207 0.88212
[145] 0.89160 0.90051 0.90888 0.91671 0.92403 0.93085 0.93718 0.94306 0.94849
[154] 0.95350 0.95812 0.96235 0.96623 0.96978 0.97301 0.97594 0.97861 0.98102
[163] 0.98319 0.98515 0.98691 0.98849 0.98989 0.99115 0.99227 0.99326 0.99414
[172] 0.99491 0.99559 0.99619 0.99672 0.99717 0.99758 0.99792 0.99823 0.99849
[181] 0.99871 0.99891 0.99908 0.99922 0.99934 0.99945 0.99954 0.99961 0.99968
[190] 0.99973 0.99978 0.99981 0.99985 0.99987 0.99990 0.99991 0.99993 0.99994
[199] 0.99995 0.99996 0.99997
>1 – pbinom(853, 1639, 0.5)
[1] 0.04649733

上のグラフは、セ・パで実力差が無しとした時の勝利数をグラフ化したもの。
750勝以下、870~880勝以上はほぼ0%(あり得なさそう)ということがわかる。

P値:0.04649733
有意水準 0.05 より小さいので帰無仮説が棄却され
『セ・リーグとパ・リーグは同じ強さ』という帰無仮説が棄却され、『パ・リーグの方が強い』という結論に達しました。
また、1%信頼区間で考えると(つまり有意水準0.01)、棄却域に入らないので『パ・リーグの方が強い』とは言えなくなります。
(パ・リーグの勝利数で99%以上になる最低勝利数が、実際の勝利数865勝を上回るため)

■考察・まとめ

さて、今回は検定について取り上げてみました。
ざっと検定の流れは理解できたのではないかと思います。
データから何が読み取れるか、何が予測できるかを考え、アプローチしていくと、
思っても見ない発見ができることもあるでしょう。
今まではRと統計について書いてまいりましたが、次回はこれまでと違った分野で技術ブログを執筆できたらと思います。
ここまで読んでいただきありがとうございました。