マンテル・ヘンツェルの検定(Mantel-Haenszel test)について。
【目次】
マンテル・ヘンツェルの検定は、 検定やFisher's Exact testと同じく、カテゴリーデータの独立性を評価する手法であり、多層のクロス表の層別解析を行うことができる。
この検定は、Mantel and Haenszel (1959) が開発した手法。
同様の方法を Cochran (1954) も提案しており、彼らの名前から Cochran-Mantel-Haenszel test(CMH検定)とも呼ばれる。
本記事では、マンテル・ヘンツェルの検定と呼称。
帰無仮説、対立仮設
- 帰無仮説
- 対立仮設
少なくとも1つが
※OR=Odds Rate(オッズ比)、k=Subgroup(層別因子)
計算式等
次のクロス表が k層あると仮定して考える。
■ 観測度数
Outcome | Total | |||
(+) | (-) | |||
Factor | 1 | a | b | AB |
2 | c | d | CD | |
Total | AC | BD | N |
統計量(CMH統計量とも言う) :
共通オッズ比(Common OR) :
共通オッズ比の信頼区間 :
※95%信頼区間
ただし、
統計量や共通オッズ比は、交絡因子で層別解析した結果を統計学的に併合したもの。この併合手法をマンテル・ヘンツェル法と言う。
計算例
簡単なデータで計算方法を確認。
年齢で層別化した遺伝子Xと病気Yのクロス集計表(架空データ)を用いる。
(年齢を交絡因子として扱う)
■ 観測度数
年齢 | 遺伝子X | 病気Y | Total | |
(+) | (-) | |||
< 40 | 有 | 10 | 40 | 50 |
無 | 50 | 100 | 150 | |
Total | 60 | 140 | 200 | |
40-59 | 有 | 150 | 50 | 200 |
無 | 50 | 20 | 70 | |
Total | 200 | 70 | 270 | |
60 < | 有 | 50 | 50 | 100 |
無 | 50 | 50 | 100 | |
Total | 100 | 100 | 200 | |
All | 有 | 210 | 140 | 350 |
無 | 150 | 170 | 320 | |
Total | 360 | 310 | 670 |
今回の架空データの全体表について単純に 検定を行うと、
となり、遺伝子Xと病気Yの間に有意な関係がありそうだという結論になる。
マンテル・ヘンツェルの検定を行ってみる。
Excel でデータを横持ちにして、層別解析したものが次の図。
統計量および
検定(自由度=1)による p値:
共通オッズ比、およびその95%信頼区間:
全体表の 検定で有意だった結果から一変して、マンテル・ヘンツェルの検定(年齢で調整したデータ全体の独立性検定)では p値が0.05を上回り、統計学的に有意ではないという結論になった。
共通オッズ比も1を下回り、95%信頼区間も1を挟んでいるため、遺伝子Xと病気Yの間に有意な関係性を見出すことはできない。
今回の場合、例えば40-59歳は遺伝子Xの有無問わず病気Yの発生が多いと見られるため、遺伝子Xに直接の要因はなく、年齢やそれに伴う生活習慣などが要因にあたるのかもしれない。
このように、コントロール可能な交絡因子が考えられる場合、単に 検定やFisher's exact 検定をするのでなく、層別解析を行うことはとても有用。
Rでの実行:
> mymtx1 <- matrix(c( 10, 40, 50, 100), nrow=2, byrow=TRUE)
> mymtx2 <- matrix(c(150, 50, 50, 20), nrow=2, byrow=TRUE)
> mymtx3 <- matrix(c( 50, 50, 50, 50), nrow=2, byrow=TRUE)
> mymtx <- array(c(mymtx1, mymtx2, mymtx3), dim=c(2,2,3))
>
> mantelhaen.test(mymtx, correct=T)
Mantel-Haenszel chi-squared test with continuity correction
data: mymtx
Mantel-Haenszel X-squared = 0.23013, df = 1, p-value = 0.6314
alternative hypothesis: true common odds ratio is not equal to 1
95 percent confidence interval:
0.6296054 1.2890219
sample estimates:
common odds ratio
0.9008746
> mantelhaen.test(mymtx, correct=F)
Mantel-Haenszel chi-squared test without continuity correction
data: mymtx
Mantel-Haenszel X-squared = 0.32524, df = 1, p-value = 0.5685
alternative hypothesis: true common odds ratio is not equal to 1
95 percent confidence interval:
0.6296054 1.2890219
sample estimates:
common odds ratio
0.9008746
SASでの実行:
data ads;
input AGEGR1N GENOTYPE OUTCOME CNT @@;
datalines;
1 0 0 10 1 1 0 50 1 0 1 40 1 1 1 100
2 0 0 150 2 1 0 50 2 0 1 50 2 1 1 20
3 0 0 50 3 1 0 50 3 0 1 50 3 1 1 50
;
run;
proc freq data=ads;
table AGEGR1N * GENOTYPE * OUTCOME / cmh nocol nopercent;
weight CNT / zeros;
run;
プログラムコード
■ Rのコード
mantelhaen.test(mymtx, correct=T) #-- correct T:連続修正あり、F:連続修正なし
■ SASのコード
proc freq data=[InputDS];
table Subgroup * Factor * Outcome / cmh nocol nopercent;
weight Count / zeros;
output out=[OutputDS] cmh;
run;
■ Pythonのコード
整備中
CochranとMantel and Haenszelの違い
Cochran (1954) の方法と Mantel and Haenszel (1959) の方法は統計量の計算に違いがあり、若干数値が異なるようだった。気にするレベルではない?
なお、RもSASも Mantel and Haenszelの統計量のようだった。
Mantel and Haenszelの統計量( 統計量)
<再掲>
Cochranの統計量
参考
https://support.sas.com/documentation/onlinedoc/stat/121/freq.pdf
https://www.pharmasug.org/proceedings/2020/SA/PharmaSUG-2020-SA-051.pdf
https://www.annualreviews.org/doi/pdf/10.1146/annurev.pu.09.050188.001011
Cochran-Mantel-Haenszel Test with Breslow-Day & Tarone Correction