Take a Risk:林岳彦の研究メモ

自らの研究に関連するエトセトラについてのメモ的ブログです。主にリスク学と統計学を扱っています。

(後編)今回は因果関係があるのに相関関係が見られない4つのケースについてまとめてみた:中間変量の影響

どもっす。林岳彦です。先日、某所で統計解析の講師役をしました。その際に解析環境の準備の手間を省こうと思って、Amazon EC2上にRStudioのサーバー版を立てて、聴講者にそこに繋いでもらって実習をしようとしたのですが、いざ皆が繋いだらサーバーがクラッシュしまくって実習が全く進みませんでした*1 。。。すみませんでした(泣)*2。。


さて。


良かれと思ったもので逆に墓穴を掘る、というのは人生ではよくあることですよね!

前回の「合流点の追加によるバイアス」はそんな例の一つでしたが、今回の「後編」ではそのようなもう一つの例として、「中間変量の追加によるマスク」のケースについて見ていきます。

因果関係があるのに相関が見られないケース(4):中間変量によってマスクされている

はい。では、中間変量によって因果効果がマスクされてしまうケースを見ていきます。

ここで「中間変量」というのは、「A→Z」のような因果関係がある場合に、「A→M→Z」における"M"のような因果の流れの中間に位置づけられるような変量のことを指します。分野によっては、媒介変数とか中間変数とか呼ばれることもあります。(本記事内での「因果」の定義については過去エントリーをご参照ください)


今回の記事では、「A→Z」の因果効果、つまり「Aを変化"させた"ときのZの変化量」に興味がある場合の、中間変量の影響について見ていきます。


今回は仮想例として、「塩分摂取量」が「死亡リスク(死亡率)」に与える影響の例を考えていきます。

具体的には、最も単純な形の一つとして、「塩分摂取量」「死亡リスク」「血圧」が以下のような因果構造を持っている場合を想定していきます(医学的には全く正確ではないかとは思いますが、説明のための便宜としてご容赦ください):


上の図は、「塩分摂取量」が増加すると、「血圧」が増加し、そのこと(のみ)を通じて「死亡リスク」が上昇する因果構造を意味しています。

このような因果構造の場合に、回帰分析を行うとどうなるのか、Rで解析を試行してみましょう(以下のコードのファイルはintermediate.R 直)。


今回も、そもそもの仮想データを生成するところから始めたいと思います。まずは、「塩分摂取量」のデータ(サンプルサイズn=10000人)を以下のように生成します:

# サンプルサイズを10000に設定
n.sample <- 10000
# 平均0、標準偏差1の正規分布から10000個の<span class="deco" style="font-weight:bold;">「塩分摂取量」</span>の値をランダムに生成
Enbun.v <- rnorm(n.sample,mean=0,sd=1)

ここでは、解析の単純化のために塩分摂取量データの数値は「平均0, 標準偏差1」となるよう既に標準化されているものと想定します。

次は、この「塩分摂取量」のデータから、対応する「血圧」のデータを生成します:

# 誤差項の作成
error1.v <- rnorm(n.sample,mean=0,sd=1)
# 「血圧=5×塩分 +誤差+平均値」の関係式により血圧データを作成
ketsuatsu.v <- 5*Enbun.v + error1.v + 70

ここでは「血圧=5×塩分摂取量+誤差+平均値」という関係式をもとに血圧データが作りだされています。この関係式は、「塩分摂取量を1増加させる→血圧は5増加する」という因果関係を意味しています。

さらに、この「血圧」から、対応する「超過死亡リスク」のデータを生成します:

# 誤差項の作成
error2.v <- rnorm(n.sample,mean=0,sd=1)
# 「死亡リスク=0.5×血圧 +誤差」の関係式により死亡リスクデータを作成
tyouka_shibou_caseA.v <- 0.5*ketsuatsu.v + error2.v

ここでは「超過死亡リスク=0.5×血圧 +誤差」という関係式をもと超過死亡リスクデータが作りだされています。ここでは便宜的に、「超過死亡リスク」は「1万人あたりの死亡数の(ベースラインに対する)上昇分」の値であるとします。上記の関係式は、「血圧を1増加させる→死亡リスクは0.5増加する」という因果関係を意味します。

最後に、各データをデータフレームにまとめて中身をみると:

