システマティックレビューで組み入れ研究が10本前後まで絞られると、次に手が止まるのが研究ごとの偏りの評価です。効果推定値が0.70と0.55のように割れている時、その差が治療の効果の違いなのか、盲検化や対象者の集め方の違いなのかは、要約統計量を眺めるだけでは分かれません。
そこで使われるのがランダム化試験のRoB 2、非ランダム化研究のROBINS-I、診断精度研究のQUADAS-2という三つの評価ツールで、どれも研究の良し悪しを点数化するのではなく、偏りがどの経路から入って推定値をどちらへ動かすかを経路ごとに判定します。この記事では、三つのツールが拾う偏りをランダムに生成したデータセットで推定値へ反映させ、判定結果を解析へどう持ち帰るかまで扱います。
判定の単位は研究全体ではなく個別の推定値
Sterneら(2019)がRoB 2で明示しているのは、判定を付ける単位が「特定のアウトカムに対する特定の効果推定値」であることです。同じ試験でも主要アウトカムの死亡と副次アウトカムの自覚症状では判定が変わりえるため、三つのツールに共通する前提は、判定の対象が論文ではないという点にあります。
この単位の取り方は、レビューの作業量にも直接効いてきます。論文1本につき判定1個という進め方をすると、主要アウトカムでは低リスクだが患者報告アウトカムでは高リスク、という状況が1つの判定に潰れてしまうため、メタ解析で感度分析を行う時に研究を分ける根拠がなくなります。
ここでは偏りの大きさを、対数オッズ比のズレとして扱います。観察される推定値と真の値の関係を式で書くと、次のようになります。
$$\log \widehat{\mathrm{OR}}_{\mathrm{obs}} = \log \mathrm{OR}_{\mathrm{true}} + b \tag{1}$$
式(1)は、観察された対数オッズ比が、真の対数オッズ比に偏りの量を足したものになる、という関係を表します。$\widehat{\mathrm{OR}}_{\mathrm{obs}}$はデータから推定したオッズ比、$\mathrm{OR}_{\mathrm{true}}$は真のオッズ比、$b$は評価ツールが拾おうとしている偏りの大きさと向きです。
この判定区分が示すのは$b$が0でないことだけで、$b$が正か負かまでは決まりません。偏りの向きを述べるには各ドメインの内容へ戻る必要があり、符号は判定表の外側にある情報です。
ランダム化試験で盲検化が崩れた時の動き方
RoB 2は、ランダム化過程、意図された介入からの逸脱、結果データの欠測、アウトカムの測定、報告結果の選択という5つのドメインを持ち、それぞれに低リスク、いくらか懸念あり、高リスクのどれかを付けたうえで全体の判定へまとめます。ドメインの中で実際の解析ともっとも関わるのは4番目のアウトカム測定で、ここはランダム化が成功していても偏りが入る唯一の経路にあたります。
この経路を数値で見るために、各群1,000例、対照群のイベント割合0.30、真のオッズ比0.67を置いたランダムに生成したデータセットを用意しました。ランダム化は成功している設定なので交絡はなく、違いを入れたのはアウトカムの記録だけで、治療群では実際に起きたイベントの15%が記録されないようにしています。
set.seed(42)
n_arm <- 1000; p_control <- 0.30; true_log_or <- -0.40
detect_treated <- 0.85 # 治療群のイベントが記録される割合
treatment <- rep(c(0, 1), each = n_arm)
event_true <- rbinom(2 * n_arm, 1, plogis(qlogis(p_control) + true_log_or * treatment))
recorded <- ifelse(treatment == 1, rbinom(2 * n_arm, 1, detect_treated), 1)
event_observed <- event_true * recorded
fit_blinded <- glm(event_true ~ treatment, family = binomial)
fit_unblinded <- glm(event_observed ~ treatment, family = binomial)
summ <- function(fit) c(or = exp(coef(fit)[[2]]), exp(confint.default(fit)[2, ]))
round(rbind(blinded = summ(fit_blinded), unblinded = summ(fit_unblinded)), 3)
c(events_true = sum(event_true[treatment == 1]), events_recorded = sum(event_observed[treatment == 1]))
#> or 2.5 % 97.5 %
#> blinded 0.701 0.573 0.857
#> unblinded 0.555 0.450 0.684
#> events_true events_recorded
#> 225 187
この出力を見ると、治療群で実際に起きたイベントは225件あり、そのうち記録に残ったのが187件、見逃されたのが38件でした。この38件の差だけで、オッズ比は0.701から0.555へ動き、95%信頼区間も0.573〜0.857から0.450〜0.684へ移っています。
ここで注意が必要なのは、見逃しが治療群だけに起きているために、偏りが効果を過大に見せる側へ働いている点です。オッズ比が0.792倍、つまり約2割小さい側へズレているのに、区間の幅はほとんど変わらないため、精度の指標を見ても偏りには気づけません。
同じ理由から、$b$が0でない限り、症例数を10倍にしても推定値は偏った位置へ収束していくため、標本サイズを増やしてもこのズレは解決せず、大規模試験ならバイアスリスクが低いという読み方も成り立ちません。

