読了:Leeper (2018) Rのmarginsパッケージで回帰モデルの平均限界効果を求める

Leeper, T.J. (2018) Interpreting Regression Results using Average Marginal Effects with R’s margins.

Rのmarginsパッケージのvignetteのひとつ(技術詳細編)。これまでこういうパッケージは全然使ってなかったんだけど、実戦投入しようかと思って目を通した。

 いわく。
 たとえば、国の人口を目的変数、ひとりあたりGDPの対数と平均寿命を説明変数にしたOLS回帰をやったとするじゃないですか。で、平均寿命の係数が2586だったとするじゃないですか。その解釈は「平均寿命xが1単位変わったとき、国の人口は2586人変わる、他の項は一定として」じゃないですか。この係数は、データセット上のどの事例についても一定、他の変数の値がどうであれ一定、平均寿命のもとの値が高かろうが低かろうが一定、なわけです。つまりこれはunconditionalにmarginalな効果である。

 モデルに2次の項とか交互作用とかがはいっていると、係数の意味を伝えるのは難しくなる。たとえば上の例で、ひとりあたりGDBの対数と平均寿命の交互作用項をモデルにいれてしまうと、平均寿命の係数は「ひとりあたりGDPの対数が0であるときのmarginalな効果」という意味しかもたなくなる。[おいおい、この場合についてもmarginalっていうんだ…]
 モデルに非線形変換がはいっていると話はもっとややこしくなり、どの変数の係数も直接には解釈できなくなる。たとえばロジスティック回帰の場合、目的変数の確率に対するある説明変数のmarginalな効果は、他のすべての説明変数の関数になってしまう。

 さて、我々が関心を持つ量は係数の推定値のほかにもある。3つ挙げると、

  • (1)Xの特定の値における予測値(fitted value),
  • (2)Xの平均における予測値、
  • (3)平均的な予測値。

 これらの予測値から discrete changesというか”first difference”を求めることができる。つまり、共変量が1単位変わったときに予測値がどれだけ変わるかである。
 ここでmarginalな効果を求めることもできる。つまり、他の共変量を固定したときの、ある共変量の傾きである。

  • (1)からは代表的な値におけるmarginalな効果(MER),
  • (2)からは平均におけるmarginalな効果(MEM),
  • (3)からはaverage marginal効果(AME; すべての観察値におけるmarginal effectを求めて平均した値)が得られる。

