Rは統計解析のブッシュナイフだ

第1回 Rは統計解析のブッシュナイフだ

柏野雄太
バクフー株式会社

2010/7/21

統計的検定を利用する

 統計解析において、ある分布と別の分布が違うことを調べるには「検定」というものを利用します。この場合は「Jリーガーの月別出生数分布は日本人の月別出生数分布と同じである」かどうかを統計学的に検査するのです。

 統計学的に違いを指摘するやり方と、日常生活で違いを指摘するやり方は大分違います。統計学的には検査をしたい仮説を「帰無仮説」(きむかせつ)と呼び、この帰無仮説が統計学的な条件を満たすかどうかという回りくどい検査を行って、違いを指摘することになります。詳しい具体的な方法はこの連載で順次たっぷり解説します。ここでは、まずはそういうものがあるとして、Rでどうやって「Jリーガーの月別出生数分布は日本人の月別出生数分布と同じである」という検定をするか、というのを先に提示します。そのほうが、変なモヤモヤが少ない気がしますので。

 まず検定でも、近似的な検定方法であるカイ二乗検定を用いて、「Jリーガーの月別出生数分布は日本人の月別出生数分布と同じである」という帰無仮説の検定を行ないます。それには、chisq.testというRに組み込みのカイ二乗検定関数を利用して、以下のようにします。カイ二乗検定や、それが近似的であるということについては、次回の統計的検定を取り上げるときに説明しますので、今はそういうものがあるという風に思っていてください。

> prob <- japrecent/sum(japrecent)
> chisq.test(data.jleagers,p=prob)
	Chi-squared test for given probabilities
data:  data.jleagers 
X-squared = 89.5624, df = 11, p-value = 2.031e-14

 chisq.testの第1引数には「Jリーガーの月別出生数分布」を入れ、第2引数には「日本人の月別出生数分布」を全体の数で割った割合を入れます。第2引数のprob変数には「日本人の月別出生数」を表すjaprecentを、それ自身の和(sum関数を適用してある)で割っています。これは「日本人の月別出生数」の確率密度分布と解釈できます。

 ちなみに、このsum関数のように、Rではベクトルやリストやマトリックスに対して直接演算をする関数を多く備えています(ただし、これはループを隠蔽化しているだけで、ベクトルプロセッサを直接使う機能はありませんので、ベクトル演算の関数を利用してもループに比べて大幅に改善するというわけではありません。ただし、ベクトル演算の関数を利用すると、ループを使った下手なプログラミングが少なくなるという点で、速度は改善するかもしれません)。

 この結果を解釈するわけですが、まずはp-valueの数値を見ます。この数値は、第2引数の「日本人の月別出生数分布(の確率密度)」を仮定する場合、第1引数の「Jリーガーの月別出生数分布」が実現する確率はどのくらいか、を表しています。その確率は2.031e-14(10のマイナス14乗)という非常に低い確率になるということです。つまり、このような低い確率では帰無仮説である「Jリーガーの月別出生数分布は日本人の月別出生数分布と同じである」という言明は採用できない、棄却できる、ということです。日本人の出生数分布とJリーガーの出生数分布は異なっているので、Jリーガーになるためには何らかの理由が働いてそうだ、誕生月によってJリーガーになりにくいということがありそうだ、ということが言えそうです。

次回について

 今回は連載初回ということで、前口上と方針を述べるのが半分、Rを用いて統計解析を駆け足で実践することが半分となりました。次回は、今回と同様に「誕生月によってJリーガーになりやすくなるのか?」というテーマに基づいて、もう少し統計的検定とRの取り扱いについて掘り下げてみたいと思います。具体的には、なぜ帰無仮説を反証するという回りくどい検査をするのか、カイ二乗検定というのはどういうことをやっているのか、検定は万能なのか、という事項について解説したいと思っています。

著者プロフィール
柏野雄太(かしの ゆうた) バクフー株式会社

理学系博士課程単位取得満期退学。研究所、SIベンチャー、ヤフー、ゾープ・ジャパン、オープンソース・ジャパンを経て、バクフー株式会社(www.bakfoo.com)を独立起業。スタートアップとして目が回る毎日。PythonおよびZopeに関わって8年になる。

昔の専門が宇宙物理学であったからか、趣味は数理科学、特に統計学、確率論。最近は数理疫学の学習。ただし、数理科学全般への浮気をしがち。また、文理のジャンルを超えた真性書痴である。スポーツは主にスイミング、種目はフリースタイルの長距離。ただし、最近は惰性になりがち。

アカデミックに愛想がつき、在宅勤務に飽きがきて、西海岸でインド人と喧嘩をし、東海岸でカンヅメにされたのも懲りずに、東京で好き勝手にやらせてもらってます。平日午前中から水泳行ったり……。

結婚十余年。子供は一男一女。

next
4/4

Index
Rは統計解析のブッシュナイフだ
  Page1
統計解析の必要性とリテラシー
データが豊富に入手できる時代
Rで楽しく統計リテラシーを身に付ける
グーグルでも使われているR
  Page2
連載の前口上と小理屈
何よりもまず、実践的な統計解析を体験してみる
誕生月によってJリーガーになりにくくなるのか?
  Page3
誕生月分布のプロット
グラフの印象ではなく、定量的に議論するには
  Page4
次回について
統計的検定を利用する

 Coding Edgeお勧め記事
いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1)
 コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Zope 3の魅力に迫る
Zope 3とは何ぞや?(1)
 Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか?
貧弱環境プログラミングのススメ
柴田 淳のコーディング天国
 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く?
Haskellプログラミングの楽しみ方
のんびりHaskell(1)
 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう
ちょっと変わったLisp入門
Gaucheでメタプログラミング(1)
 Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間