非ランダム化研究で交絡から評価を始める順序
ROBINS-Iが持つドメインは、交絡、対象者の選択、介入の分類、意図された介入からの逸脱、欠測データ、アウトカムの測定、報告結果の選択の7つで、Sterneら(2016)はこのうち最初の3つを介入前および介入時点の要因として区別しています。全体判定は最も深刻なドメインの判定と同じか、それより深刻な側になるため、交絡が深刻と判定されれば、その後のドメインがどれだけ良くても全体判定は深刻より良くなりません。
交絡の入り方を確認するため、3,000例の非ランダム化研究を想定したランダムに生成したデータセットを用意しました。重症例ほど治療を受けやすく、かつ重症例ほどイベントが多いという、適応による交絡が起きる設定にしてあります。
n_obs <- 3000
severe <- rbinom(n_obs, 1, 0.35) # 交絡因子: 重症かどうか
treat_obs <- rbinom(n_obs, 1, plogis(-0.50 + 1.20 * severe))
event_obs <- rbinom(n_obs, 1, plogis(qlogis(p_control) + true_log_or * treat_obs + 1.00 * severe))
fit_crude <- glm(event_obs ~ treat_obs, family = binomial)
fit_adjusted <- glm(event_obs ~ treat_obs + severe, family = binomial)
round(rbind(crude = summ(fit_crude), adjusted = summ(fit_adjusted)), 3)
round(tapply(severe, treat_obs, mean), 3)
#> or 2.5 % 97.5 %
#> crude 0.907 0.780 1.054
#> adjusted 0.685 0.582 0.807
#> 0 1
#> 0.220 0.489
この出力からは、治療を受けた群の重症割合が48.9%、受けなかった群では22.0%となり、置いた設定どおり重症例が治療群へ偏ったことが分かります。この偏りを調整しない粗推定値のオッズ比は0.907で95%信頼区間は0.780〜1.054、重症の有無を調整した推定値は0.685で0.582〜0.807となり、真の値0.67に近いのは調整後の方です。
この粗推定値は1へ近づく側、つまり治療を実際より不利に見せる側へ動いています。先ほどの測定の偏りとは向きが逆で、バイアスリスクが高い研究の結果が常に効果を大きく見せるわけではありません。
この向きの違いを踏まえて、ROBINS-Iではドメインごとの判定に加えて、偏りの予測される方向を記録する欄が用意されています。方向まで記録しておくと、深刻と判定された研究を除いた感度分析で要約推定値がどちらへ動くはずかを事前に述べられるようになり、結果を見てから解釈を作る順序を避けられます。
判定区分に危機的と情報なしを置く理由
ROBINS-Iは低リスク、中等度、深刻、危機的の4段階に加えて、情報が足りず判定できない場合を別区分として持ちます。Sterneら(2016)はこれを仮想的な目標試験と比べる枠組みの中に置いており、判定区分そのものがRoB 2と異なる部分です。
この4段階の基準点になっているのが、同じ研究課題に対してランダム化試験を実施できたとしたら、という仮想的な設定です。低リスクという判定は「よく実施された観察研究として妥当」ではなく「よく実施されたランダム化試験と同程度」を意味するため、ROBINS-Iで低リスクが付く研究は実際にはほとんど出てきません。
もっとも、危機的という区分を使うかどうかは判断に迷う場面が多く残ります。交絡因子が測定されていない研究を全て危機的にするとメタ解析に残る研究がなくなるため、実際の研究では、未測定の交絡因子が結論を覆すほどの大きさを持つかどうかを、測定されている因子の効果の大きさから見積もって判断することになります。
対象者の集め方が診断精度を変える経路
疾患群と非疾患群を別々の集団から集めるデザインでは診断オッズ比が大きく出ることを、Lijmerら(1999)が実証的に示しています。Whitingら(2011)がQUADAS-2のドメインの先頭に対象者の選択を置いたのはこの経路に対応するためで、残る3つは指標検査、参照基準、フローとタイミングです。
同じ経路を数値で確かめるために、カットオフ1.5、疾患群300例、非疾患群900例という条件を固定したうえで、対象者の集め方だけが異なる2つのデータセットを用意しました。一方は軽症例も含む連続症例集積、もう一方は重症の確診例と健常者だけを両端から集めたもので、検査そのものとカットオフは共通です。
cutoff <- 1.5
severe_case <- rbinom(300, 1, 0.40)
marker_case_series <- rnorm(300, ifelse(severe_case == 1, 2.6, 1.2), 1)
marker_noncase_series <- rnorm(900, 0.4, 1)
marker_case_gate <- rnorm(300, 2.6, 1); marker_noncase_gate <- rnorm(900, 0.0, 1)
acc <- function(case, noncase, se = mean(case > cutoff), sp = mean(noncase <= cutoff))
c(sens = se, spec = sp, DOR = (se / (1 - se)) / ((1 - sp) / sp))
round(rbind(series = acc(marker_case_series, marker_noncase_series),
gate = acc(marker_case_gate, marker_noncase_gate)), 3)
#> sens spec DOR
#> series 0.533 0.888 9.041
#> gate 0.820 0.933 63.778
この2つを比べると、連続症例集積では感度0.533、特異度0.888となったのに対し、両端から集めた方では感度0.820、特異度0.933へ上がりました。感度と特異度を1つの指標にまとめた診断オッズ比で比べると9.041と63.778で、対象者の集め方を変えただけで7.05倍の開きが出ています。
その診断オッズ比は、感度と特異度から次のように計算しています。
$$\mathrm{DOR} = \frac{\mathrm{Se}/(1-\mathrm{Se})}{(1-\mathrm{Sp})/\mathrm{Sp}} \tag{2}$$
式(2)は、疾患ありの人が陽性になるオッズを、疾患なしの人が陽性になるオッズで割った値が診断オッズ比になる、という計算を表します。$\mathrm{Se}$は感度、$\mathrm{Sp}$は特異度です。
この7.05倍の開きを作ったのは検査の性能の違いではなく、判別が難しい軽症例と鑑別が問題になる非疾患者を両方とも対象から外したことで、カットオフの前後に重なる部分が薄くなり、見かけの性能が上がっただけです。

