カイ二乗検定

例題
サンプルを使用してカイ二乗検定をやってみましょう。「筋力トレーニングと歩行速度改善には関連があるか?」という疑問に答えるための検定と思ってください。

僕が作った架空のデータです。解析結果についてはご意見があると思いいますが、統計学の練習のためのサンプルですのでご了承ください。

独立性の検定

リハビリテーションの研究でよくみかけるカイ二乗検定は、この独立性の検定がほとんどです。

要因 \(A_i\)   {\(i=1, 2, 3\)}
要因 \(B_j\)   {\(j=1, 2, 3\)}

要因 \(A_i\) と要因 \(B_j\) が完全に独立している例

df <- matrix(c(1, 2, 6, 2, 4, 12, 5, 10, 30), 3, 3)
colnames(df) <- c("A1", "A2", "A3")
rownames(df) <- c("B1", "B2", "B3")
df

要因\(A1:A2:A3\)は要因\(B_j\)には関係なく同じ比を示しています

この場合、統計学的には要因\(A\)と要因\(B\)は独立していると言います

つまり、要因\(A_i\)と要因\(B_j\)には関連性がないということになります

\(P(A_i∩B_j)=P(A_i)∗P(B_j)\)

独立していない極端な例

df <- matrix(c(1, 0, 0, 0, 4, 0, 0, 0, 30), 3, 3)
colnames(df) <- c("A4", "A5", "A6")
rownames(df) <- c("B4", "B5", "B6")
df

要因 \(B4:B5:B6\) は要因\(A_i\)ごとにそれぞれ異なる割合を示しています

このような場合には、要因\(B_j\)は要因\(A_i\)に依存しているので、要因\(B_j\)と要因\(A_i\)には何らかの関連性があると考えま(もちろん\(A\)と\(B\)を入れ替えても同じことが言えます)

独立性の検定によるp値を利用することで要因\(A_i\)と要因\(B_j\)の関連性を検証することができます

Fisherの正確検定も方法は異なりますが、求めていることは同じです

それでは、実際にRを操作しながらやってみましょう!

独立性の検定の帰無仮説

独立性の検定の帰無仮説には、つぎのような表現が使われます(どれも同じ意味です)

  • 事象\(A_i\)と事象\(B_j\)には有意な連関がない
  • 事象\(A_i\)と事象\(B_j\)は独立である 
  • \(A_1, A_2, …, A_i\)の割合(比)はどの\(B_j\)に対しても共通である
  • 全ての \({}_i{}_j\)に対して  \(P(A_i∩B_j)=P(A_i)∗P(B_j)\)

サンプルファイル

csvファイルの読み込み方

dat <- read.csv("kaijijou_01.csv", header=T, fileEncoding = "Shift-JIS")

どんなデータフレームになっているか確認してみます
先頭から6行のみ抜き出し

head(dat)

ここまでできればデータの読み込みは完了

datという文字の中にkaijijou_01というエクセルのファイルが読み込まれました

ここからエクセルファイルは直接使わずに、Rで作業を進めていきます

2変数の分割表の作成

tab <- xtabs(~ 筋トレ + 歩行改善, data = dat)
tab

今度はtabという文字の中に、以下のような分割表が生成されたはずです

tabと入力してEnterキーを押してください

エクセルの一覧表が一気に分割表になります

これでカイ二乗検定の準備完了

あとは以下のように書けば独立性の検定結果を出力してくれます

有意水準5%で検定してみましょう

yatesの補正

chisq.test(tab)

Rはyatesの補正がデフォルト設定になっています

p < 0.05なので、tabは独立していないという結果になります・・・
つまり、筋トレの有無とと歩行練習の有無には何らかの関連性があるということです

yatesの補正はカイ二乗地が小さくなるような補正ですのでp値が大きくなります(厳しい結果になります)

yatesの補正なし

yatesの補正なしの場合はcorrect = FALSEと入力しましょう

chisq.test(tab, correct = FALSE)

検定結果のみが必要な方は、ここまででOKです

もう少し勉強したい人は次に進みましょう

カイ二乗値の求め方

カイ二乗検定の統計量となる、カイ二乗値は以下のようにして求めます

