【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
この記事はフィッシャーの正確検定について紹介しました。
次回はウィルコクソンの符号順位検定の方法について紹介します。