Unboundedly

日々大学院で学んだこと、考えたことを更新

回帰分析における「調整変数」の選び方:実践編

回帰分析を用いて「●●の効果を推定する」ことに取り組んだことがある人は多いのでは無いかと思います。

回帰モデルには「調整変数」として、年齢・性別・教育歴・(医学研究の場合は)既往歴などなど様々な要因を投入して、その影響を"補正"しますよね。

今回は、これらの「調整変数」をそもそもどのように選べばいいのか、その実践的な考え方についてまとめます

  • ステップワイズつかって選べばいいんでしょう?
  • アウトカム/曝露因子と有意に関連しているものを選べばいいんでしょう?
  • とにかくたくさん調整すればするほど良いのでしょう?
  • 調整して推定値が大きく変わるものを使えばいいのでしょう?
  • はいはいドメイン知識、DAGを書くんでしょう?

と思った人は参考になるかもしれません。

なお、本記事は以下の論文の内容をもとに構成されています。

 そもそも「調整」するとはなにか?

観察データを用いた因果推論の究極の目的は「フェアな比較」をすることです。

ある介入Aの効果を知りたいときは介入群と非介入群のアウトカムを比較するわけですが、当然これらの群間では人々の属性が異なることが期待されます。

例えば介入群は非介入群よりも喫煙者が多く、両群のアウトカム(例:死亡率)の差は喫煙によるものかもしれません(つまり介入の効果ではない)。

f:id:KRSK_phs:20201011092246p:plain

「調整」とは、できるだけ両群の属性を似通わせて治療の有無以外の差がないようにすることで「フェアな比較」を実現しようという試みです。

「●●を調整する」というとき、その方法はいくつかあります。

最もよく使われるアプローチは条件付けと呼ばれる方法。

いわゆる重回帰分析による「調整」は本質的にはこの条件付けになります。

直感的には「●●で条件づける」というのは「●●の値が同じ集団を見る」という意味です。

例えば「喫煙で条件づける(調整する)」というのは「(非)喫煙者の集団で比較をする」というのと同じこと。

f:id:KRSK_phs:20201011092333p:plain

多くの要因について条件付けをしていけばいくほど、似通った人たちの集団になっていくというのは想像できると思います。

そしてその均質な集団内で治療群(介入群・曝露群)とコントロール群のアウトカムを比較すれば、治療の有無以外の背景因子は両群で同じとみなせ、アウトカムの差は「治療の効果」によって生じたものであると考えることができるわけです。

条件付けは「●●が同じ人のなかで治療群とコントロール群を比較する」ことでフェアな比較を行いますが、別のアプローチもあります。

それは治療群とコントロール群で「●●の分布が同じ」になるようにすれば、その集団内での群間比較はフェアになるという考え方です。

f:id:KRSK_phs:20201011092628p:plain

いわゆる重み付けやマッチングによる「調整」はこちらのアプローチになります。

こういった「調整」の基本的な考え方については、以前もまとめました。

属性が等しい集団を見る条件付けにしても、治療群間で属性の分布を揃えるアプローチにしても、重要なのはどのような属性について「調整」をしていけばいいかということです。

結局どの属性について「調整」をすればフェアな比較ができていると言えるのでしょうか?

どのようにして、それら「調整すべき変数」を特定したらよいのでしょうか。

教科書的な正解はDAGを書くこと

 「フェアな比較」を実現して、治療効果の推定を可能にするために必要な調整変数のセットをLと呼ぶことにします。

フォーマルには、Lは次のような条件を満たすものです。

  \newcommand{\indep}{\mathop{\perp\!\!\!\!\perp}} Y_a \indep A\ |\ L

これはConditional Exchangeabilityと呼ばれる条件です。

どうすればこのような条件を満たすLを見つけられるのでしょうか?

教科書的な正解はDAGを書くことです。

DAGの書き方、読み方のルールを理解していることを前提で話を進めますのでわからない方は過去記事をご参照ください。