> # 生成したデータをデータフレームの形でまとめる
> Enbun_Shibou.df <- data.frame(ENBUN = Enbun.v, KETSUATSU = ketsuatsu.v, SHIBOU = tyouka_shibou_caseA.v)
> # データフレームの最初の数行の中身を見る
> head(Enbun_Shibou.df)
        ENBUN   KETSUATSU   SHIBOU
1 -0.19187249  70.56252       34.63921
2  0.23711386  72.01089       36.00139
3  1.65857552  79.01415       40.53588
4  0.01811544  70.96663       34.97887
5 -0.14860591  68.18043       33.54352
6  0.59624079  74.54500       36.02395

それぞれの列は塩分摂取量(ENBUN)血圧(KETSUATSU)超過死亡リスク(SHIBOU)のデータの値を表しています。それぞれの行は各個人を表しており、このデータは10000行(=10000人)のデータを含んでいます。

さて、これでデータは準備完了です。


ではまず、データの様子を直感的に理解するために、ペアプロットの散布図を描いてみます*3

# 項目の対ごとに散布図を描く
> pairs(Enbun_Shibou.df[1:500,], col="red", pch=20, ps=0.1)

「塩分摂取量」「血圧」「超過死亡リスク」の全ての間に強い相関があることが分かります。(まあ、そういうふうにデータを作ったので当たり前です)


では、回帰分析を行ってみましょう。

もともとの目的は「塩分摂取量が死亡リスクに与える因果的影響」を見ることでしたので、まずは素直に「超過死亡リスク」を目的変数、「塩分摂取量」を説明変数にして単回帰分析(モデル式:超過死亡リスク= A×塩分摂取量+B)をしてみます:

> # 目的変数「塩分摂取量」、説明変数「超過死亡リスク」の単回帰
> lm_tyouka_shibou_by_Enbun <- lm(tyouka_shibou_caseA.v ~ Enbun.v)
> summary(lm_tyouka_shibou_by_Enbun)
(...中略…)
Coefficients:
            Estimate Std.    Error        t value     Pr(>|t|)   
(Intercept) 34.99540       0.01105   3167.2     <2e-16 ***
Enbun.v      2.49680      0.01108    225.4      <2e-16 ***

解析結果から、「塩分摂取量(Enbun.v)」の回帰係数(『超過死亡リスク= A×塩分摂取量+B』の"A"の値)は「2.49」と推定されています。ここは少し難しいかもですが、データ生成時に用いた関係式から「塩分摂取量1単位の増加→血圧の5単位増加」「血圧の5単位増加→釣果死亡リスクの2.5単位増加」という関係があり、これらをまとめると「塩分摂取量1単位の増加→釣果死亡リスクの2.5単位増加」となるので、上記の回帰式における回帰係数の理論値は「2.5」となります。で、ここの「2.49」という推定値は非常に理論値に近い値をとっており、「塩分摂取量→超過死亡リスク」の因果効果は適切に推定されていることが分かります。

今回の例のような因果構造の場合には、「塩分摂取量→超過死亡リスク」のシンプルな単回帰が、その因果効果の推定において十分な解析となっているわけです。

さて。

ここに「血圧」も変数に加えた重回帰分析をしてみましょう。「超過死亡リスク」を目的変数、説明変数として「塩分摂取量」と「血圧」の2変数を用います(モデル式:超過死亡リスク=A×塩分摂取量+B×血圧+C):

> lm_tyouka_shibou_by_Enbun_kestuatsu <- lm(tyouka_shibou_caseA.v ~ Enbun.v + ketsuatsu.v)
> summary(lm_tyouka_shibou_by_Enbun_kestuatsu)
(...中略…)
Coefficients:
                  Estimate   Std. Error     t value    Pr(>|t|)   
(Intercept)   1.069235   0.697701      1.533      0.125   
Enbun.v      0.075569   0.050775      1.488      0.137   
ketsuatsu.v 0.484687   0.009967    48.631      <2e-16 ***

はい。重回帰の結果を見ると、「超過死亡リスク」への「塩分摂取量(Enbun.v)」の偏回帰係数(『超過死亡リスク=A×塩分摂取量+B×血圧+C』の”A”の値)は「0.076になっています。単回帰での回帰係数「2.49」と比べると実質的にはゼロと言える値にまで小さくなっています。また、有意差も無くなっています(p=0.137)。

