MENU

R でマンテル・ヘンツェルの方法でオッズ比を統合するメタアナリシス

オッズ比をマンテル・ヘンツェル(Mantel-Haenszel)の方法で統合する方法の解説。

マンテル・ヘンツェル法は、2x2の分割表を統合する方法で、層別解析の方法。

メタアナリシスに応用する方法。

>>もう統計で悩むのは終わりにしませんか? 

↑期間・数量限定で無料プレゼント中!

目次

マンテル・ヘンツェル法の準備

データは以下の通り。

a <- c(3,7,5,102,28,4,98,60,25,138,64,45,9,57,25,65,17)
n1 <- c(38,114,69,1533,355,59,945,632,278,1916,873,263,291,858,154,1195,298)
c <- c(3,14,11,127,27,6,152,48,37,188,52,47,16,45,31,62,34)
n0 <- c(39,116,93,1520,365,52,939,471,282,1921,583,266,293,883,147,1200,309)
dat <- data.frame(a,n1,c,n0)

まず分析の準備。

下図と同じように変数名を作成。

オッズ比は、$ \frac{ad}{bc} $ で計算。

ai <- dat$a
bi <- dat$n1 - dat$a
ci <- dat$c
di <- dat$n0 - dat$c
tn <- dat$n1 + dat$n0
n1 <- dat$n1
n0 <- dat$n0
m1 <- ai + ci
m0 <- bi + di

各研究のオッズ比、標準誤差、対数オッズ比、95%信頼区間下限・上限、各研究の重みを計算する。

or <- ai*di/bi/ci
se <- sqrt(tn/bi/ci)
lgor <- log(or)
low <- exp(lgor-1.96*se)
upp <- exp(lgor+1.96*se)
w <- 1/se/se

各研究のオッズ比、95%信頼区間を並べてみる。

> round(cbind(ORi=or, LLi=low, ULi=upp),4)
        ORi    LLi    ULi
[1,] 1.0286 0.1920 5.5103
[2,] 0.4766 0.2211 1.0274
[3,] 0.5824 0.2274 1.4912
[4,] 0.7818 0.6064 1.0079
[5,] 1.0719 0.6125 1.8760
[6,] 0.5576 0.1789 1.7377
[7,] 0.5991 0.4726 0.7594
[8,] 0.9244 0.6241 1.3692
[9,] 0.6543 0.4051 1.0568
[10,] 0.7155 0.5799 0.8826
[11,] 0.8078 0.5610 1.1633
[12,] 0.9618 0.6162 1.5015
[13,] 0.5525 0.2730 1.1184
[14,] 1.3252 0.8614 2.0387
[15,] 0.7252 0.4236 1.2416
[16,] 1.0558 0.7349 1.5169
[17,] 0.4893 0.2986 0.8020

統合オッズ比を推定し、統合オッズ比の95%信頼区間を計算する。

#----- Mantel-Haenszel Odds Ratio -----
mhor <- sum(ai*di/tn)/sum(bi*ci/tn)
#----- Variance of Mantel-Haenszel Odds Ratio -----
P <- (ai+di)/tn
Q <- (bi+ci)/tn
R <- ai*di/tn
S <- bi*ci/tn
mhv <- (sum(P*R)/sum(R)^2 + sum(P*S+Q*R)/sum(R)/sum(S) + sum(Q*S)/sum(S)^2)/2
#----- 95% confidence interval -----
mhorl <- exp(log(mhor)-1.96*sqrt(mhv))
mhoru <- exp(log(mhor)+1.96*sqrt(mhv))
list(round(c(ORmh=mhor, LL=mhorl, UL=mhoru),4))

統合オッズ比と95%信頼区間は以下の通り。

> list(round(c(ORmh=mhor, LL=mhorl, UL=mhoru),4))
1
  ORmh     LL     UL
0.7816 0.7058 0.8655

均質性の検定(重みは漸近分散法と同じ計算方法)、有意性の検定(Petoの方法と同じ)を行う。

k <- length(ai)
w1 <- 1/(1/ai+1/bi+1/ci+1/di)
q1 <- sum(w1*(lgor-log(mhor))^2)
df1 <- k-1
pval1 <- 1-pchisq(q1, df1)
o <- ai
e <- (ai+bi)*(ai+ci)/tn
v <- ((ai+bi)*(ci+di)/tn)*((ai+ci)*(bi+di)/tn)/(tn-1)
q2 <- (abs(sum(o-e))-0.5)^2/sum(v)
df2 <- 1
pval2 <- 1-pchisq(q2, df2)
list(round(c(Q1=q1, df1=df1,P1=pval1, Q2=q2, df2=df2, P2=pval2),4))

結果はこちら。

> list(round(c(Q1=q1, df1=df1,P1=pval1, Q2=q2, df2=df2, P2=pval2),4))
1
     Q1     df1      P1      Q2     df2      P2
