【R講座】フィッシャーの正確検定

R講座

研究室に配属されたばかりの新入生や、これからRで統計分析を始めたいと思っている方へ向けて、【R講座】では、RとRStudioの基本的な使い方から統計手法の選び方、基本的なデータ分析方法を解説しています。特にRが初めての方でも安心して学べるように、RStudioのクリック操作も紹介していきます。実際のコード例を交えながら進めるので、これからの研究やデータ分析に、役立てていただけたら嬉しいです。

みなさん、こんにちは!

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

今回の内容
  • フィッシャーの正確検定の概要
  • フィッシャーの正確検定の方法
  • 結果の見方

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

フィッシャーの正確検定は2つの名義尺度間の関連性を評価する統計手法です。

前提条件

フィッシャーの正確検定を実施する際には以下の条件を確認します。

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

フィッシャーの正確検定では次の仮説を設定します。

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

関数の構造と引数オプション

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: モンテカルロテストで使用される反復数を指定します。

分析の実践

次のステップでデータを分析していきます。

Rでフィッシャーの正確検定の手順
  • STEP 1
    データの読み込み

    csvファイルからデータを読み込みます。

  • STEP 2
    フィッシャーの正確検定の実行

    fisher.test()関数でフィッシャーの正確検定を実行します。

  • STEP 3
    結果の出力

    計算された結果がコンソールペインに出力されます。

使用するデータ

この講座では、説明のために同じ CSV データを使い回しています。
実際には、データの性質(分布・尺度・サンプル数など)に合わせて、適切な統計検定を選びましょう。

csvファイル

このcsvファイルには次のデータが含まれています。

TreatmentOutcome
DrugCure
DrugCure
DrugCure
DrugCure
DrugCure
PlaceboCure
PlaceboNoCure
PlaceboNoCure
PlaceboNoCure
PlaceboNoCure

データの読み込み

まずは、次のコードを使って、オブジェクト「data」にread.csv()関数でcsvファイルのデータを代入します。

# データの読み込み
data <- read.csv(file.choose(),
                 check.names = F)

フィッシャーの正確検定

次のコードでフィッシャーの正確検定を行います。

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

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

p値が0.05以下で、95%信頼区間に0が含まれていないため、TreatmentOutcomeに有意水準5%の関連性があると判断します。

有意水準・p値・信頼区間
項目説明
有意水準 (α)帰無仮説を棄却する基準。通常 0.05(5%) や 0.01(1%) を使用する。
例: α = 0.05なら、5%未満の確率で偶然起こる差を「有意」と判断する。
p値検定統計量が観測された値以上になる確率。
p値 < 有意水準 (α) なら、統計的に有意と判断し、帰無仮説を棄却する。
統計的に有意とは?「偶然の変動では説明できない差がある」と判断すること。ただし「実験的に重要」や「因果関係がある」とは限らない。
信頼区間 (Confidence Interval, CI)母集団の真の値(2つのグループの平均値の差)が含まれる範囲を示す。例えば 95%信頼区間 は、繰り返し実験したときに95%の確率で真の値(平均値の差)を含む。
信頼区間と有意性の関係もし信頼区間が ゼロ(または比較対象の値)を含まなければ、統計的に有意と判断できる。
例:平均差の95%信頼区間が (0.5, 2.3) なら、有意水準5%で有意。
注意点統計的有意でも「効果の大きさ(実用的な意味)」とは異なる。
p値が大きくても「差がない」とは言えない(サンプル数が少ない可能性)。

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

まとめ

まとめ
  • フィッシャーの正確検定の概要
    • 関連性の検定
  • フィッシャーの正確検定の方法
    • fisher.test(ベクトル1,ベクトル2)で検定実行
    • RVAideMemoireパッケージのfisher.multcomp()関数で多重比較
  • 結果の見方
    • 有意水準・p値・信頼区間から判断
    • 統計的な意味と実用的な意味に注意

ここでは、Rを使用してフィッシャーの正確検定を行う方法について解説しました。

Rでは、コードの文法が正しければどんな統計手法でも計算が実行されてしまうため、結果が出たからといって安心するのは危険です。統計解析では、データの種類や前提条件に適した手法を選ぶことが重要であり、誤った検定を適用すると意味のない結果を得てしまう可能性があります。

そのため、単にコードを動かすだけでなく、

  • データの分布(正規分布かどうか)
  • 変数の尺度(カテゴリーデータか、連続データか)
  • サンプルサイズ(母数が少ないと適さない検定もある)

などを考慮し、統計の知識をもとに適切な解析方法を選択する必要があります。

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