χ² 検定とフィッシャー検定(Cursor×R)

この記事を読んでできること

この記事では、CursorというAIエディタを使ってRを動かし、χ² 検定を行います。最終的には、一切コードを書かずにAIへの指示のみで、集計表の作成とχ² 検定とフィッシャー検定まで行えるようになることを目指します。

AIエディタを使えば、AIに指示するだけで全ての解析がおどろくほど簡単に完了します。

AIエディタについてもう少し詳しく知りたい方はこちらをご覧ください。

本記事と同じ解析環境を準備する手順は下記の記事で詳細に解説しています。

χ² 検定とフィッシャー検定の手順

本記事の解析環境

  • AIエディタ: Cursor (Version 0.44.8)
  • モデル: gemini-2.0-flash-exp

以下のステップで分析を進めていきます。

  1. データセットの準備: palmerpenguinsデータセットを読み込み、データの構造を確認します。
  2. クロス集計表の作成: speciessexのクロス集計表を作成します。
  3. χ²検定の実施: speciessexについてχ²検定を行います。
  4. フィッシャー検定の実施: speciessexについてフィッシャー検定を行います。
  5. χ² 検定とフィッシャー検定の使い分け 2つの手法を使い分ける基準を説明します。

解析時にエラーが出て困ったときに読む記事もあるのでご安心ください。 それでは、早速分析を始めましょう。


1. データセットの準備

今回は、Rに標準で付属しているpalmerpenguinsパッケージのpenguinsデータセットを使用します。このデータセットには、ペンギンの身体測定データが含まれており、変数間の関連性を評価するのに適しています。

吹き出しのアイコン

(Ctrl+K) palmerpenguinsパッケージの’penguins’データを読み込んで、’df’という名前で保存する。

※必要に応じてpalmerpenguinsパッケージをインストールしてください。


library(palmerpenguins)
df <- penguins
変数名 説明
species ペンギンの種(アデリー、ヒゲペンギン、ジェンツー)
island ペンギンが観測された島(ビスコー、ドリーム、トーガーセン)
bill_length_mm くちばしの長さ (mm)
bill_depth_mm くちばしの深さ (mm)
flipper_length_mm 翼の長さ (mm)
body_mass_g 体重 (g)
sex ペンギンの性別(メス、オス)
year 観測年 (2007, 2008, 2009)

2. クロス集計表の作成

χ² 検定やフィッシャー検定を用いるデータ形式

χ² 検定は、カテゴリカルデータ(名義尺度や順序尺度)の関連性を評価する検定です。 クロス集計表(分割表)と呼ばれる各セルに頻度が入ったデータを使用します。 ftable 関数は、複数のカテゴリカル変数の組み合わせの頻度を、簡単に表形式にまとめることができます。

吹き出しのアイコン

(Ctrl+K) dfの`species`と`sex`のクロス集計表を作成


ftable(df$species, df$sex)

           female male

Adelie         73   73
Chinstrap      34   34
Gentoo         58   61

3. χ²検定

吹き出しのアイコン

(Ctrl+K) `species`と`sex`についてχ²検定を行う


chisq.test(df$species, df$sex)

        Pearson's Chi-squared test

data:  df$species and df$sex
X-squared = 0.048607, df = 2, p-value = 0.976

Rでは、先程作成したクロス集計表を作らなくても、データフレームの2つのカテゴリカル変数を指定するだけでχ² 検定ができます。

χ² 検定は、クロス集計表の中に期待度数が5未満のセルが全体が存在するときは適切でないとされています(ただし、期待度数が5以下のセルがあっても、それが全体の20%以下であれば、期待度数の最小値が1程度までは許容される)。

chisq.test の出力では、いずれかのセルの期待度数が 5 未満の場合、警告が表示されます。 各セルの期待度数も簡単に調べることができます。

吹き出しのアイコン

(Ctrl+K) セルの期待度数を確認。


chisq <- chisq.test(df$species, df$sex)
chisq$expected

           df$sex
df$species    female     male
  Adelie    72.34234 73.65766
  Chinstrap 33.69369 34.30631
  Gentoo    58.96396 60.03604

4. フィッシャー検定

フィッシャーの正確確率検定や、フィッシャーの直接確率法など呼び方は様々です。 フィッシャー検定は正規分布を仮定せず、正確に確率を近似する手法です。全体的にP値が大きくなりやすく、検定で棄却しにくい(保守的である)という特徴があります。

吹き出しのアイコン

(Ctrl+K) `species`と`sex`についてフィッシャー検定を行う


fisher.test(df$species, df$sex)

           df$sex
df$species    female     male
  Adelie    72.34234 73.65766
  Chinstrap 33.69369 34.30631
  Gentoo    58.96396 60.03604
> fisher.test(df$species, df$sex)

        Fisher's Exact Test for Count Data

data:  df$species and df$sex
p-value = 0.979
alternative hypothesis: two.sided

フィッシャー検定のp値は0.979と、χ² 検定とほぼ同じ結果になりました。

5. χ² 検定とフィッシャー検定の使い分け

今回のようにサンプルサイズが比較的大きなデータでは,χ² 検定とフィッシャー検定のp値はほぼ同じになることが多いです。一方で、小さなサンプルサイズのデータでは,p値の差が大きくなりやすいです。 先に述べたように、χ² 検定は、経験則としてすべての期待度数が 1 より大きく、かつ、期待度数が5未満のセルが全体の20%以下であるときに妥当であるとされているため、期待度数が5以下のセルが存在する場合はフィッシャー検定を使用し、そうでなければχ²検定を選択することが多いです。

コメント