バイアスリスクと適用可能性を分ける判定
QUADAS-2は最初の3ドメインについて、バイアスリスクとは別に適用可能性を判定します。Whitingら(2011)はこの2つを混ぜないよう設計しており、研究の実施が正しくても、レビューの対象としている患者集団や検査条件と合っていなければ、適用可能性の側で懸念ありと判定します。
この区別は、先ほど両端から集めたデータによく表れます。参照基準の当てはめ方や検査の実施手順に問題がなければバイアスリスクの側は懸念なしになりうる一方で、外来で鑑別が問題になる患者へ使う検査の評価としては対象集団が合っておらず、適用可能性の側で懸念ありと判定される状況です。
もう一点、適用可能性の懸念は研究の欠陥ではなく、レビューの研究目的との距離を示すものです。これを偏りの判定と足し合わせて研究を並べ替えると、質の低い研究と目的に合わない研究が同じ扱いになり、除外の理由を説明できなくなります。
三つのツールの使い分けと避けたい進め方
ランダム化された試験でも、実際に治療を受けた群で比べる解析のように、ランダム化以降の構造が観察研究へ近づく場面があります。RoB 2は割付どおりに介入を受けた場合の効果についても判定経路を用意しているため、こうした解析もRoB 2の枠内で扱い、使い分けの基準は研究デザインに置きます。
その一方で、三つのツールはドメインの数も判定区分も揃っておらず、RoB 2には危機的に相当する区分がなく、QUADAS-2は適用可能性を別軸に置いています。判定を数値化して平均した値は何の量も推定していない指標になるため、この進め方は推奨できません。
そのうえで、低リスクの研究だけで要約推定値を計算し直し、全研究での値と比べれば、偏りが結論を変えるかどうかをデータで示せます。ドメイン単位の判定を保ったままメタ解析の層別因子として使う方法を勧めます。
研究での位置づけと報告に必要な記載
三つのツールが拾おうとしているドメインは、実証研究に裏付けられています。Savovićら(2012)は多数のメタ解析を横断した検討で、割付の隠蔽が不十分な試験と盲検化されていない試験で介入効果が誇張される傾向を示しており、その影響は主観的な判断を含むアウトカムで大きく出ていました。
ただし、偏りの向きが常に一方向へ決まるとは言えない場面も残ります。Pageら(2016)がメタ疫学研究を統合した結果では、設計上の特徴と推定値のズレの関係は一様ではなく、アウトカムの主観性によって大きさも向きも変わるため、バイアスリスクが高い研究を一律に効果過大として扱う読み方は支持されません。
一方、ドメインごとの判定区分に加えて、その判定を支えた論文中の記述と、判定者間で意見が割れた場合の解決方法まで書いておけば、読者が別の判定に至った時に、どこで解釈が分かれたのかをたどれます。報告の側で求められるのは、判定そのものより判定の根拠です。
データの中からは見えない偏りの有無
ここまでに出したどの推定値も、単独では妥当な結果に見え、信頼区間の幅や有意性からも区別が付きません。偏りの有無はデータの中からは見えず、研究の実施方法の記述に戻るしかないという点が、評価ツールを使う理由にあたります。
この見えなさは、複数の偏りが同時にある研究でいっそう強まります。向きの異なる偏りが打ち消し合うと、見かけ上は真の値に近い推定値が出るため、判定が低リスクでないことと推定値が真の値から離れていることは対応しません。
この2枚の図を再現するコードは、上で作った変数をそのまま使います。図1は4つの当てはめ結果を並べたもの、図2は診断精度の例で2群の分布の重なりを描いたものです。
fits <- list(fit_blinded, fit_unblinded, fit_crude, fit_adjusted)
ci <- t(sapply(fits, function(f) exp(confint.default(f)[2, ])))
plot(sapply(fits, function(f) exp(coef(f)[[2]])), 4:1, log = "x", xlim = range(ci),
pch = 15, yaxt = "n", xlab = "Odds ratio", ylab = "")
segments(ci[, 1], 4:1, ci[, 2], 4:1); abline(v = exp(true_log_or), lty = 2)
plot(density(marker_noncase_series), xlim = c(-4, 7), ylim = c(0, 0.45),
main = "", xlab = "Test marker", ylab = "Density")
lines(density(marker_case_series), lwd = 2)
lines(density(marker_noncase_gate), lty = 2)
lines(density(marker_case_gate), lty = 2, lwd = 2)
abline(v = cutoff, col = "grey40")
ここで読み取るのは、感度と特異度の数値そのものではなく、カットオフ付近にどれだけの人が分布しているかです。重なりが薄い設定では、カットオフを多少動かしても感度と特異度がほとんど変わらないため、検査の性能が安定しているように見えてしまいます。
判定結果を自分の解析へ持ち帰る時
三つのツールはどれも、判定を総合点へ潰さない形で設計されています。研究ごとの偏りの評価で決まるのは、どの研究を信じるかではなく、要約推定値をどの範囲で述べられるかです。
その構造を踏まえて、深刻と判定された研究を除いた感度分析を行うのか、ドメインを層別因子として要約推定値を比べるのかを事前に決めておけば、向きの異なる偏りが混ざっていても、結果を見てから除外基準を作る順序を避けられます。実際の解析で先に決めておきたいのは、判定をどう使うかという解析計画の側です。
そのため、実際のデータでは、判定区分だけでなく、組み入れ研究のアウトカムの性質、未測定交絡の見積もり、感度分析の設計まで含めて決めることになり、Dr.データサイエンスでは、こうした解析方針のご相談を承っています。
参考文献
- Sterne JAC, Savović J, Page MJ, et al. RoB 2: a revised tool for assessing risk of bias in randomised trials. BMJ. 2019;366:l4898.
- Sterne JA, Hernán MA, Reeves BC, et al. ROBINS-I: a tool for assessing risk of bias in non-randomised studies of interventions. BMJ. 2016;355:i4919.
- Whiting PF, Rutjes AWS, Westwood ME, et al. QUADAS-2: a revised tool for the quality assessment of diagnostic accuracy studies. Annals of Internal Medicine. 2011;155(8):529-536.
- Savović J, Jones HE, Altman DG, et al. Influence of reported study design characteristics on intervention effect estimates from randomized, controlled trials. Annals of Internal Medicine. 2012;157(6):429-438.
- Lijmer JG, Mol BW, Heisterkamp S, et al. Empirical evidence of design-related bias in studies of diagnostic tests. JAMA. 1999;282(11):1061-1066.
- Page MJ, Higgins JPT, Clayton G, Sterne JAC, Hróbjartsson A, Savović J. Empirical evidence of study design biases in randomized trials: systematic review of meta-epidemiological studies. PLoS One. 2016;11(7):e0159267.