上記の条件を満たすLは「条件付けによってDAG上のすべての裏口経路を閉じるのに必要な(最小限の)変数セット」と定義されます*1

これは一般的によく使われる交絡因子の定義、「アウトカムと曝露の両方と関連する因子」とは異なります。

なぜなら上記の一般的な定義を使ってしまうと、誤って調整すべきでない変数を調整してしまう可能性があるからです。

例えば次のようなDAGを考えてみましょう。

f:id:KRSK_phs:20201108044635p:plain

このDAG上のMのような変数はAともYとも統計的に関連しているので調整されてしまうことがあります。

しかし、MはAがYに与える効果の中間因子なので条件づけてしまうと、Mを経由するAの効果は見ることができないので、AがYに与える効果が過小評価されてしまいます

また、MとYの間に共通原因が存在する場合はMを条件づけると選択バイアスが生じてAの効果を正しく推定できません。

選択バイアスについては以下をご参照ください。 

そして次のようなDAGも考えてみます。

f:id:KRSK_phs:20201108045525p:plain

このDAG上のLは、まず共通原因U1を通してAと関連しています。

そして共通原因U2を通してYとも関連しているので、調整すべき変数として選ばれる可能性があります。

しかし、LはU1とU2の共通効果(Collider)なので条件付けてしまうとやはり選択バイアスが生じます

このような因果構造から生じる選択バイアスは(DAGの形から)Mバイアスと呼ばれることもあります。

いずれのパターンも共通しているのは、「統計的な基準だけに基づくと誤って調整してしまうが、DAGを書いていれば調整すべきでないことがわかる」ということです。

調整変数選択のための3つの実践的なアプローチ

ところが一度「正しいDAG」を書こうとしてみると半端なく難しいことがわかると思います。

変数の数が増えれば増えるほど、考えなければいけない矢印のパターン(変数間の関係性)も爆増です。

そもそも、変数間の正しい関係性が良くわかっていないからこそデータ分析をしたいのに、正しく分析するためにはその前提知識が必要になるというジレンマ・・・

では、完全なDAGがわからない状況でどのように調整すべき変数を選択していけばいいのか?

ここでは冒頭で紹介したVanderWeele (2019)に書いてあるアプローチを紹介します。

Pre-treatment Criterion

最もシンプルな方法は、「曝露因子よりも時間的に前に測定された変数をすべて調整する」というもの(Pre-treatment Criterion)です。

時間的に曝露因子より前のものしか調整しないので、上記のDAGの変数Mのように曝露とアウトカムの中間因子を誤って調整するのを防ぐことができます。

また、時間的なタイミングだけに基づいて調整変数を選択するのでドメイン知識が必要ないというお手軽さがあります。

しかし、当然このようなシンプルな方法には弱点があります。

Pre-treatment Criterionでは先ほど説明したようなMバイアスを引き起こす変数Lを誤って選択してしまう可能性があります。

Common Cause Approach

Pre-treatment Criterionの弱点を克服する調整変数選択の方法として、Common Cause Approachがあります。

このアプローチでは、「曝露因子AとアウトカムYの両方に効果を与える要因(共通原因)」を調整変数として選択していきます。

共通原因であれば条件付けてもM-biasは起きません

ところが、このアプローチにも弱点があります。

1つ目の弱点は、要求されるドメイン知識の量が多いこと。

調整変数間の関係性はわからなくて良いので完全なDAGを書くことに比べたらマシですが、やはりある変数が曝露とアウトカムの"両方"に影響するかどうかを判断するには強めのドメイン知識が必要です。

2つ目の弱点は、選択される調整変数が保守的になりすぎること。

ここで「保守的」というのは、「本来は調整すべきな変数が含まれない」という意味だと思ってください。

次のDAGを考えましょう。

f:id:KRSK_phs:20201108052949p:plain

変数Uは曝露AとアウトカムYの共通原因ですが、未測定の変数であるため調整できないとします。

