メタ分析

メタ分析 (meta-analysis) とは、複数の研究の結果を統合 (pool) し分析すること、またはそのための手法や統計解析のことです。 システマティックレビューで文献をくまなく探し、その結果をメタ分析することが典型的な方法です。

メタ分析については、R には多くのパッケージがあり、公式サイト中にも Michael Dewey によるメタ分析のパッケージの紹介ページがあります。

https://cran.r-project.org/web/views/MetaAnalysis.html

また、Minds 診療ガイドライン作成マニュアル2020 ver. 3.0 には、複数の事例とサンプルコードが解説されています。

R以外のソフトウェアとしては、メタ分析を推奨している Cochrane から RevMan をいうソフトウェアを無償で提供しています。

メタ分析は、参照する文献が用いている統計手法によって違いが出てきます。

  1. システマティックレビューによって抽出された論文からデータを取得する
  • データがない場合は、コレスポンディングオーサーにデータを請求する
  1. 固定効果、ランダム効果を選択する、あるいは weight を計算する
  2. データを統合 (pool) する
  3. 異質性 (heterogeneity) を検証する
  4. 出版バイアスを検証する

これを一度に行ってくれるのが meta ライブラリです。 メタ分析は、対象となる統計手法に応じて統合 (pool) 方法も変わります。 meta は、以下のような関数を提供しています。

  • metacont: 2群の連続変数
  • metabin: 2群の2値変数
  • metainc: 2群の発症 (incidence) 率
  • metacor: 相関係数 (1群)
  • metamean: 平均値 (1群)
  • metaprop: proportion (1群) 引数 event(イベント数) と n(観察数)
  • metarate: 発症 (incidence) 率 (1群) 引数 event(イベント数)と person time

比率 (proportion) のメタ分析

実際の論文をもとに、比率 (proportion) のメタ分析を行ってみましょう。 ここで、比率 (proportion) とは、ある母集団に対して特定の特徴を持った人の比率です。

なお、rate と proportion の用語は、ここでは深入りしません。

Abate SM, Ahmed Ali S, Mantfardo B, & Basu B (2020). Rate of Intensive Care Unit admission and outcomes among patients with coronavirus: A systematic review and Meta-analysis. PloS one, 15(7), e0235653. https://doi.org/10.1371/journal.pone.0235653

コロナウィルス感染患者の ICU admission のデータです。

library(readr)
dfMeta <- read_csv("https://ndownloader.figshare.com/files/23167073")
## 
## ─ Column specification ────────────────────────────
## cols(
##   Author = col_character(),
##   year = col_double(),
##   event = col_double(),
##   sample = col_double(),
##   country = col_character(),
##   corona = col_character(),
##   `Study design` = col_character()
## )
dfMeta <- na.omit(dfMeta)

関数

  • na.omit: NA のある行を削除する。

元データの最後の行は空データで、おそらく元々は統合データを格納するために準備してあったと思われます。 この行は不要なので、NA データのある行を削除しました。

R では、データの入っていないことを表す手段が複数あります。NULL や NA です。NA などがあるとエラーが出やすくなります。

meta ライブラリの metaprop 関数を使います。

library(meta)
## Loading 'meta' package (version 4.18-2).
## Type 'help(meta)' for a brief overview.
mpResult <- metaprop(data = dfMeta, 
                event = event, 
                n = sample, 
                studlab = paste(Author, year))

関数

  • paste: 文字列をつなげる。文字列間 (sep) にはデフォルトで空白が追加される。 ここでは、Author と year を空白でつなげている。

変数と引数

  • mpResult は、metaprop の結果を格納します。MetaProp から mp をとって mpResult と命名しました。
  • 引数 data は、データフレーム dfMeta としました。
  • 引数 event は、データフレーム中の event (イベント数) 列を指定しました
  • 引数 n は、データフレーム中の sample (観測数) 列を指定しました
  • 引数 studlab は、データフレーム中の Author (著者) 列と year (発行年) をつなげたものを指定しました

結果を見て見ます。