これは、そもそも重回帰の偏回帰係数というものが、「他の変数の影響を除去(=他の変数は一定に固定)したとき」の「その説明変数が目的変数に与える影響の大きさ」を示しているからです。ある説明変数の影響が中間変量を介してのみ伝わる場合には、「他の変数を一定に固定した」ときにはその影響が「中間変数の固定」によりマスクされてしまうので、偏回帰係数はゼロになってしまうわけです。


さてさて。上記の重回帰の結果だけを見ると、あたかも「塩分摂取量」は「超過死亡リスク」に影響しないように見えます。はたして、この重回帰の結果から「塩分摂取量→超過死亡リスクの因果関係はない」と結論づけてしまって良いものでしょうか?

この辺りで、因果の「定義」の問題が絡んでくる*4ちょっとヤヤコシイ話になります。

今回の私の一連の記事では、「因果の定義」を:

「要因Aを変化させた(介入した)とき、要因Zも変化する」ときに、「要因A→要因Zの因果関係がある」と呼ぶ

としています。いわゆる「介入効果」を基にした「因果」の定義です(詳しくはここ)。このような「因果」の定義を採る場合には、この重回帰の結果から「塩分摂取量→超過死亡リスクの因果関係はない」と結論づけてしまうのは明らかに誤りと言えます。なぜなら、介入により「塩分摂取量」を1単位変化させると、(因果構造から明らかなように)結果的に「超過死亡率」も変化するからです。

一方、我々は日常的な用法においては、因果のメカニズム(特に、因果の直近の上流-下流関係)に基づいて「因果」という言葉を用いていることも多いように思います。

「因果」の日常的な用法の範囲においては、上記の重回帰の結果は、「塩分摂取量は血圧に対して直接的な因果関係を持ち」、「血圧は超過死亡リスクに対して直接的な因果関係を持つ」という言い方も成り立つように思います。このとき、「塩分摂取量は超過死亡リスクに対して(直接的な)因果効果はない」という言い方も(日常的な用法の範囲としては)おそらく成り立つのかもしれません*5

因果関係の「有無」を巡っては、このように「介入効果に基づく定義」と「メカニズムに基づく定義」のどちらを採るかによって、言い方が変わってくることがあります。


もっとコントラストがわかりやすい例として、今までの図に「塩分摂取量」から「超過死亡リスク」への小さなマイナスの直接的影響の効果を追加した、以下のような因果グラフの場合を考えてみましょう:


この因果グラフにもとづき生成したデータを単回帰および重回帰で解析すると、結果として以下のような回帰式が得られたとします(コードはintermediate.R 直):

単回帰式:超過死亡リスク = 2.3×塩分摂取量 + 定数
重回帰式:超過死亡リスク = -0.12×塩分摂取量 + 0.48×血圧 + 定数

このとき、「塩分摂取量(の1単位増加)が死亡リスクに与える”因果的"影響」は、「介入効果」に基づく定義を採用すれば、単回帰の回帰係数によって示された「+2.3」となります*6。一方、「直近のメカニズム的関係に基づく因果の定義」を採用すれば、重回帰の偏回帰係数よって示された「-0.12」を因果的影響として採る場合もあるかもしれません*7


このような状況において、ある人は端的に「塩分摂取量の増加は死亡リスクを増加させる」と言い、一方で、他の人は端的に「塩分摂取量の増加は死亡リスクを減少させる」という言い方をするかもしれません。

これは、どちらかが本質的に正しいという問題ではなく、(暗黙の前提として)「因果効果」をどう定義しているか、による違いといえるでしょう。

このような定義によるすれ違いを解消するためには、どのような意味で「因果効果」という語を用いているか、また、解析や調査デザインにおいてどのような変数で調整/層別されているのかを常に明確に意識することが大切です。また、可能であれば、上のような因果グラフを実際に描きながら議論をすると非常に捗るでしょう。

そして、このようなケースを前にして一番大事なことは、解析の途中で「そもそも何がしたいのか(介入効果が見たいのか/要因分析がしたいのか/予測したいのか/マイニングしたいのかetc)」を見失わないことです。


