【R講座】フィッシャーの正確検定の方法と実践

R

R講座】では、研究室に配属されたばかりの新入生や、統計分析をRで始めたい人向けに、RとRStudioの基本的な使い方から統計の手法の選び方、基本的なデータ分析方法を、実際のコードを交えながら紹介しています。

R講座の記事一覧
「R講座」の記事一覧です。

この記事では、フィッシャーの正確検定について紹介しています。

フィッシャーの正確検定とは

フィッシャーの正確検定は、2つの名義尺度間の関連性を評価するための統計手法です。特に、サンプルサイズが小さい場合に有用です。

前提設定

フィッシャーの正確検定を行う際の前提条件は以下の通りです。

  • 対応の有無:対応なし
  • データ尺度:名義尺度

仮説の設定

フィッシャーの正確検定を行う際の仮説は以下の通りです。

  • 帰無仮説(H0:2つの変数は独立である。
  • 対立仮説(H1:2つの変数は独立ではない。(何らかの関係性がある)

Rでフィッシャーの正確検定

Rを使用してフィッシャーの正確検定を行う方法を紹介します。

関数と引数オプション

Rでフィッシャーの正確検定を行うためには、fisher.test()関数を使用します。この関数の主な引数は以下の通りです。

# fisher.test(x, y = NULL, workspace = 200000, hybrid = FALSE,
              hybridPars = c(expect = 5, percent = 80, Emin = 1),
              control = list(), or = 1, alternative = "two.sided",
              conf.int = TRUE, conf.level = 0.95,
              simulate.p.value = FALSE, B = 2000)
  • x: 2次元のクロス集計表(行列形式)または因子オブジェクトを指定します。
  • y: 因子オブジェクト。xが行列の場合は無視されます。
  • workspace: ネットワークアルゴリズムで使用されるワークスペースのサイズ(4バイト単位)。非シミュレーションp値が2×2表より大きい場合に使用します。Rバージョン3.5.0以降では、内部スタックサイズも増加し、より大きな問題の解決が可能ですが、時間がかかる場合があります。その場合、simulate.p.values=TRUEを設定するのが合理的です。
  • hybrid: 論理値。2×2表より大きい場合に、正確な確率(デフォルト)またはハイブリッド近似を計算するかどうかを指定します。
  • hybridPars: 数値ベクトル(長さ3)。デフォルトではカイ二乗近似の妥当性に関する「コクランの条件」を表します。
  • control: ローレベルアルゴリズム制御のための名前付きコンポーネントを含むリスト。現在使用されているのは"mult"(正の整数、デフォルトは30)で、2×2表より大きい場合にキーに対してパスに割り当てるスペースの比率を指定します。
  • or: 仮定されるオッズ比。2×2表の場合のみ使用されます。
  • alternative: 対立仮説の種類を指定します。"two.sided"(両側検定)、"greater"(片側検定:大きい方向)、"less"(片側検定:小さい方向)のいずれかを指定します。2×2表の場合のみ使用されます。
  • conf.int: 2×2表でオッズ比の信頼区間を計算(および返却)するかどうかを示す論理値。
  • conf.level: 返される信頼区間の信頼水準を指定します。2×2表の場合のみ使用され、conf.int = TRUEの場合に適用されます。
  • simulate.p.value: 2×2表より大きい場合に、モンテカルロシミュレーションでp値を計算するかどうかを示す論理値。
  • B: モンテカルロテストで使用される反復数を指定します。

コード例と結果の見方

以下に、データフレームを使用したサンプルコードとその結果の見方を示します。

# データフレームを作成
data <- data.frame(
  Treatment = c('Drug', 'Drug', 'Drug', 'Drug', 'Drug', 'Drug', 'Drug', 'Drug', 'Placebo', 'Placebo', 'Placebo', 'Placebo', 'Placebo', 'Placebo'),
  Outcome = c('Cure', 'Cure', 'Cure', 'Cure', 'NoCure', 'NoCure', 'NoCure', 'NoCure', 'Cure', 'Cure', 'Cure', 'NoCure', 'NoCure', 'NoCure')
)

# フィッシャーの正確検定を実行
fisher.test(data$Treatment, data$Outcome)
# 結果
Fisher's Exact Test for Count Data

data:  data$Treatment and data$Outcome
p-value = 1
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
  0.07674974 13.02935967
sample estimates:
odds ratio 
         1

有意水準を5%に設定する場合、p値が0.05未満であれば、帰無仮説を棄却し、2つの変数間には有意な関連があると判断します。サンプルデータの検定結果は、p-value = 1であるため、2つの処理は独立である(関係性がない)と結論できます。

RVAideMemoireパッケージのfisher.multcomp()関数を使うことで2x3クロス表などのデータを多重比較できます。この関数では、多重比較法として, Bonferroni, Holm, Benjamini and Hochberg などが使えます。

# RVAideMemoire パッケージをインストールおよび読み込み
install.packages("RVAideMemoire")
library(RVAideMemoire)

# サンプルデータ
sample_size <- 100

treatment <- sample(c("無処理", "処理1", "処理2"), sample_size, replace = TRUE)

results <- sample(c("コンタミ", "枯死", "生存"), sample_size, replace = TRUE)

sample_data <- data.frame(
  処理 = treatment,
  結果 = results
)

# テーブルに変換
data_table <- table(sample_data$処理, sample_data$結果)

# Fisherの多重比較
fisher.multcomp(data_table, p.method = "holm")

# p.method = "bonferroni" でBonferroni法
# p.method = "BH" でBenjamini and Hochberg法
Pairwise comparisons using Fisher's exact test for count data

data:  data_table
             コンタミ:枯死 コンタミ:生存 枯死:生存
処理1:処理2              1             1         1
処理1:無処理             1             1         1
処理2:無処理             1             1         1

P value adjustment method: holm

この記事はフィッシャーの正確検定について紹介しました。

次回はウィルコクソンの符号順位検定の方法について紹介します。

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