mpResult
##                       proportion           95%-CI
## Liu et al 2020            0.1410 [0.0726; 0.2383]
## Xu et al 2020             0.0323 [0.0039; 0.1117]
## Cao et al 2020            0.1765 [0.1081; 0.2645]
## Chen et al 2005           0.4925 [0.3682; 0.6176]
## Chen et al 2020           0.2323 [0.1533; 0.3279]
## Chan et al 2003           0.3391 [0.2535; 0.4333]
## Chen et al 2020           0.0884 [0.0562; 0.1307]
## Choi et al 2003           0.2584 [0.2070; 0.3153]
## Du et al 2020             0.4679 [0.3717; 0.5659]
## Guan et al 2020           0.0500 [0.0379; 0.0646]
## Guan et al 2020           0.0623 [0.0509; 0.0753]
## Huang et al 2020          0.3171 [0.1808; 0.4809]
## Lei et al 2020            0.4412 [0.2719; 0.6211]
## Ling et al 2020           0.1633 [0.0732; 0.2966]
## Pan et al 2020            0.0784 [0.0455; 0.1242]
## Wang et al 2020           0.2609 [0.1899; 0.3424]
## Wu et al 2020             0.2637 [0.2042; 0.3303]
## Yang et al 2020           0.0732 [0.0552; 0.0949]
## Zhou et al 2020           0.7800 [0.6404; 0.8847]
## Grasselli et al 2020      0.8033 [0.7829; 0.8225]
## Zangrillo et al 2020      0.1041 [0.0825; 0.1292]
## Lodigiania et al 2020     0.1598 [0.1248; 0.2001]
## Ghaleb et al 2016         0.8519 [0.6627; 0.9581]
## Fahad et al 2016          0.6250 [0.2449; 0.9148]
## Halim et al 2016          0.4375 [0.2636; 0.6234]
## Garbati et al 2016        0.1739 [0.0495; 0.3878]
## Ghamdi et al 2016         0.3725 [0.2413; 0.5192]
## Saad et al 2014           0.7000 [0.5787; 0.8038]
## Yaseen et al 2014         0.8333 [0.5159; 0.9791]
## Lew et al 2003            0.2312 [0.1745; 0.2960]
## Young et al 2020          0.1111 [0.0138; 0.3471]
## Docherty et al 2020       0.1491 [0.1442; 0.1541]
## Arentz et al 2020         0.8095 [0.5809; 0.9455]
## Bialek et al 2020         0.2382 [0.2018; 0.2777]
## Petrilli,  et al 2020     0.4407 [0.4102; 0.4715]
## Richardson et al 2020     0.1416 [0.1285; 0.1555]
## Bhatraju et al 2020       0.5000 [0.2912; 0.7088]
## 
## Number of studies combined: k = 37
## 
##                      proportion           95%-CI
## Fixed effect model       0.1900 [0.1858; 0.1943]
## Random effects model     0.2834 [0.2057; 0.3765]
## 
## Quantifying heterogeneity:
##  tau^2 = 1.6165; tau = 1.2714; I^2 = 99.0% [98.8%; 99.1%]; H = 9.83 [9.26; 10.44]
## 
## Test of heterogeneity:
##        Q d.f. p-value             Test
##  3481.43   36       0        Wald-type
##  4446.74   36       0 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Clopper-Pearson confidence interval for individual studies

結果においては、異質性 (heterogeneity) 検定の結果が示されています。 Q, \(\tau^2\), \(I^2\) などが異質性の指標です。

  • \(I^2\): 0 〜40%(重要でない異質性),30 〜60%(中等度の異質性),50 〜90%(大きな異質性),75 〜100%(高度の異質性)
forest(mpResult)

あまり美しくないので、別のライブラリを試して見ます。

出版バイアス Harbord’s test

これまで、研究はポジティブな結果が出た時に発表される傾向がありました。これはメタ分析を行う際にはバイアスとなってしまいます。これを出版バイアスと言います。多くの論文では、ファンネルプロットを作成して、視覚的に出版バイアスがあるかどうかを確認するに止まります。

しかしながら、出版バイアスを検証する統計もあります。ここでは、実際の論文を用いて検定してみましょう。

Shigemura T, Baba Y, Murata Y, Yamamoto Y, Shiratani Y, Hamano H, & Wada Y (2020) Is a portable accelerometer-based navigation system useful in total hip arthroplasty?: A systematic review and meta-analysis. Orthopaedics & Traumatology: Surgery & Research.

ライブラリ meta にもありますが、対象となるのが2値変数のみのようです。 そこで、より基本的で広範囲に適用可能な metafor で行ってみます。 metafor ライブラリは、R におけるメタ分析の基本的なライブラリで、他のメタ分析ライブラリは内部で metafor をインポートしているようです。

meta がイベント数などを指定するのに対し、metafor は、平均値と標準偏差を指定します。

dfHarbord <- read.table(text = "study,M1,SD1,N1,M2,SD2,N2,weight
Hayashi,2.7,2.2,63,4.8,3.6,30,0.147
Tanino,2.8,2.3,115,3.7,2.7,106,0.315
Okamoto,6,4.5,55,9,6.8,55,0.75
Hayashi,2.7,2.2,63,4.8,3.6,30,0.147
Tanino,2.8,2.3,115,3.7,2.7,106,0.315", header = TRUE, sep=",")
library(metafor)
rmaResult <- rma(m1i=M1, 
                 sd1i=SD1, 
                 n1i=N1, 
                 m2i=M2, 
                 sd2i=SD2, 
                 n2i=N2, 
                 data=dfHarbord, 
                 measure="MD")
rmaResult
## 
## Random-Effects Model (k = 5; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.2737 (SE = 0.4106)
## tau (square root of estimated tau^2 value):      0.5232
## I^2 (total heterogeneity / total variability):   50.58%
## H^2 (total variability / sampling variability):  2.02
## 
## Test for Heterogeneity:
## Q(df = 4) = 7.4304, p-val = 0.1148
## 
## Model Results:
## 
## estimate      se     zval    pval    ci.lb    ci.ub 
##  -1.4351  0.3455  -4.1541  <.0001  -2.1122  -0.7580  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • \(\tau^2\) = 0.6537 (論文中では 0.67)
  • Q (\(\chi^2\)) = 5.0201 (論文中では 5.02、Qとchi2は同じものです。)
  • Qのp値 = 0.0813 (論文中では 0.08)
  • \(I^2\) = 59.59% (論文中では 60%)

以上、\(\tau^2\) 値が少し異なりますが、おおむね同じ結果かと思います。

ファンネルプロットを描いてみます。

funnel(rmaResult)

regtest(rmaResult)
## 
## Regression Test for Funnel Plot Asymmetry
## 
## Model:     mixed-effects meta-regression model
## Predictor: standard error
## 
## Test for Funnel Plot Asymmetry: z = -2.7169, p = 0.0066
## Limit Estimate (as sei -> 0):   b = 0.1011 (CI: -0.9197, 1.1218)

これに対し、Harbord検定を行ったところ、

  • z = -2.2331,
  • p = 0.0255

となり、出版バイアスが考えられます。