tetsunosukeのnotebook

tetsunosukeのメモです

Rでカイ二乗検定

社内でデータマイニングの勉強を今月から開始しました。
テキストとして

Excelでできるかんたんデータマイニング入門

Excelでできるかんたんデータマイニング入門

を利用しています。

基本的には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を「ちぃてすと」って読んだ人がいたので、明日から「ちぃ覚えた!」がしばらく流行る予定です。