しかしDAGのルールにのっとれば、UとAの中間因子であるCのデータさえあれば、Cの条件付けで問題なくバイアスを除去することができます。

ところが変数CはAに効果を与えているものの、Yの直接の原因ではないので「共通原因」ではありませんから、Common Cause Criterionでは調整変数として選択されないことになってしまいます。

Disjunctive Cause Criterion

最後に出てくるのはDisjunctive Cause Criterionというものです。

これは「曝露AとアウトカムYのどちらか少なくとも一方に効果を与える要因」を調整変数として選択していくアプローチ。

調整変数が曝露AとアウトカムYの少なくともどちらか一方の直接の原因であれば、前述のMバイアスは起きません

また、Common Cause Approachでは見逃されていた未測定共通原因と曝露Aの中間因子Cのような変数も調整変数として漏れなく選択することができます。 

必要とされるドメイン知識の量もCommon Cause Approachと比べれば少なくなります

おそらくこれが最も現実的な変数選択のアプローチなのではないかなと思います。

論文中では「交絡除去に足りる共変量のセットが存在するならば、Disjunctive Cause Criterionで選ばれた変数のセットでも交絡の調整ができる(意訳)」ことが証明されているとあります(知らなかった)。

とはいえ、注意すべきポイントがないわけではありません。

1つ目の注意点は「操作変数的な変数を調整しないようにする」です。

f:id:KRSK_phs:20201108055049p:plain

上のDAGのように未測定交絡因子Uが存在しているとき、「曝露には影響するけどアウトカムには暴露を通して以外影響しない変数Z」を条件づけると未測定交絡因子Uによるバイアスが増大されてしまうそう(知らなかった)。

このような条件を満たすZはいわゆる操作変数と呼ばれますよね。

このバイアスはZバイアスと呼ばれているようです。

2つ目の注意点は「Disjunctive Cause Criterionを満たす調整変数が未測定でもその変数のプロキシがあれば積極的に調整すべき」というものです。

f:id:KRSK_phs:20201108055207p:plain

例えば上のDAGのUはDisjunctive Cause Criterionを満たす(というより共通原因でもある)ので調整すべき変数です。

ところがこのUが未測定だからといって交絡バイアスの除去を諦める必要はありません。

Uに影響を受ける変数Cのようなものが存在していて、そのデータがある場合はCを条件づけることで"部分的に"Uによるバイアスを除去することができます

完全には除去できませんが、それでも何もしないよりはだいぶマシです。

UがCに与える影響が強ければ強いほど、Cの条件付けで除去できるバイアスは大きくなります。

このようなCは「Uのプロキシー(代替変数)」もしくは「Uが測定誤差をもって測定されたもの」として捉えることができますね。

調整変数測定のタイミングについて

曝露と調整変数のデータが同じタイミングで測定されている(例:同じ質問紙調査に含まれている項目)ことはよくあると思います。

でも、交絡因子として条件付けられている調整変数が実は曝露の効果の中間因子である可能性がありますよね。

このような問題を避けるため、VanderWeele (2019)では可能な限り調整変数と曝露は別の時点で測定されているものを使用することが推奨されています。

一時点での曝露効果の推定に関心がある時でも「過去の曝露因子」を条件づけることで交絡の除去をより強固にすることができるという視点も書いてあり、とても面白かったです。

なんとなく、エコノメの固定効果分析に通じるものがある考え方だなと思いました。

データドリブンなアプローチは?

データドリブンに変数選択をする方法についても解説があるのもこの論文の特徴です。

Forward and Backward selectionやHigh-dimensional propensity scoreなどについてそれぞれ利点と欠点が説明されていますので興味のある方はぜひどうぞ。

細かい議論は原著を読んでもらうとして、データドリブンなアプローチを考えるうえで重要だと思うポイントを2つ紹介します。

1つ目は「まず最初はドメイン知識に基づいて変数選択が必要」ということ。