\(\sum\sum (\dfrac{(観測度数 – 期待度数)^2}{期待度数})\)

ちなみにyatesの補正をした場合の統計量は以下のようになります

\(\sum\sum (\dfrac{(|観測度数 – 期待度数|-0.5)^2}{期待度数})\)

実際にカイ二乗値を求めてみましょう

addmargins(tab)

いかのような出力になったでしょうか(分割表の周辺和が出るはずです)

患側度数と期待度数を求めてカイ二乗値を求めます

期待度数

20*20/35
20*15/35
15*20/35
15*15/35

カイ二乗値

((15-20*20/35)^2)/(20*20/35) +
((5-20*15/35)^2)/(20*15/35) +
((5-15*20/35)^2)/(15*20/35) +
((10-15*15/35)^2)/(15*15/35)

カイ二乗値は以下のようになったでしょうか?

上で求めたX-squared = 6.0764と同じ値になりました

yatesの補正をした場合のカイ二乗値(X-squared = 4.4941)も求めてみましょう

((abs(15-20*20/35)-0.5)^2)/(20*20/35) +
((abs(5-20*15/35)-0.5)^2)/(20*15/35) +
((abs(5-15*20/35)-0.5)^2)/(15*20/35) +
((abs(10-15*15/35)-0.5)^2)/(15*15/35)

同じ値になりましたね(ホッ)

カイ二乗分布

自由度1のカイ二乗分布

curve(dchisq(x,1), xlim=c(0,8), ylim=c(0,1))

このような図が描けたでしょうか?これが自由度1のカイ二乗分布です。dchisq(x,1)の数字の部分が自由度ですのでdchisq(x,2)に変更すると自由度2のカイ二乗分布が描けます。

カイ二乗値が6.0764なのでかなり右裾に位置することが理解できます。yatesの補正の場合は分子から0.5を引いているのでカイ二乗値は小さくなり、4.4941という値だったので、P値が大きくなることが分布からも理解できます。

適合度の検定

本当は独立性の検定の前に書くべきでしょうが、リハビリテーション研究にはあまり利用されておりませんので、後に回しました。

どんな検定か?

理論上の確率分布から得られる期待度数 ( Expected frequency ) を求めることが前提となります.その期待度数を利用して観測値の度数 ( Observed frequency ) が適合するかどうか(当てはまりの良さ)を検定します.

と言ってもよく分からないので、以下の例で説明しましょう

適合度の検定の帰無仮説

帰無仮説の表現いろいろ

  • 観測度数の割合は期待度数の割合に適合している
  • 各階級の発生確率は母集団の確率に適合している
  • データは想定した確率分布に従っている

例)次のデータはメンデルの法則 1:2:1 の確率に適合しているか?

AAAa aa n(合計)
観測度数 5210246200
メンデルの法則(理論確率) 1/4 1/2  1/4

Rで検定してみましょう

観測度数 <-c( 52, 102, 46 )
理論確率 <- c ( 1/4, 1/2, 1/4 )  
chisq.test(観測度数, p=理論確率)    

帰無仮説は棄却されないので、理論確立に従っていることが証明されました

期待度数は、次のように計算します(理論確立があるので簡単です)

期待度数 <- 理論確率*sum(観測度数) 
期待度数

観測度数と期待度数は以下のようになります

df <- matrix(c(52, 50, 102, 100, 46, 50), 2, 3)
colnames(df) <- c("AA", "Aa", "aa")
rownames(df) <- c("観測度数", "期待度数")
df

カイ二乗値の求め方は独立性の検定と同じです

\(\sum\sum\)\(\frac{(観測度数 – 期待度数)^2}{期待度数}\)

(52-50)^2/50 + (102-100)^2/100 + (46-50)^2/50

カイ二乗分布は自由度2なので以下のようなグラフになります

curve(dchisq(x,2), xlim=c(0,8), ylim=c(0,1))

Rを使用してカイ二乗値からp値を求める場合は・・・

pchisq(0.44, 2, lower.tail = FALSE)    

ダメ出し 間違い、分かりにくい部分などのご意見をお待ちします

タイトルとURLをコピーしました