逆確率重み付け (IPTW)
解説
逆確率重み付け (Inverse Probability of Treatment Weighting; IPTW) は、観察データから因果関係を推定する統計手法です。
医学研究などで、ランダム化されていないデータにおいて、治療群と非治療群間のバイアスを調整します。 各参加者の治療受領の確率 (傾向スコア) を推定し、その逆数を重みとして使用することで、共変量のバランスを調整します。
計画段階から共変量のバイアスを小さくする方法として、ランダム化 (無作為化) 比較試験があります。 しかし、ランダム化ができない観察研究や、遡及的研究 (retrospective study) では、得られたデータをそのまま利用すると、共変量のバイアスが問題となります。
例えば、新薬を受けた患者の平均年齢が60歳で、標準治療を受けた患者の平均年齢が75歳では、単純に治療効果を比較してもその解釈は困難で、誤った結論につながります。 そのため、多変量解析や、ここで提供する逆確率重み付けを利用します。
傾向スコアマッチングとの違い
傾向スコアマッチングと逆確率重み付けは、どちらも傾向スコアを用いた因果推論手法ですが、重要な違いがあります。
項目 | 傾向スコアマッチング | 逆確率重み付け |
---|---|---|
データの利用 | マッチできない個体を除外 | 全ての個体を利用 |
サンプルサイズ | 減少する | 維持される |
統計的検出力 | 低下することがある | 維持される |
バランス調整 | マッチした個体間のみ | 全体の分布を調整 |
解析の複雑さ | 対応のある解析が必要 | 通常の回帰分析で可能 |
利点
- 観察データにおいて治療群とコントロール群間の共変量のバランスを改善し、選択バイアスを減らせます。
- 全てのデータを利用できるため、傾向スコアマッチングのようにサンプルサイズが減少しません。
- 統計的検出力が維持され、より精密な治療効果の推定が可能です。
- 重み付け後の解析が、通常の統計手法 (重み付き回帰) で実行できます。
- 複数の治療効果 (ATE, ATT, ATC) を推定できます。
欠点
- 極端な傾向スコア (0に近いまたは1に近い) を持つ個体において、重みが非常に大きくなり、推定が不安定になる場合があります。
- すなわち、治療を受ける確率が非常に低い個体が実際に治療を受けた場合 (PS≈0)、または治療を受ける確率が非常に高い個体が実際に治療を受けなかった場合 (PS≈1) に、逆確率重みが極端に大きくなり、少数の観測値が結果に過度な影響を与える可能性があります。
- 重みの分布を慎重に評価する必要があります。
- 傾向スコアモデルの誤特定の影響を受けやすい場合があります。
重み付けの品質評価
逆確率重み付けの品質は 標準化平均差 (SMD: Standardized Mean Difference) と 重みの分布 で評価します。
SMDによる評価
SMD値 | 評価 | 解釈 |
---|---|---|
0.1未満 | 良好なバランス | 群間の共変量分布が十分にバランスされている |
0.1~0.2 | 許容範囲 | 軽度の不均衡だが解析に使用可能 |
0.2以上 | バランス不良 | 重み付け手法の見直しが必要 |
ATO (オーバーラップ重み) の場合: 後述のATO重みをロジスティック回帰で推定した場合、モデルに含まれる変数のSMDは理論的に0になります。 これは正常な動作です。 ただし、平均以外の分布特性 (分散、歪度など) は依然として不均衡の可能性があります。
重みの分布による評価
評価項目 | 良好 | 許容範囲 | 要注意 | 解釈 |
---|---|---|---|---|
変動係数 | 1.0未満 | 1.0~1.5 | 1.5以上 | 重みのばらつき度合い |
最小重み | 0.2以上 | 0.1~0.2 | 0.1未満 | 過度に軽視される観測値の有無 |
最大重み | 5.0未満 | 5.0~10.0 | 10.0以上 | 過度に重視される観測値の有無 |
効率性 | 70%以上 | 50%~70% | 50%未満 | 情報損失の程度 |
SMDは群間の差をプールした標準偏差で標準化した効果量で、重み付け前後のバランス改善を定量的に評価できます。
p値はサンプルサイズに依存するため、バランス評価には適していません。
使用方法
応答変数の選択
応答変数には、研究で比較する対象 (例: 治療の有無) を指定します。 この変数は2値 (バイナリ) である必要がありますが、3値以上の場合には、そのうちの一つを処理群に指定し、それ以外は自動的にコントロールに割り当てます。
重み付け計算に使用する変数の選択
連続的な特性や測定値 (例: 年齢、血圧) と、カテゴリー (離散) 変数 (例: 性別、喫煙歴) は、扱いが異なりますので、別々に指定します。
このとき、数値で表されたカテゴリー変数については、順序がある場合には連続変数として選択することができますが、数値の間隔は一定であることを前提として解析します。 カテゴリー変数として選択した場合には、数値の大小関係は無視され、単なるラベルとして扱われます。
推定する治療効果のタイプ
効果タイプ | 名称 | 対象集団 | 解釈 | 推奨度 |
---|---|---|---|---|
ATE | Average Treatment Effect | 集団全体 | 全員が治療を受けた場合と受けなかった場合の平均的な差 | ★★★ (最も一般的) |
ATT | Average Treatment Effect on Treated | 処理群 | 実際に治療を受けた人への効果 | ★★☆ |
ATC | Average Treatment Effect on Controls | 対照群 | 実際に治療を受けなかった人への効果 | ★☆☆ |
ATO | Average Treatment Effect in the Overlap | 重複領域 | 傾向スコアの重複領域での効果(最も安定した推定) | ★★☆ |
最も一般的で解釈しやすいのは ATE です。
重み推定手法の選択
カテゴリ | 手法名 | 特徴 | 適用場面 | 推奨度 |
---|---|---|---|---|
【標準】傾向スコア (PS) 手法 | PS + ロジット回帰 (最も標準的) | 最も一般的で解釈しやすい標準手法。ロジスティック回帰により治療割り当て確率を推定 | 初回分析 | ★★★ (初回推奨) |
PS + プロビット回帰 (正規分布仮定) | データが正規分布に従うと仮定できる場合に適している。プロビット関数 (標準正規分布の累積分布関数) を使用 | 理論的背景がある場合 | ★★☆ | |
PS + コーシット回帰 (外れ値に頑健) | 外れ値が多いデータに対して頑健性を発揮。コーシー分布に基づく連結関数を使用 | 外れ値が多い場合 | ★☆☆ | |
【バランス重視】共変量バランシング | CBPS + ロジット (共変量バランス最適化) | 治療群と対照群の共変量分布を直接的にバランスさせることを重視。従来の傾向スコア法と異なり、予測精度と共変量バランスを同時に最適化 | バランス重視 | ★★☆ |
CBPS + プロビット (CBPS + 正規分布) | CBPSにプロビット関数を組み合わせた手法。正規分布仮定とバランス最適化を両立 | バランス重視+正規分布仮定 | ★★☆ | |
エントロピーバランシング (完全バランス) | 最も厳密にバランスを実現 (計算負荷は高い)。エントロピーを最小化しながら指定した制約を満たす重みを算出 | 厳密なバランスが必要 | ★★☆ | |
【機械学習】高度な非線形手法 | ブースティング回帰 (GBM - 非線形関係対応) | 共変量間の複雑な相互作用や非線形関係を自動検出。弱い学習器を順次組み合わせて強力な予測モデルを構築するアンサンブル学習手法 | 複雑なデータ | ★☆☆ |
ベイジアン回帰木 (BART - 不確実性考慮) | ベイジアン統計に基づく機械学習手法。複数の浅い決定木の和として予測モデルを構築し、予測の不確実性も考慮 | 不確実性も考慮したい場合 | ★☆☆ | |
【特殊用途】特定状況向け | PS + 補ログログ回帰 (稀なイベント専用) | 治療を受ける確率が非常に低い場合 (稀なイベント) に特化。非対称な確率分布に適用 | 稀なイベント | ★☆☆ |
GLM + ロジット (基本的な一般化線形モデル) | 一般化線形モデルの基本形。シンプルな線形関係を仮定し、指数分布族に属する分布をモデル化 | 基本的な解析 | ★☆☆ | |
エネルギーバランシング (分布全体のバランス) | 平均だけでなく分布全体のバランスを重視。エネルギー距離を用いて分布間の距離を最小化 | 分布全体のバランス | ★☆☆ | |
最適化重み (数値最適化による精密制御) | 数値最適化により任意の制約下で重みを精密制御。ユーザー定義の制約条件を満たしながら最適重みを算出 | 特殊な制約がある場合 | ★☆☆ | |
オーバーラップ重み (ATO - 重複領域効果) | 重みが0-1に制限され極端な重みを回避。ロジスティック回帰使用時は共変量平均が完全にバランス | 安定性重視・重複領域効果 | ★★☆ | |
【高度】専門的手法 | IPT + ロジット (逆確率治療重み付け) | 逆確率治療重み付け。因果推論の古典的手法で、治療割り当て確率の逆数を重みとして使用 | 従来手法 | ★☆☆ |
初回は 傾向スコア + ロジット回帰 を推奨します。
極端な重みのトリミング
トリミング設定 | 特徴 | 適用場面 | 安定性 | 推奨度 |
---|---|---|---|---|
トリミングなし | 全データを利用 | 初回分析・重み分布確認 | △ | ★★★ (まず試す) |
1% | 最も保守的 | 極端な重みが問題の場合 | ◎ | ★★☆ |
2-3% | 一般的な設定 | バランスと安定性の両立 | ○ | ★★☆ |
5% | より積極的 | 重みの分散が大きい場合 | ○ | ★☆☆ |
まずトリミングなしで重みの分布を確認してから、必要に応じて設定します。
重み付け処理後
重み付けが完了したら、その情報を以下の特殊カラムに追加できます。
- __iptw_weights__: 逆確率重み付けの重み値です。
このカラムは、通常の統計処理の対象にはなりません。 引き続いて重み付けされたサンプルの 重み付きロジスティック回帰、 重み付き線形回帰、 重み付きCox比例ハザードモデル を行う際に、内部的に使用されます。
結果の解釈
重み分布の確認
重み分布のバイオリンプロットで、極端に大きな重みや偏った分布がないかを確認します。 変動係数が1.0を超える場合や、最大重みが5.0を超える場合は、トリミングの検討が必要です。
共変量バランスの改善
重み付け前後の分布プロットとSMD値で、バランス改善を確認します。 全ての変数でSMD < 0.1を達成することが理想ですが、SMD < 0.2であれば許容範囲です。
ATO重みの特別な注意点: ATO重みでSMD≈0が達成された場合でも、これは平均のバランスのみを示します。 分布全体のバランスを確認するため、分布プロットや経験的累積分布関数の目視確認も重要です。
効率性の評価
有効サンプルサイズと効率性で、情報損失を評価します。 効率性が70%を下回る場合は、手法の見直しを検討します。
設定内容と結果の保存
重み付け結果を保存するには、ファイル の データと設定を保存 により、設定内容も含めて保存する必要があります。
データファイルだけを csv やエクセルで保存した場合は、重み情報は保存されますが、設定は失われます。 そのため、引き続き行うべき重み付き回帰分析を後で行おうとしても実行不可能な場合がありますのでご注意ください。
注意点
逆確率重み付けでは、傾向スコアモデルの正しい特定が重要です。 重要な共変量の欠落や、非線形関係・相互作用の見落としは、バイアスのある結果につながります。
極端な重みが発生した場合は、以下を検討してください
- トリミング設定の調整
- より柔軟な機械学習手法の利用
- 共変量の見直し
その他
Reactive stat では、重み推定に R の WeightIt ライブラリを利用しており、最新の因果推論手法に対応しています。 バランス診断には cobalt パッケージを使用しています。
分類内容 | 値 | |
{{ item.tag }} |
データの取り扱い
- データインポート
- データの読み込みは、ブラウザ内で完結し、外部へのデータ送信は発生しません。
- データ保持
- 読み込んだデータはブラウザ内に保持されます。
- ブラウザのセッションが終了または全てのタブが閉じられると、保持していたデータは自動的に破棄されます。
- データの安全性
- ブラウザがクラッシュした場合でも、10分経過すれば次回の起動時にデータは安全に消去されます。
- 共用のPCでの使用も考慮し、データの外部漏洩のリスクを最小化しています。
クラウド R を利用する時のデータ送信
- 最小限のデータ送信
- 外部のRサーバーへ送信されるデータは、数値計算に必要な最小限のセットに制限されています。
- 送信データは解析に必要なサブセットのみに限られます。
- ユーザーコントロール下のデータ送信
- 送信前に、どのデータが外部サーバーへ送信されるのか内容を確認することが可能です。
- データの送信はユーザーの操作により行われ、自動的な送信は行いません。
- クラウド R 出力結果の保持
- クラウド R からの出力結果は、将来の自動翻訳や自動解説の機能実現のため、サーバーがデータベースに保持します。
- その際に、送信者の情報や、計算元となるデータなど、プライバシーに関わる情報は保持しません。
- 通信経路も全て暗号化していますので、たとえプライバシーに関わる情報が含まれていたとしても、通常は漏洩する恐れはありません。
AI による解説を利用する時のデータ送信
- 最小限のデータ送信
- 外部のAIサーバーへ送信されるデータは、クラウド R の出力結果と、用いた統計手法の徐放です。
- ただし、クラウド R の出力結果に連続した数値データが含まれる場合は、AI にデータ形式を認識させる目的で、連続データの最初の行のみを送信します。
- クラウド R 出力結果の保持
- AI による解説内容は、将来の品質向上などのため、サーバーがデータベースに保持します。
- その際に、送信者の情報や、計算元となるデータなど、プライバシーに関わる情報は保持しません。
Reactive stat において、統計データの変数は、通常の数値や文字列として扱われます。 したがって、日付や時間の概念は直接的にはサポートされていません。
統計計算を行う際には、日付や時間の差分を数値として事前に用意しておく必要があります。
チェックされた行が削除対象となります
削除対象の行
データ入力
R の出力結果
R出力図形
AI による R 出力結果の解説
- データ: カラム名 (列名) をそのまま記述するか、"列名" のようにダブルクォートで挟んで指定
- 算術演算子: +, -, *, /, ()
- 基本関数: abs(), sqrt(), pow(), exp(), log(), log10()
- 三角関数: sin(), cos(), tan(), asin(), acos(), atan()
- 丸め関数: round(), floor(), ceil()
体重 / pow(身長, 2)
, "体重" / ("身長" * "身長")
{{ column }}
{{title}}
データ
設定
...(候補が多すぎます)
結果
クラウド R 分析
逆確率重み付け結果
平均 | {{ weightStats.mean?.toFixed(3) }} |
標準偏差 | {{ weightStats.sd?.toFixed(3) }} |
変動係数 | {{ weightStats.cv?.toFixed(2) }} |
最小-最大 | {{ weightStats.min?.toFixed(3) }} - {{ weightStats.max?.toFixed(2) }} |
有効サンプルサイズ | {{ weightStats.effectiveSampleSize?.toFixed(1) }} |
効率性 | {{ (weightStats.efficiency * 100).toFixed(1) }}% |
SMD > 0.1の変数: {{ weightStats.smdEvaluation.problemVariables }}個
変動係数が高め: {{ weightStats.cv.toFixed(2) }}
効率性が低め: {{ (weightStats.efficiency * 100).toFixed(1) }}%
{{ weightStats.ezrRecommendations.message }}
{{plot.name}}
重み付け前 | 重み付け後 | |||
---|---|---|---|---|
処理群 | 対照群 | 処理群 | 対照群 | |
{{ stat }} | {{ plot.preWeightTreatedStats[stat].cp3 }} | {{ plot.preWeightControlStats[stat].cp3 }} | {{ plot.postWeightTreatedStats[stat].cp3 }} | {{ plot.postWeightControlStats[stat].cp3 }} |
SMD | {{ plot.preSMD || '-' }} | {{ plot.postSMD || '-' }} | ||
{{ category['カテゴリー'] }} | {{ category['個数'] }} ({{ category['割合'] }}%) | {{ plot.preWeightControlStats?.[index]?.['個数'] || 0 }} ({{ plot.preWeightControlStats?.[index]?.['割合'] || 0 }}%) | {{ plot.postWeightTreatedStats?.[index]?.['個数'] || 0 }} ({{ plot.postWeightTreatedStats?.[index]?.['割合'] || 0 }}%) | {{ plot.postWeightControlStats?.[index]?.['個数'] || 0 }} ({{ plot.postWeightControlStats?.[index]?.['割合'] || 0 }}%) |
SMD | {{ plot.preSMD || '-' }} | {{ plot.postSMD || '-' }} |
変数 | 重み付け前 (N={{ summaryTableData[0]?.preTreatedN + summaryTableData[0]?.preControlN }}) | 重み付け後 (有効サンプルサイズ={{ summaryTableData[0]?.effectiveSampleSize }}) | ||||
---|---|---|---|---|---|---|
処理群 (N={{ summaryTableData[0]?.preTreatedN }}) | 対照群 (N={{ summaryTableData[0]?.preControlN }}) | SMD | 処理群 (重み付き) | 対照群 (重み付き) | SMD | |
{{ row.name }} | {{ row.preTreatedValue }} | {{ row.preControlValue }} | {{ row.preSMD }} | {{ row.postTreatedValue }} | {{ row.postControlValue }} | {{ row.postSMD }} |
{{ row.name }} | {{ row.preSMD }} | {{ row.postSMD }} | ||||
{{ val.category }} | {{safeVal(row.preTreatedValue, idx)}} | {{safeVal(row.preControlValue, idx)}} | {{safeVal(row.postTreatedValue, idx)}} | {{safeVal(row.postControlValue, idx)}} | ||
注: 数値変数は 平均±標準偏差、カテゴリ変数は 度数 (割合) を表示し、各変数のバランス評価には標準化平均差 (SMD) を使用しています。 SMDは群間の差をプールした標準偏差で標準化した効果量で、一般的に SMD < 0.1 で良好なバランス、SMD < 0.2 で許容範囲とされます。 |
逆確率重み付け結果をデータテーブルの新しい列に追加しました。
- {{ weightResult.weights.length }}個のデータに対して逆確率重み付けを実行しました。
- 上のボタンを押すと、"{{ iptwWeightsColumnName }}" カラムに逆確率重み付けの重みを格納します。
- その際、現在の "{{ iptwWeightsColumnName }}" カラムの内容は上書きされます。
- 実行後は、必要に応じてファイルにダウンロードして保存してください。
- 事後の統計処理を行う場合には、重み付き回帰分析などを行ってデータを活用してください。
重み付け後の解析
逆確率重み付けしたサンプルに対して
-
重み付きロジスティック回帰
逆確率重み付けを考慮したロジスティック回帰分析により、二値アウトカムに対する治療効果を推定します。
-
重み付き線形回帰
逆確率重み付けを考慮した線形回帰分析により、連続アウトカムに対する治療効果を推定します。
-
重み付きCox比例ハザードモデル
逆確率重み付けを考慮したCox回帰により、生存時間データに対する治療効果を推定します。
を行うことができます。