サブグループ解析フォレストチャート (Subgroup Analysis Forest Plot)
臨床試験の治療効果をサブグループ別に可視化するフォレストチャートを描画します。患者個票データから Cox 回帰を自動実行し、各サブグループの HR・95%CI と交互作用検定結果を表示します。
解説
サブグループ解析とは
サブグループ解析(Subgroup Analysis)は、第3相臨床試験などで事前に規定されたサブグループ(年齢層・性別・病期・臓器機能など)において治療効果のハザード比(HR)を推定し、治療効果の一貫性を評価する解析手法です。
フォレストチャートによって視覚的に結果を提示することで、特定のサブグループで治療効果が強い・弱い傾向がないかを確認できます。
本アプリでサポートする機能
- サブグループ別 HR・CI の推定: 各サブグループ内で Cox 比例ハザード回帰を独立して実行し、治療群 vs 対照群のハザード比と信頼区間を推定します。
- 交互作用検定: サブグループ変数ごとに治療 × サブグループ変数の交互作用項を含むモデルと含まないモデルを比較する尤度比検定(LRT)を実施し、P for interaction を算出します。
- 全体効果(Overall): 全データに対する治療効果 HR も同時に表示します。
- フォレストチャート: 階層構造(変数ヘッダー → サブグループ水準)を持つインタラクティブなフォレストチャートを Plotly.js で描画します。
データ要件
- 患者個票データ: 1行 = 1患者のデータを入力します(集計データ・論文値の直接入力には対応していません)。
- 必須列:
- 観察期間(数値): イベント発生または打ち切りまでの期間
- イベント(二値変数): 1 = イベントあり、0 = 観察打ち切り(値の割り当ては変更可能)
- 治療/介入変数: 治療群・対照群を示すカテゴリー変数
- サブグループ変数: 1つ以上のカテゴリー変数(年齢層、性別など)
結果の解釈
- HR < 1: 治療群に有利(イベントリスクが対照群より低い)
- 95% CI が 1.0 を跨がない: その HR が統計的に有意
- P for interaction < 0.05: そのサブグループ変数による治療効果の修飾が有意
- 全体的なパターン: CI が重なり合い、特定のサブグループのみ大きく異なることがない場合、治療効果は一貫していると判断できます。
注意事項
- サブグループ解析は探索的な解析です。多重比較の問題から、有意な交互作用が偶然生じる可能性があります。事前規定されたサブグループ解析(Pre-specified)か事後的な解析(Post-hoc)かを明記して報告することが重要です。
- サブグループのサンプルサイズが小さい場合、HR の推定が不安定になります(CI が非常に広くなります)。
- 本アプリは治療効果(1変数)に焦点を当てた解析を行います。交絡変数を調整した解析が必要な場合は Cox比例ハザード回帰 をご利用ください。
関連アプリ
アプリ
Reactive stat ロゴ について
ログインしていただければロゴは表示されなくなります
{{title}}
{{title}}
{{ item.full }}
{{title}}
{{group}}
{{title || 'カラム選択'}}
{{title || 'カラム選択'}}
{{ title }} カテゴリー変数を選択してください。複数選択すると組み合わされます
...(選択肢が多すぎます)
それぞれに設定する値を入力してください。異なる分類に同じ値を設定することもできます。順位の数値を入れれば、順序カテゴリカル変数として扱えるようになります。
| 分類内容 | 値 | |
| {{ item.tag }} |
データの取り扱い
- データインポート
- データの読み込みは、ブラウザ内で完結し、外部へのデータ送信は発生しません。
- データ保持
- 読み込んだデータはブラウザ内に保持されます。
- ブラウザのセッションが終了または全てのタブが閉じられると、保持していたデータは自動的に破棄されます。
- データの安全性
- ブラウザがクラッシュした場合でも、10分経過すれば次回の起動時にデータは安全に消去されます。
- 共用のPCでの使用も考慮し、データの外部漏洩のリスクを最小化しています。
クラウド R を利用する時のデータ送信
- 最小限のデータ送信
- 外部のRサーバーへ送信されるデータは、数値計算に必要な最小限のセットに制限されています。
- 送信データは解析に必要なサブセットのみに限られます。
- ユーザーコントロール下のデータ送信
- 送信前に、どのデータが外部サーバーへ送信されるのか内容を確認することが可能です。
- データの送信はユーザーの操作により行われ、自動的な送信は行いません。
- クラウド R 出力結果の保持
- クラウド R からの出力結果は、将来の自動翻訳や自動解説の機能実現のため、サーバーがデータベースに保持します。
- その際に、送信者の情報や、計算元となるデータなど、プライバシーに関わる情報は保持しません。
- 通信経路も全て暗号化していますので、たとえプライバシーに関わる情報が含まれていたとしても、通常は漏洩する恐れはありません。
AI による解説を利用する時のデータ送信
- 最小限のデータ送信
- 外部のAIサーバーへ送信されるデータは、クラウド R の出力結果と、用いた統計手法の徐放です。
- ただし、クラウド R の出力結果に連続した数値データが含まれる場合は、AI にデータ形式を認識させる目的で、連続データの最初の行のみを送信します。
- クラウド R 出力結果の保持
- AI による解説内容は、将来の品質向上などのため、サーバーがデータベースに保持します。
- その際に、送信者の情報や、計算元となるデータなど、プライバシーに関わる情報は保持しません。
新しい列 (カラム) 名:
ここで設定した値に完全一致するデータを欠損値として扱います。
新しい列 (カラム) 名:
Reactive stat において、統計データの変数は、通常の数値や文字列として扱われます。 したがって、日付や時間の概念は直接的にはサポートされていません。
統計計算を行う際には、日付や時間の差分を数値として事前に用意しておく必要があります。
計算結果プレビュー:
新しい列 (カラム) 名:
チェックされた行が削除対象となります
削除対象の行
データ入力
{{ errorMessage || dataStatus + 'です'}}
設定とオプション
AI による R コードの解説
R の出力結果
R出力図形
AI による R 出力結果の解説
変換設定:
(
変換元の単位:
変換先の単位:
)
変換結果プレビュー:
新しい列 (カラム) 名:
計算式の入力:
数式:
- データ: カラム名 (列名) をそのまま記述するか、"列名" のようにダブルクォートで挟んで指定
- 算術演算子: +, -, *, /, ()
- 基本関数: abs(), sqrt(), pow(), exp(), log(), log10()
- 三角関数: sin(), cos(), tan(), asin(), acos(), atan()
- 丸め関数: round(), floor(), ceil()
体重 / pow(身長, 2), "体重" / ("身長" * "身長")
利用可能なカラム:
{{ column }}
変換結果プレビュー:
{{ errorMessage }}
新しい列 (カラム) 名:
区切り文字の選択:
欠損値の処理:
プレビュー:
{{ preview }}
新しい列 (カラム) 名:
確認
変換結果プレビュー:
新しい列 (カラム) 名:
{{title}}
データがありません
{{title}}
...(選択肢が多すぎます)
{{filteringText}}
{{ title || '対象データ' }}
({{ matchedRowCount }}件 / 元データ{{ originalRowCount }}件)
除外レコードあり
ダウンロード(CSV)
{{group}}
データ
設定
分析
クラウド R 分析
フォレストプロット
| サブグループ | {{ settings.treatmentLabel || '治療群' }} N / イベント |
{{ settings.controlLabel || '対照群' }} N / イベント |
{{ effectLabel }} [{{ settings.ciLevel }}% CI] | {{ effectLabel }} ({{ settings.ciLevel }}% CI) | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
{{ row.groupLabel }} P交互作用 = {{ formatP(row.pInteraction) }} |
{{ row.label }} | {{ row.nTrt }} / {{ row.eventsTrt }} | {{ row.nCtrl }} / {{ row.eventsCtrl }} | {{ formatEstCI(row) }} | 総合 ({{ settings.ciLevel }}% CI) | {{ row.nTrt }} / {{ row.eventsTrt }} | {{ row.nCtrl }} / {{ row.eventsCtrl }} | {{ formatEstCI(row) }} | ||||||
◆ 総合効果 ■ サブグループ効果 {{ effectLabel }} < 1: 治療群に有利
チャート設定