(まあ、「迷子になったがゆえにできる発見」というのも時折あるんですけどね...)

今回のまとめ

ではあっさりまとめます。

今回の内容をまとめると:

  • 中間変量を加えることにより「因果効果」が見かけ上マスクされることがあるので注意
  • 「因果」の(しばしば暗黙の)定義によって、同じ現象を見ていても言い方が変わることがあるので注意
  • 解析結果を解釈する際には、どのような変数で調整/層別された上での解析結果なのか常に明確に意識しよう
  • 解析の「そもそもの目的」を見失わないようにしよう

こんなかんじですかね。はい。

あ。一応付け加えておきますが、本記事の主旨は「中間変量を加えたときの偏回帰係数の解釈には気をつけろ」ということであって、決して「どんなときでも中間変量を加えるな」という中間変量dis話ではないので、その旨よろしくお願いいたします。

(例えば、中間変量を付け加えてみることにより新たな介入可能ポイントが見つかったり*8、媒介変数法(フロントドア基準)を用いて因果効果を推定できたりするという利点もあります)

今回のシリーズの全体まとめ

では、今回のシリーズ全体を軽くまとめてみたいと思います:

今回の一連の記事では「因果関係があるのに相関関係が見られない」以下のケースを見てきました:

  • (1)検定力が低い(→過去記事1
  • (2)交絡によるバイアスにより打ち消されてる(→過去記事2
  • (3)合流点バイアスにより打ち消されている(→過去記事3
  • (4)中間変量によりマスクされている(本記事)
  • (補)(ピアソンの相関係数を尺度とした場合に)関連の仕方が線形でない(→過去記事4

はい。いろいろ書きました。お付き合いいただき誠にありがとうございました>読者さまがた

今、自分はジャワでリゾートを満喫しながらこの記事を書いているのですが*9、一連の記事を通して言いたいことは何だったかなぁと思い返してみると、要するに:

調査観察データ*10における因果効果の解析においては、最も重要なのは先ず「検定力・交絡・合流点バイアス・中間変量」の問題がクリアされているかどうかであって、信頼区間とかp値とかは「それらの問題が既にクリアされている」という前提の上で初めて意味をもつ二次的なものにすぎない

ということかもしれません。(今回のシリーズで示されたいろんな例を思い返してみてくださいね)

なんというか、調査観察データにおける「信頼区間とかp値とか」というのは「牛丼の上に載った”紅ショウガ"」みたいなもので、まあ全然重要じゃないとまでは言わないけれども、解析の本体たる「牛丼本体」の具合の議論をしないで”紅ショウガ"の話ばっかりしてるってのもどうなのよ、と思っちゃうような場面を統計結果の議論に関してけっこう見かけるんですよね。

今回の一連のシリーズを通して、統計解析における「信頼区間とかp値とか」以外の部分の重要さが少しでも伝わったらといいなぁ、と思います。

おまけ:因果グラフの理論がもたらす"明晰さ"について

おまけです。

上記の一連のエントリーでは、統計解析における「因果関係」と「相関関係」の顕れ方の関係について色々と書いてきました。この辺りの話は、今までは各研究分野の中で職人芸的に伝承されていた部分が多く、分野によって様々な語られ方をしてきたものだと思われます(なので、この辺りの術語については、しばしば分野間で統一性がありません)。

手前味噌とはなりますが、上記の一連のエントリーの中では、その辺りの話をなるべく統一的な形で整理し、説明できたのではないかと考えております。で、それを可能にしたのは取りも直さず、一連のエントリーの背景にあるJudea Pearlの因果グラフの理論体系のおかげなんです。

Pearlの因果グラフの理論体系は、今まで様々な分野で経験的に試行錯誤的に語られてきたものに対して、背後にある「共通の論理的構造」に着目することにより、非常に統一的かつ明晰な理論的見通しを与えてくれるんですよね。(その様は感動的ですらあると思う)

例えば、シンプソンのパラドックスなんかはPearlの理論を学ぶとかなり明晰な形で理解することができて、Wikipedia英語版のSimpson’s paradoxの項にも書いてあるとおり(強調引用者):

As to why and how a story, not data, should dictate choices, the answer is that it is the story which encodes the causal relationships among the variables. Once we extract these relationships and represent them in a graph called a causal Bayesian network we can test algorithmically whether a given partition, representing confounding variables, gives the correct answer. The test, called "back-door," requires that we check whether the nodes corresponding to the confounding variables intercept certain paths in the graph. This reduces Simpson's Paradox to an exercise in graph theory.

Pearlの理論からもたらされる「バックドア基準」を理解することにより、「シンプソンのパラドックス」なんかはグラフ理論における”an exercise”として何の不思議もなく対処することができるようになります*11


まあ、Pearlの理論を学んだところで私たちが直面している統計学的諸問題が必ずしも解決するとは限らないのですが(逆に「解決不能な問題」であることが判明したりする)、私たちが直面している統計学的諸問題が『何であって何でないのか』が非常に明晰になるというご利益があるかと思います。

そんなこんなで個人的には、「統計的諸問題におけるPearlのグラフ理論の効用」は「哲学的諸問題における分析哲学の効用」にとても似ているかなあ、と思ってます*12


はい。


現場からは以上です。


#あ、次回くらいから「はてなブログ」に引っ越そうかな、と思ってます(なんとなく)。

参考文献

統計的因果推論の鉄板本その1(Rubin系)
統計的因果推論―回帰分析の新しい枠組み (シリーズ・予測と発見の科学)

統計的因果推論―回帰分析の新しい枠組み (シリーズ・予測と発見の科学)

統計的因果推論の鉄板本その2(Pearl系)
Excelで学ぶ共分散構造分析とグラフィカルモデリング

Excelで学ぶ共分散構造分析とグラフィカルモデリング

上の宮川本が難しい方は、こちらからどうぞ。
多変量解析の展開―隠れた構造と因果を推理する (統計科学のフロンティア 5)

多変量解析の展開―隠れた構造と因果を推理する (統計科学のフロンティア 5)

統計的因果推論の入門としてはこの本もオススメできます。
統計的因果推論 -モデル・推論・推測-

統計的因果推論 -モデル・推論・推測-

Pearl師匠の本。いろんな意味で激ムズ。
Modern Epidemiology

Modern Epidemiology

  • 作者: Kenneth J. Rothman,Timothy L. Lash Associate Professor,Sander Greenland
  • 出版社/メーカー: Lippincott Williams & Wilkins
  • 発売日: 2012/12/17
  • メディア: ハードカバー
  • この商品を含むブログを見る
この本(3rd ed)の12章の「Causal Diagrams」の章が(それなりに難しいが)英語が読めて、疫学がベースの人には一番有益な因果グラフ入門かもしれない。

(単なる宣伝)

私が詩を寄稿させていただいた自主制作文芸誌が こちらこちらで買えます(まだまだ赤字らしいのでどぞ4649です)。

*1:結局みなさまにRStudioのデスクトップ版をインストールしていただきました。後で見なおしたらAmazon EC2のマイクロインスタンスではそら落ちるわ、って話ですわ。想定が甘すぎ>俺

*2:統数研あたりが全国の迷える統計講師役のために登録制で使えるぶっといRStudioサーバー版を立ててくれたりしないかなあ(妄想)。。統計実習って実習時間のかなりの部分が皆の解析環境のセットアップに割かれがちなんすよ。。

*3:10000人のデータ全部を描くとゴチャゴチャしすぎるので最初の500データだけプロットしてます

*4:あるいは、めんどくさいオッサンに絡まれがちな

*5:もちろん、日常的な用法はTPOなどに応じてかなり幅があるものなので、これとは違う言い方も同様に成り立ちうるかと思います。

*6:パス分析における「塩分摂取量→超過死亡リスク」の「総合効果」を見ていることになります

*7:パス分析における「塩分摂取量→超過死亡リスク」の「単独効果」を見ていることになります

*8:例えば、今回の解析例は、「血圧」自体も超過死亡リスクを下げるための効果的な介入ポイントであることを示しています

*9:嘘です。本当は午前5:45のマクドナルドで書いてます

*10:実験計画法に基づいた方法により得られたものではないデータ

*11:あるいは、対処不可能な場合には、その対処不可能性が明晰に理解できるようになる

*12:その意味で私は、一ノ瀬正樹氏のベイジアンネットワーク関連の理論に対する評価にはかなり不満があります。Pearlの理論のキモをちゃんと理解してるのかなあ?