21.4811 16.0000  0.1607 22.2667  1.0000  0.0000

マンテル・ヘンツェルでの均質性の検定は、漸近分散法の重みを使った上述の方法よりもBreslow-Day検定のほうが適切。

DescToolsパッケージの BreslowDayTest() で実施できる。

2x2の分割表の準備が手間がかかる。

array()で準備している。

all <- c(0,0,0,0)
for (i in 1:17){
new <- c(ai[i], ci[i], bi[i], di[i])
all <- c(all, new)
}
out <- all[5:72]
out.bd <- array(out,
dim=c(2,2,17),
dimnames=list(exposure=c("Beta brokade", "Control"),
event=   c("Yes","No"),
site=    c(paste("site", 1:17, sep=""))
)
)
library(DescTools)
BreslowDayTest(out.bd)
BreslowDayTest(out.bd, correct=T)

Breslow-Day検定の結果はこちら。

連続性補正の有無では結果変わらず。

> BreslowDayTest(out.bd)
Breslow-Day test on Homogeneity of Odds Ratios
data:  out.bd
X-squared = 21.714, df = 16, p-value = 0.1527
> BreslowDayTest(out.bd, correct=T)
Breslow-Day Test on Homogeneity of Odds Ratios (with Tarone correction)
data:  out.bd
X-squared = 21.714, df = 16, p-value = 0.1527

オッズ比メタアナリシスのグラフ表示

個々の研究のオッズ比95%信頼区間のグラフに、マンテル・ヘンツェルの方法で推定した、統合オッズ比と95%信頼区間を乗せて図示する。

# ------------- individual graph ----------------
id <- k:1
plot(exp(lgor), id, ylim=c(-2,20),
log="x", xlim=c(0.1,10), yaxt="n", pch="",
ylab="Citation", xlab="Odds ratio")
title(main=" Mantel-Haenszel method ")
symbols(exp(lgor), id, squares=sqrt(tn),
add=TRUE, inches=0.25)
for (i in 1:k){
j <- k-i+1
x <- c(low[i], upp[i])
y <- c(j, j)
lines(x, y, type="l")
text(0.1, i, j)
}
# -------------- Combined graph --------------
mhorx <- c(mhorl, mhoru)
mhory <- c(-1, -1)
lines(mhorx, mhory, type="o", lty=1, lwd=2)
abline(v=c(mhor), lty=2)
abline(v=1)
text(0.3, -1, "Combined")

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

オッズ比のメタアナリシスをmetaforパッケージで行う

metaforパッケージのrma.mh()を使った方法。

library(metafor)
rma.mh.res <- rma.mh(ai=a, bi=n1-a, ci=c, di=n0-c, data=dat)
rma.mh.res

結果は、estimate, ci.lb, ci.ub。
均質性の検定は、Test for Heterogeneity。
有意性の検定は、Cochran-Mantel-Haenszel Test。
Breslow-Day検定は、Tarone’s Test for Heterogeneity。

それぞれチェック。

> rma.mh.res
Fixed-Effects Model (k = 17)
Test for Heterogeneity:
Q(df = 16) = 21.4811, p-val = 0.1607
Model Results (log scale):
estimate      se     zval    pval    ci.lb    ci.ub
-0.2464  0.0520  -4.7370  <.0001  -0.3484  -0.1445
Model Results (OR scale):
estimate   ci.lb   ci.ub
0.7816  0.7058  0.8655
Cochran-Mantel-Haenszel Test:    CMH = 22.2667, df = 1,  p-val < 0.0001
Tarone's Test for Heterogeneity: X^2 = 21.7143, df = 16, p-val = 0.1527

フォレストプロットを描くのも簡単。

forest(rma.mh.res)

まとめ

マンテル・ヘンツェルの方法でオッズ比を統合する方法を紹介した。

すべての試験で、2x2の分割表が得られて、均質性の検定で、不均質の結論がでなければ、マンテル・ヘンツェルの方法がおすすめ。

ただし、交絡要因を調整しなくていい、ランダム割付の試験に限る。

交絡要因の調整が必要な観察研究では、調整済みオッズ比と95%信頼区間から標準誤差を求めて、漸近分散法で統合するのがいい。

関連記事

参考書籍

丹後俊郎著 メタ・アナリシス入門 朝倉書店
3.1 2×2分割表 3.1.3 Mantel-Haenszelの方法―オッズ比
付録B.5 アルゴリズム3.3 mhor.s

メタ・アナリシス入門―エビデンスの統合をめざす統計手法 (医学統計学シリーズ)

新版はこちら

新版 メタ・アナリシス入門 ─エビデンスの統合をめざす統計手法─ (医学統計学シリーズ)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメント一覧 (1件)

コメントする

目次