Rでカイ二乗検定
社内でデータマイニングの勉強を今月から開始しました。
テキストとして
- 作者: 近藤宏,末吉正成
- 出版社/メーカー: 同友館
- 発売日: 2008/05
- メディア: 単行本
- 購入: 1人 クリック: 6回
- この商品を含むブログ (1件) を見る
基本的にはExcelにてごにょごにょしているのですが、自分ノルマということで、プログラミング言語のRを覚えることにしました。
初回はカイ二乗検定による、データに「違いがあるか」を調べる手法です。
例えば、サイコロを60回振ったときに、以下のようなデータになったとします。
あきらかにばらつきがある例
1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|
10 | 10 | 10 | 25 | 1 | 4 |
このデータについてカイ二乗検定を実施するには
chisq.test( c(10, 10, 10, 25, 1, 4) )
と入力すると
Chi-squared test for given probabilities data: c(10, 10, 10, 25, 1, 4) X-squared = 34.2, df = 5, p-value = 2.172e-06
と出力されます。 p-value の値が 0.05より小さければ、有意水準5%でこのデータのバラツキがあると判断できます。
たとえば
1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|
10 | 10 | 10 | 8 | 8 | 14 |
であれば、p-valueの値が0.7915であり、バラツキは少ないといえます。
カイ二乗検定を実施する際に、多次元のデータの判定をしたいことがあります。
たとえば、男性と女性で、A,Bの2択(例えばうどんとそばが好きかどうか)を選択した場合、その違いがあるか?を調べたいとします。
- | うどん | そば |
---|---|---|
女性 | 1 | 7 |
男性 | 13 | 6 |
この値についてカイ二乗検定を用いるには matrix を使い、行列化します。(このデータの場合は二次の正方行列です)
> m = matrix(c(1,7,13,6),ncol=2, byrow=T) > m [,1] [,2] [1,] 1 7 [2,] 13 6
下記のようなデータであれば
- | うどん | そば | ラーメン |
---|---|---|---|
女性 | 1 | 7 | 3 |
男性 | 13 | 6 | 10 |
こうです。
> m = matrix(c(1,7,3, 13,6,10),ncol=3, byrow=T) > m [,1] [,2] [,3] [1,] 1 7 3 [2,] 13 6 10
> m = matrix(c(1,7,13,6),ncol=2, byrow=T) > chisq.test(m) Pearson's Chi-squared test with Yates' continuity correction data: m X-squared = 4.9895, df = 1, p-value = 0.0255 警告メッセージ: In chisq.test(m) : カイ自乗近似は不正確かもしれません
この警告は
期待度数が 1 以下になるセルがある
一般に( n × m の分割表で)期待度数が 5 以下になるセルが全体の 20% を超える
そうです。
この場合は数値補正をする必要があるとのこと。補正の要否、仕方については今後調べないといけないっぽいです。
あと、Excelの関数のCHITESTを「ちぃてすと」って読んだ人がいたので、明日から「ちぃ覚えた!」がしばらく流行る予定です。