機能性表示食品のための信号機プロット
- アウトライン
-
- 作成日: 2025/11/19
- 更新日: –
はじめに
機能性表示食品の届出において、研究の質を評価する際、最も重要な概念が Risk of Bias (バイアスリスク) です。
しかし、複数のバイアス項目を論文ごとに文章で列挙していくと、読む側にとっては非常に分かりづらく、比較も直感的ではありません。
こうした課題を解決するために開発されたのが信号機プロット (Traffic light plot) です。
今回は、信号機プロットの作成方法を紹介します。
信号機プロットとは?
信号機プロットとは、研究ごとのRisk of Bias (バイアスリスク) を信号機の3色 (赤、黄、緑) に対応させて一覧表示する可視化手法です。
イメージ的には・・・
- 緑 (Low risk): バイアスの懸念が低い
- 黄 (Some concerns / Unclear): バイアスの懸念がある、情報不足
- 赤 (High risk): バイアスが高い、方法に問題あり
このように色分けして可視化します。
一つ一つの研究について、「どのバイアスが安全で、どこが危険なのか」を視覚的に理解できるため、メタアナリシスやシステマティックレビューで非常に広く使われています。
2.1 なぜ信号機プロットが有効なのか?
信号機プロットが強力なのは、以下のような “視覚化のメリット” を最大限に活かしているためです。
① 一目で危険/注意/安全がわかる
色を見るだけで状況が理解できるため、文章で説明するより遥かに直感的です。
② 複数研究を横断的に比較できる
10〜50件の研究も横に並べるだけでパターンが読み取れる。
③ レビューの透明性が高まる
各評価の根拠を色で示すため、読者は “どこに弱点があるか” を明確に把握できます。
④ Cochrane のサポートにより国際標準になった
Cochrane RoB1 → RoB2 において導入され、現在は robvisによって定着しました。
2.2 RoB2と信号機プロット
Risk of Bias (バイアスリスク) を評価するツールとしてCochrane が開発したversion 2 of the Cochrane risk-of-bias tool for randomized trials (RoB2) が有名です。
RoB2は、バイアスの発生可能性を5つの領域 (Domain) と総合評価 (Overall) から判断します。
D1: ランダム化過程のバイアス
→ 割付方法、割付隠蔽、ベースラインバランス
D2: 介入の逸脱によるバイアス
→ 盲検の有無、介入の遵守、解析集団の扱い(例:ITTかどうか)
D3: 欠測データによるバイアス
→ 欠測の存在、理由、割合、影響
D4: アウトカム測定のバイアス
→ 測定者の盲検、評価方法の妥当性
D5: 選択的アウトカム報告のバイアス
→ プロトコル/事前登録と実際の解析の一致
Overall: 総合的なバイアスリスク
「最も高いバイアス領域」が Overall も決める(Worst-domain rule)
RoB2を用いる最大の利点は、評価の透明性と一貫性を高められる点にあります。まず、Cochrane が開発した国際標準ツールであるため、学術雑誌や査読者から広く受け入れられやすいというメリットがあります。
また、シグナル質問に基づいて判断するため、評価の根拠を明確に示すことが可能です。この結果、メタアナリシスにおける統合結果の信頼性を強化する役割を果たします。さらに、判断基準が体系化されているため、重要な情報の見落としや評価者の主観が入り込むことを防げます。
評価の過程が構造化されていることで、複数のレビュアーが独立に評価した場合でも結果を照合しやすく、整合性を高めることができます。
こうした特徴から、RoB2 は臨床研究の質評価において、より客観的で再現性の高い判断を可能にします。
最終的に、研究全体の信頼性と透明性を高める手段として、RoB2 は現在の標準的なバイアス評価ツールとして広く活用されています。
それでは、実際に信号機プロットを作成していきましょう。
robvis パッケージを使うと簡単です。
# ======================================
# ライブラリ
# ======================================
library(robvis)
library(tibble)
# ======================================
# ROB2のサンプルデータ(5研究 × 5ドメイン + Overall)
# ======================================
rob2_sample <- tribble(
~Study, ~Randomization, ~Deviations, ~MissingData, ~OutcomeMeasurement, ~SelectionReporting, ~Overall,
"Study 1", "Low", "Low", "Low", "Low", "Low", "Low",
"Study 2", "Some concerns", "High", "Low", "Some concerns", "Low", "High",
"Study 3", "Low", "Low", "Low", "Low", "Low", "Low",
"Study 4", "High", "High", "High", "Some concerns", "High", "High",
"Study 5", "Some concerns", "Low", "Low", "Low", "Some concerns", "Some concerns"
)
# ======================================
# Traffic light plot(信号機プロット)
# ======================================
rob_traffic_light(
data = rob2_sample,
tool = "ROB2"
出力は以下の通りです。

これで、Risk of Bias (バイアスリスク) を視覚的に確認しやすくなりましたね。
RoB2は、一般的にひろく用いられているので簡単に可視化ができますが、機能性表示食品の場合は評価する項目が多いため、少しだけ工夫が必要です。
機能性表示食品における信号機プロットの作成方法
機能性表示食品におけるRisk of Bias (バイアスリスク) の評価をまとめてみます。
各ドメインは「高 (-2)」、「中/疑い (-1)」、「低 (0)」の3段階で評価され、8項目の合計点を用いて総合判定 (Overall) を行います。
総合判定 (Overall) は、
-8点以下: 高 (−2)
-7点以上−5点以下: 中 (−1)
-4点以上0点以下: 低 (0)
で評価します。
各ドメインの内容をみていきましょう。
- 選択バイアス (Randomization / Allocation concealment)
- ランダム化 (Randomization)
高 (−2) 出生日、個人ID、登録日の偶数/奇数などによる不適切な割付、または意図的な割付が確認された場合 中 (−1) ランダム化に関する記載はあるが、適切か疑わしい場合 低 (0) ランダム化方法の記載が確認され、適切と判断できる場合 - 割付の隠蔵 (Allocation concealment)
高 (−2) 完全に隠蔵されていないと思われる方法 中 (−1) 隠蔵に関する記載はあるが、具体性に欠け判断が難しい場合 低 (0) 中央登録などにより、参加者・実施者ともに割付を予測できなかった場合
- ランダム化 (Randomization)
- 盲検性バイアス (Blinding of participants / outcome assessors)
高 (−2) 盲検化が確保されていない 中 (−1) 盲検化について疑いがある、情報が不十分 低 (0) 参加者・評価者ともに盲検化が適切に確保されている ※参加者とアウトカムの両方を別々に評価
- 症例減少バイアス (ITT・FAS・PPS、欠測データ)
- 解析集団 (ITT / FAS / PPS)
高 (−2) PPS解析で、ベースラインのランダム化バランスが維持されている説明(または群間比較の有意差なし)が無い場合 中 (−1) PPS解析で、ランダム化バランスの説明あり 低 (0) ITT または FAS 解析が行われている場合 - 不完全アウトカムデータ (Missing outcome data)
高 (−2) 欠測データが有効性評価に影響を及ぼすと疑われる場合 中 (−1) 影響の判断に必要な情報が不足している場合 低 (0) 欠測が無い、または有効性に影響しない程度の欠測の場合
- 解析集団 (ITT / FAS / PPS)
- 選択的アウトカム報告 (Selective outcome reporting)
高 (−2) 研究計画書または事前登録で規定された方法と異なる解析・報告が行われている場合 中 (−1) 関連情報が不十分、研究計画書が入手できない、事前登録がない場合 低 (0) 計画書に沿った方法でアウトカムが解析・報告されている場合 - その他のバイアス
高 (−2) デザイン上の潜在的なバイアスや重大な問題が認められる場合 中 (−1) 軽度のバイアス、またはバイアスの疑いがある場合 低 (0) その他のバイアスが認められない場合
このようの5つのドメインで、8個の評価を行います。
これをRoB2に合わせることも可能ですが、純粋に8個を可視化していきましょう。
3.1 データセットの準備
データセットがないので、ひとまず乱数で生成します。
信号機プロットは、tidyverseで作るのでパッケージを読みこんでおきます。
# ===============================
# ライブラリ読み込み
# ===============================
library(tidyverse)
# ===============================
# サンプルデータ (10 Study)
# アルゴリズムに基づいた8項目を作成
# ===============================
set.seed(123)
study_names <- paste("Study", 1:10)
domain_names <- c(
"Randomization", "Allocation",
"Participants", "OutcomeEvaluator",
"ITT_FAS_PPS", "MissingData",
"SelectiveReporting", "OtherBias"
)
# -2 (高), -1 (中), 0 (低) からランダム生成
bias_matrix <- replicate(
length(domain_names),
sample(c(-2, -1, 0), 10, replace = TRUE)
)
colnames(bias_matrix) <- domain_names
# データフレーム化
bias_data <- data.frame(Study = study_names, bias_matrix)
作成したデータを確認します。
> View(bias_data)
| Study | Randomization | Allocation | Participants | OutcomeEvaluator | ITT_FAS_PPS | MissingData | SelectiveReporting | OtherBias |
|---|---|---|---|---|---|---|---|---|
| Study 1 | 0 | -1 | -2 | -2 | -1 | -2 | -2 | -1 |
| Study 2 | 0 | -1 | -2 | 0 | 0 | -2 | 0 | 0 |
| Study 3 | 0 | -2 | 0 | 0 | 0 | 0 | -2 | 0 |
| Study 4 | -1 | -1 | -1 | -2 | -2 | -2 | 0 | -2 |
| Study 5 | 0 | 0 | 0 | 0 | 0 | -1 | -1 | -1 |
| Study 6 | -1 | -2 | -1 | -1 | -2 | -2 | 0 | -1 |
| Study 7 | -1 | 0 | -2 | -2 | 0 | -2 | -1 | -2 |
| Study 8 | -1 | 0 | -1 | 0 | -1 | 0 | -1 | -1 |
| Study 9 | 0 | -2 | 0 | -2 | -2 | -2 | 0 | -2 |
| Study 10 | -2 | -2 | -1 | -2 | -1 | -1 | -1 | -2 |
作成したデータセットから総合判定 (Overall) を計算します。
# ===============================
# Overallの計算
# ===============================
bias_data <- bias_data %>%
rowwise() %>%
mutate(
Total = sum(c_across(all_of(domain_names))),
Overall = case_when(
Total <= -8 ~ -2, # 高
Total <= -5 ~ -1, # 中/疑い
TRUE ~ 0 # 低
)
) %>%
ungroup()
もう一度確認してみましょう。
| > View(bias_data) |
|---|
| Study | Randomization | Allocation | Participants | OutcomeEvaluator | ITT_FAS_PPS | MissingData | SelectiveReporting | OtherBias | Total | Overall |
|---|---|---|---|---|---|---|---|---|---|---|
| Study 1 | 0 | -1 | -2 | -2 | -1 | -2 | -2 | -1 | -11 | -2 |
| Study 2 | 0 | -1 | -2 | 0 | 0 | -2 | 0 | 0 | -5 | -1 |
| Study 3 | 0 | -2 | 0 | 0 | 0 | 0 | -2 | 0 | -4 | 0 |
| Study 4 | -1 | -1 | -1 | -2 | -2 | -2 | 0 | -2 | -11 | -2 |
| Study 5 | 0 | 0 | 0 | 0 | 0 | -1 | -1 | -1 | -3 | 0 |
| Study 6 | -1 | -2 | -1 | -1 | -2 | -2 | 0 | -1 | -10 | -2 |
| Study 7 | -1 | 0 | -2 | -2 | 0 | -2 | -1 | -2 | -10 | -2 |
| Study 8 | -1 | 0 | -1 | 0 | -1 | 0 | -1 | -1 | -5 | -1 |
| Study 9 | 0 | -2 | 0 | -2 | -2 | -2 | 0 | -2 | -10 | -2 |
| Study 10 | -2 | -2 | -1 | -2 | -1 | -1 | -1 | -2 | -12 | -2 |
これで、データセットが完成しましたね。
いよいよ信号機プロットを作成しましょう。
3.2 信号機プロットの作成
データセットをlongにして加工しやすくし、ヒートマップを応用して作成します。
# ===============================
# long形式へ変換
# ===============================
bias_long <- bias_data %>%
pivot_longer(
cols = c(all_of(domain_names), "Overall"),
names_to = "Domain",
values_to = "Score"
) %>%
mutate(
RiskLevel = case_when(
Score == 0 ~ "Low",
Score == -1 ~ "Some concerns",
Score == -2 ~ "High"
),
Domain = factor(Domain, levels = c(domain_names, "Overall")),
Study = factor(Study, levels = rev(study_names))
)
# ===============================
# Risk of Bias プロット
# ===============================
ggplot(bias_long, aes(x = Domain, y = Study, fill = RiskLevel)) +
geom_tile(color = "black") +
scale_fill_manual(
name = "Risk of Bias",
values = c("Low" = "green", "Some concerns" = "yellow", "High" = "red"),
na.value = "grey80"
) +
labs(
title = "Risk of Bias Plot (Based on FFC Algorithm)",
x = "Bias Domain",
y = "Study"
) +
theme_minimal(base_size = 14) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
出力は以下の通りです。

機能性表示食品の届け出にも対応できそうな信号機プロットを作成することができました。
これで、Risk of Bias (バイアスリスク) が一目瞭然ですね。
まとめ
信号機プロットは、複雑なバイアス評価を直感的な色と表形式で伝える可視化技術です。
- 一目で把握
- 研究間比較が容易
- 透明性の高いレビュー
- 国際的にも通用するフォーマット
という理由から、臨床研究・食品研究・医療統計の分野で今後も標準的なツールとして使われ続けるでしょう。
参考文献
- Higgins JP, Savović J, Page MJ, Elbers RG, Sterne JAC. Chapter 8: Assessing risk of bias in a randomized trial [last updated October 2019]. In: Higgins JP, Thomas J, Chandler J, Cumpston M, Li T, Page MJ, et al, editor(s). Cochrane Handbook for Systematic Reviews of Interventions version 6.5. Cochrane, 2024. Available from cochrane.org/handbook.
- Sterne JAC, Savović J, Page MJ, Elbers RG, Blencowe NS, Boutron I, Cates CJ, Cheng HY, Corbett MS, Eldridge SM, Emberson JR, Hernán MA, Hopewell S, Hróbjartsson A, Junqueira DR, Jüni P, Kirkham JJ, Lasserson T, Li T, McAleenan A, Reeves BC, Shepperd S, Shrier I, Stewart LA, Tilling K, White IR, Whiting PF, Higgins JPT. RoB 2: a revised tool for assessing risk of bias in randomised trials. BMJ. 2019 Aug 28;366:l4898. doi: 10.1136/bmj.l4898. PMID: 31462531.
- McGuinness LA, Higgins JPT. Risk-of-bias VISualization (robvis): An R package and Shiny web app for visualizing risk-of-bias assessments. Res Synth Methods. 2021 Jan;12(1):55-61. doi: 10.1002/jrsm.1411. Epub 2020 May 6. PMID: 32336025.