AMEがもっとも自然な要約である。

 ところで、King et al.(2000)いわく、marginal effectはよろしくない。なぜなら(1)計算が大変。(2)そういう微分ベースの量をプレゼンする際には不確実性についての言明が消えがちである。
 (1)はたしかにその通りなんですが、我らがmarginsパッケージはがんばってます。(2)についていえば、後述するように我々はdelta法アプローチをとります。King先生たちのようにbootstrappingでやるというのももちろんありです。
 [なるほど… 著者らのスタンスがわかってきた。King先生たちと同じく、モデルのパラメータ推定値をプレゼンしててはだめだという問題意識があるんだけど、シミュレーションではなくて、推定された回帰平面を(その式を見ないで)うまいこと記述する方法を考えようとしているわけね]

 おまたせしました。ここからはmarginsパッケージが提供する計算についてご説明します。

 仮にmarginal effectを手で出せっていわれたら、回帰式を偏微分するだろう。$$ \hat{Y} = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3 X_1 X_2$$を\( X_1 \)に関して偏微分すると $$ \frac{\partial Y}{\partial X_1} = \beta_1 + \beta_3 X_2$$というように、(1)関心ある変数を含んでいる項の係数がどれかを決めて、(2)その変数に関して回帰式を偏微分して、(3)偏導関数の計算を実装すればよい。
 問題は、ひとは往々にして偏微分を間違えるという点である。Rのderiv()を使えっていわれるかもしれないけど、でもたとえば左辺にXの二次の項があるとき、それをデータに変数として持たせておいてformulaに渡していると、そのformula()をderiv()しでもだめである。

 そこで数値微分 (偏導関数を数値的に近似すること)を使います。つまり、それぞれのデータ点について\(\hat{y}\)を求め、さらに\(x\)を少しだけ変えてまた求めます。$$ f'(x) = lim_{h\rightarrow 0} \frac{f(x+h)-f(x)}{h} $$ だから、偏導関数の式は知らねど近似できるわけです。まあ実際には$$ f'(x) = lim_{h\rightarrow 0} \frac{f(x+h)-f(x-h)}{2h} $$って考えますけど。\(h\)が結構大きくても案外うまく近似できるもんです。
 [ここからしばらく実装の話。メモは省略するけど、要はモデルのオブジェクトのpredict()をコールする。説明変数がカテゴリカルなときは水準を動かすそうな]

 marginal effect (ME)の分散は… 記号を使って書けば、たとえば冒頭の例では $$ Var(ME) = J \times Var(\beta) \times J’ $$ となる。\(Var(\beta)\)は回帰係数の分散共分散行列。\(J\)は\(M \times K\)のヤコビアンで、行はmarginal effectに、列は係数に対応する。たとえば\( \frac{\partial Y}{\partial X_1} = g_1(f(X)), \frac{\partial Y}{\partial X_2} = g_2(f(X)), … \)と書くとして、\(J\)の1行1列目は\( \frac{\partial g_1}{\partial \beta_0}\), 1行2列目は \( \frac{\partial g_1}{\partial \beta_1}\), … ですね。\(X\)は定数で\(\beta\)が変数だとみなし、\(\beta\)に関する偏導関数がはいっているというのが直感に反するところである。
 marginsパッケージはヤコビアンについても数値的近似を用いる。データとモデル・オブジェクトを入力とし、データを観察値に固定したまま係数を変えた関数を量産する「関数工場」をつくり、もとのデータに対してpredict()を走らせまくる。

 パッケージの機能紹介… [メモは省略するけど、受け付けるモデルオブジェクトはいまのところlm, glm, loessだそうである。混合モデルは無理って事ね]

 他のパッケージとの比較。

  • carパッケージ。記号的な導関数を使うので、記号的にはっきりに書けるような効果しか求められない。
  • effectsパッケージ。carと同様だし、なかでなにやってんのかはっきりしない。
  • lsmeansパッケージ。線型モデル、GLM、混合モデル[!]の予測された平均を計算できる。
  • mfxパッケージ。一般的なGLMのmarginalな効果を出せるんだけど、交互作用項をうまく扱えない模様。
  • ererパッケージ。mfxと同様。
  • DAMiscパッケージ。交互作用項を扱えるんだけど…[批判が書いてある]
  • interflexパッケージ, interplotパッケージ, plotMElmパッケージ… モデルが限定されている。
  • modmargパッケージ。これは我らがmarginsパッケージといい勝負。
  • interactionTestパッケージ… 交互作用があるときのmarginal effectのFDRを求めることができるんだけど、二元交互作用に限定。
  • visregパッケージ。latticeベースの視覚化を提供している。
  • condisvisパッケージ, LinRegInteractiveパッケージ。これらも視覚化を提供。

Stataとの比較… [メモ略。そもそもこのパッケージはStataのmarginsというコマンドの再現を狙っている]

 … というわけで、ざーっと目を通しただけだけど、意外にわかりやすいというか、結構ナイーブなことをやっているという点が面白かった。要は「lmオブジェクトとかglmオブジェクトとかを渡すと、(たとえば)すべての学習データ点をちょっとだけ動かしたら予測値の平均がどう変わるかを調べてくれる」わけね。

 非常に初歩的な疑問で恥ずかしいのだが、marginalとかconditionalという言葉はいったいどういう意味なのだろうか、と考え込んでしまった。
 いまここにX1, X2, Yの同時分布があるとして、X2を無視してX1とYの周辺(marginal)同時分布に注目することもできるし、X2を固定した下でのX1とYの条件付き(conditional)同時分布に注目することもできる。前者は単相関や単回帰係数に、後者は偏相関や偏回帰係数に対応する。その意味では、偏回帰係数は常にconditionalだと思うのである。
 いっぽうこの資料でいうmarginalとは、おそらく他の変数を条件付けるかどうかという意味合いは含んでいなくて、「回帰平面の傾き」という意味でしかないと思う。仮にモデルが Y = a + bX + cX^2 であったとしても、Xに関して微分したのをmarginal effectっていうのではなかろうか。訳するのなら「周辺」ではなく「限界」なのであろう。
 いっぽうconditional/unconditionalという言葉は、あるmarginal effectが他の変数に条件付けられているかどうかという意味で用いられているのではないかと思う。冒頭で交互作用項がない線型モデルの偏回帰係数を指してunconditional marginal effectと呼んでいるのは、おそらく、回帰平面上での傾きが他の変数の値に依存しないという意味だ。ってことは、そういう表現は用いられていないけど、MER, MAM, AMEはすべてconditional marginal effect ってことになるのかしらん。
 うーん。marginalとかconditionalといった基本的な言葉が、こういう風に場面によって違う意味で使われている、と解してかまわないのだろうか。それとも私がなにかを本質的に勘違いしているのだろうか。