傾向スコアマッチング

傾向スコアマッチング (propensity score matching; PSM) は、観察データから因果関係を推定する統計手法です。

医学研究などで、ランダム化されていないデータにおいて、治療群と非治療群間のバイアスを調整します。 各参加者の治療受領の確率 (傾向スコア) を推定し、スコアが似ている被験者同士をマッチングします。

計画段階から共変量のバイアスを小さくする方法として、ランダム化 (無作為化) 比較試験があります。 しかし、ランダム化ができない観察研究や、遡及的研究 (retrospective study) では、得られたデータをそのまま利用すると、共変量のバイアスが問題となります。

例えば、癌のステージII の患者さんの平均年齢が90歳で、ステージIIIの平均年齢が70歳では、単純に予後を比較してもその解釈は困難で、誤った結論につながります。 そのため、多変量解析や、ここで提供する傾向スコアマッチングを利用します。

利点

  • 観察データにおいて治療群とコントロール群間の共変量のバランスを改善し、選択バイアスを減らせます。
  • 多変量解析では、モデルが共変量の影響を適切に調整しているかが不明確な場合があります。誤った統計的モデルは誤った結果につながります。しかし、傾向スコアマッチングでは、治療群とコントロール群間で共変量がより均等になるように個体をマッチングします。これにより、治療効果の推定が、共変量の影響がバランスされた状態で行われるため、より正確になる可能性があります。
  • マッチング後の解析が容易です。

欠点

  • 適切なマッチングを見つけるのが困難な場合があります。
  • マッチングプロセスにおいて「利用できないデータ」、すなわち、適切なマッチが見つからないために分析から除外されるデータが発生します。これは特に、マッチング対象の個体が少ない場合や、特定の特性を持つ個体が少ない場合に顕著です。その結果、分析対象のサンプルサイズが減少し、結果の一般化や統計的な力に影響を与える可能性があります。

応答変数の選択

応答変数には、研究で比較する対象 (例: 治療の有無) を指定します。 この変数は2値 (バイナリ) である必要がありますが、3値以上の場合には、そのうちの一つを処理群に指定し、それ以外は自動的にコントロールに割り当てます。

マッチさせたい変数の選択

連続的な特性や測定値 (例: 年齢、血圧) と、カテゴリー (離散) 変数 (例: 性別、喫煙歴) は、扱いが異なりますので、別々に指定します。

このとき、数値で表されたカテゴリー変数については、順序がある場合には連続変数として選択することができますが、数値の間隔は一定であることを前提として解析します。 カテゴリー変数として選択した場合には、数値の大小関係は無視され、単なるラベルとして扱われます。

処理群と対照群のマッチング比率の設定

処理群の各メンバーに対してマッチングされる対照群メンバーの数を設定します。デフォルトは1:2です。

Caliperの設定

傾向スコアの差の最大許容値を設定します。 デフォルトは0.2です。 Caliper を設定することで、マッチングされるメンバー間の類似性を制御します。

Caliper を小さくすると、マッチングされる個体間の類似性は高まりますが、一方でマッチングできる個体の数が減少します。 その結果、特にサンプルサイズが小さい場合や傾向スコアの分布に大きな違いがある場合、マッチング対象となる個体が不足することがあります。 これは、分析の一般化可能性や統計的な力に影響を与える可能性があるため、Caliperの設定は慎重に行う必要があります。

複数の処理群メンバーとのマッチングの設定

同一の対照群メンバーを複数の処理群メンバーにマッチングさせるかどうかを設定します。

  • 対照群のメンバーを複数の処理群のメンバーとのマッチングさせない場合 (非復元マッチング):
    • バイアス低減の点で優位
    • 通常はこちらが推奨されます
  • 対照群のメンバーが複数の処理群のメンバーとのマッチングすることを許容する場合 (復元マッチング):
    • マッチング数が少ない場合に推奨されるが、実際には復元マッチングは殆ど用いられていません

マッチング処理後

マッチングできたら、その情報を以下の2つの特殊カラムに追加できます。

  • __matched_pairs__: マッチング対象となった行には、対応する通し番号が入ります。マッチング対象とならなかった行には、空白が入ります。
  • __propensity_scores__: 傾向スコア の値です。

これらのカラムは、通常の統計処理の対象にはなりません。 引き続いて マッチさせたサンプルの 比率の比較(Mantel-Haenzel検定)比率の多変量解析(条件付ロジスティック回帰)生存率の多変量解析(層別化比例ハザード回帰) を行う際に、内部的に使用されます。

マッチング結果を保存するには、ファイルデータと設定を保存 により、設定内容も含めて保存する必要があります。

データファイルだけを csv やエクセルで保存した場合は、マッチング情報と傾向スコアは保存されますが、設定は失われます。 そのため、引き続き行うべき検定を後で行おうとしても実行不可能な場合がありますのでご注意ください。

マッチドペアに対して、対応のある検定を行うとより有意差が出やすいとされますが、傾向スコアは両群における共変量の分布が等しいことを保証するものであり、個体レベルまで近いとまでは保証していないため、対応のある検定を適用することは推奨されません

Reactive stat では、マッチングには R の Matching ライブラリの Match() 関数を利用しており、最近傍マッチングを実行します。 最適マッチング (optimal matching)、 遺伝的マッチング (genetic matching)、 フルマッチング (full matching) には対応していません。

医学統計セミナー資料 (和歌山県立医科大学 下川 敏雄 先生)

応答変数 を選択 (カテゴリカル変数)

...(候補が多すぎます)

詳細設定
処理群の各メンバーに対してマッチングされる対照群のメンバーの数
Caliper の設定
複数の処理群のメンバーとのマッチング

傾向スコアマッチングのペア情報と傾向スコアをデータに追加しました。

  • {{ new Set(matched.rowsTreated).size }}個の処理群のメンバーに対してに、{{ this.matched.rowsControl.length }}個の対照群のメンバーがマッチングしました。
  • 上のボタンを押すと、"{{ matchedPairsColumnName }}" カラムに傾向スコアマッチングのペア情報を、"{{ propensityScoresColumnName }}" カラムに傾向スコアを格納します。
  • その際、現在の "{{ matchedPairsColumnName }}" および "{{ propensityScoresColumnName }}" カラムの内容は上書きされます。
  • 同じ数字の入った行がマッチングしたデータとなります。マッチングしなかった行には空白が入ります。
  • 実行後は、必要に応じてファイルにダウンロードして保存してください。
  • 事後の統計処理を行う場合には、適宜欠損値処理などを行ってデータを整形してください。

傾向スコアマッチングのペアに選ばれなかった行をすべて削除しました。