Rで栄養統計を学ぼう!第3回:性別と肥満度に関係があるか?カテゴリデータの栄養統計

R言語

「Rで栄養統計を学ぼう!」の連載第3回。

今回は、性別や肥満度などに代表されるカテゴリデータの栄養統計についてみていきます。

仮説検定としては、

  • ピアソンのカイ二乗検定
  • フィッシャーの正確確率検定

をとりあげます。ではいきましょう。

 

 

検定の使い分けについて

はじめに、今回紹介する2つの統計手法の使い分けについて紹介します。この2つは、個人の好みで、どちらを使っても良い、というわけではありません。

単純化すると、

  • ピアソンのカイ二乗検定→データ数の多い場合
  • フィッシャーの正確確率検定→データ数の少ない場合

という風に使い分けます。

具体的には、分割表で期待度数5未満のセルが、全セルの20%以上ある場合はフィッシャーの正確確率検定を、そうでない場合はピアソンのカイ二乗検定を用います。

いきなり期待度数?という単語がでてきて、困惑する方もいらっしゃるかもしれません。以下の表で説明します。

上側の表は、性別と肥満度のクロス集計です。男性の肥満の方は5人、女性の場合は2人という風に見ます。それぞれの列・行の合計も表示されてます。この値は実際に測定などをして導き出された値ですので、観察度数といいます。

これに対して、下側の表の値は期待度数です。このデータの場合、男性も女性も同じ10人です。それに対して、肥満者と非肥満者は男女合計でそれぞれ7人と13人います。つまり、男性にも女性にも、おなじ割合(7:13)で肥満者と非肥満者がいるのであれば、男女の両方とも、肥満者は3.5人、非肥満者は6.5人になるはずです。つまり、こうなることが期待されます。この度数のことを期待度数といいます。

この期待度数が5未満のセルが20%以上であればフィッシャーの正確確率検定を、そうでない場合はピアソンのカイ二乗検定を用いるのでしたね。上の表でいえば、期待度数5未満のセルが50%(4セルのうち3.5が2つ)なので、フィッシャーの正確確率検定を用いる、ということになります。

そのため、基本的には人数が多ければ多くなるほど期待度数が5未満になるセルは少なくなるはずです。なので、人数が多い場合はピアソンのカイ二乗検定を少ない場合はフィッシャーの正確確率検定を用いましょうと単純化したのです。

 

データのインポート

まずはデータをインポートしましょう。今回からはExcelファイルをインポートすることとします。以下のURLからExcelファイルをダウンロードし、「Import Data」→「From Excel」を選択し、インポートしてください。データ名はsampleとします。

sample-3.xlsx

 

ピアソンのカイ二乗検定

ではさっそく、ピアソンのカイ二乗検定を使ってみましょう。

ピアソンのカイ二乗検定を使うためには、まずは分割表を作成する必要があります。これは、

xtabs(~ ベクトル + ベクトル ,data=ベクトルの含まれるデータフレーム)

 

で作成することができます。これを変数に格納し、それをピアソンのカイ二乗検定の関数の引き数にします。ちなみに、ピアソンのカイ二乗検定を行うための関数は以下の通りです。

chisq.test(分割表)

 

です。つまり、データ:サンプルのカイ二乗検定は、以下のようになります。

> tb <- xtabs(~ sample$sex + sample$obes ,data=sample) > chisq.test(tb)

	Pearson's Chi-squared test with Yates' continuity correction

data:  tb
X-squared = 0.097537, df = 1, p-value = 0.754

 

p-value が0.754ですので、帰無仮説:観測された頻度分布と期待される頻度分布に差はないは棄却できません。つまり、性別と肥満には関係があるとは言えない、ということになります。

 

フィッシャーの正確確率検定

次に、フィッシャーの正確確率検定をRをで行う方法を紹介します。今回サンプルとしてるデータは十分に大きいので、フィッシャーの正確確率検定を行う必要はありませんが、例として今回は用いることにします。

フィッシャーの正確確率検定は以下の関数で行うことができます。

fisher.test(分割表)

 

なので、データ:サンプルのフィッシャーの正確確率検定は、以下のようになります。

> source('~/.active-rstudio-document', echo=TRUE)

> tb <- xtabs(~ sample$sex + sample$obes ,data=sample) > fisher.test(tb)

	Fisher's Exact Test for Count Data

data:  tb
p-value = 0.7596
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 0.6060943 2.2136984
sample estimates:
odds ratio 
  1.153022 

 

こちらも p-value は0.7596ですので、帰無仮説が採用されます。結果はピアソンのカイ二乗検定と同様です。

 

まとめ

今回は、Rにおけるカテゴリデータの検定手法について解説しました。今回使用した関数は以下にまとめてありますので、ぜひご活用ください。

目的 関数
分割表を作る xtabs(~ ベクトル + ベクトル ,data=ベクトルの含まれるデータフレーム)
ピアソンのカイ二乗検定を行う chisq.test(分割表)
フィッシャーの直接確率検定を行う fisher.test(分割表)

 

連載目次