あくまでDisjunctive Cause Criterionなどで選んだ調整変数のリストから、その数を減らすためにデータドリブンなアプローチを使えるだけです。

とにかく大量のデータを投げてデータドリブンで調整変数を選択させてしまうと、前述のMバイアスや中間因子の調整などが入ってきますのでかえってバイアスが生じてしまいます。

2つ目は「そもそもデータドリブンな方法が必要なのかを考える」ということ。

ドメイン知識に基づいて調整変数の選択をしてからしか使えないのであれば、わざわざそこから数を減らさなくても全て調整してしまえばいいじゃないかという気持ちになります。

あえて調整変数の数を減らしたいときはどんなときでしょうか?

サンプルサイズが小さいのに調整変数の数が非常に多い場合などは、そのまま全てを条件づけるのが難しくなります。

そういう場合はデータドリブンな変数選択が役に立つかもしれませんが、データが大きいときには無理にに変数の数を減らさなくても全て調整すればいいだけですよね。

ドメイン知識が不完全なとき

Disjunctive Cause Criterionを使うことで完全なDAGを作ることに比べると必要なドメイン知識の量はグッと減ります。

しかしそれでもドメイン知識が完全であることは稀ですし、調整すべき変数だとわかっていてもデータが揃っていない場合だってあります。

つまりどんなに頑張ってもバイアスを完璧に除去することはできないですよね。

では(ドメイン知識に基づくバイアス調整を行う)観察データを用いた因果推論に希望はないのか?

私はそう考えません。

2点重要なポイントがあると思います。

感度分析をおこなう

「調整できていない交絡があるからこの分析の結果は信用できない」というのはよくある批判ですが非常に浅い議論だと思っています。

バイアスの方向や大きさについて考えて、取り除けていないバイアスが分析から得られた結論を覆すようなものかどうかを議論しなければ生産的な批判ではないからです。

未調整のバイアスに対して仮定を置きながら、その大きさを定量化していく作業をQuantitative bias analysisと呼びます。

興味のある方は教科書もありますから調べてみてください。

最近流行っていてかつシンプルな方法だとe-valueというものがあります。

この辺りの話題は過去解説したので、ぜひ読んでみてください。
 

未調整のバイアスの大きさは調整済み変数に依存

Quantitative bias analysisの話とも関連してきますが、基本的に「未調整のバイアスの大きさは他に多くの変数について条件付けをすればするほど小さくなっていく」と期待してよいと思います。

平たい言葉でいえば調整変数を条件づける最大の目的は「フェアな比較」をすることでしたよね。

薬を飲んでいる人と飲んでいない人では背景因子が異なるので、単純に比較してみられるアウトカムの差は背景因子の違いによるものかもしれない。

例えば薬を飲んでいない人は喫煙者が多いかもしれず、薬を飲んでいない人で健康状態が悪いのは薬のせいではなく喫煙のせいではないかもしれない。

だから背景因子を調整するわけです。

仮に背景因子として、既往歴・年齢・性別・年収・学歴などを調整していったとします。

でも喫煙の有無についてのデータはないので、喫煙によるバイアスは残ったままです。

でも単純に薬を飲んでいる人vs飲んでいない人全体を比べたときの喫煙者の割合の差と比べると、これらの背景因子を条件付けたあとでの喫煙割合の群間差は小さくなりそうですよね。

「既往歴・年齢・性別・年収・学歴が同じ集団内」で薬を飲んでいるひとと飲んでいないひとを比べたら、同じような特徴をもつ集団なわけですから喫煙割合もだいぶ似通ってきそうです。

なのでそのほかの変数の条件付け後は、喫煙という背景因子によるバイアスの影響はそこまで大きくないかもしれないと考えることができます。

あくまで程度の問題ですが、バイアスは「あり・なし」の二値ではないというのを考えるうえで重要なポイントだと思います。

*1:Structural definition of confoundersといいます