DTAL(旧RCEAL)留学記録

2010年1月から2014年半ばまで在学していたケンブリッジ大学理論・応用言語学科でPhDを取得するまでの記録です。

対数変換と一般化線形モデル

免責事項
以下は私がここ一ヶ月強ほどで学習した内容ですので、誤っている可能性があります。誤りを発見された方はご指摘を頂けると嬉しいです。


主旨
Rで以下の二者は同一のモデルを構築すると思っていたのが、間違っていましたという話です。

1. lm(log(y) ~ x)
2. glm(y ~ x, family = gaussian(link = log))


背景
必要があり、指数関数(E(y) = c + ae^{bx})あるいは冪関数(E(y) = c + ax^b)に従う二変量(xとy)をRでモデル化する方法について調べていました。


私のこれまでの理解は、以前は変数変換を施すことにより誤差を正規分布に近づけ、それに最小二乗法に基づく線形モデルを当てはめていたのが、近年では一般化線形モデルを用いることにより正規分布以外の誤差も扱えるようになり、そちらを使うことが多い、というものでした。つまり一般化線形モデルが変数変換に取って代わったと思っていました。しかしこれは大きな誤りで、実際は二者は異なる前提を持つモデルで、どちらを用いるかはデータ(の前提)に依るということを学びましたので、備忘録を兼ねて以下にメモしておきます。


以下の指数関数を考えます。
E(y) = ae^{bx}
但しeネイピア数\approx 2.718)、aとbをデータから推定します。ポイントは平均がゼロで正規分布に従う誤差項(\epsilon)はどこに入るか。


1. \epsilonが指数内に入る場合
Rでは単純に従属変数に対数変換を施した、lm(log(y) ~ x)という式がこれに当たります。


y = ae^{bx + \epsilon}


以下のようにも変形できます。logは自然対数(底はe)です。
log(y) = A + bx + \epsilon (但しA = log(a)
E[log(y)] = A + bx


二つ目の式では線形予測子(A + bx)とlog(y)の二乗和が最小となるようなAとbが推定されます。さてここでは\epsilonがyではなく、yの対数スケールでの誤差を吸収します。このため、最小二乗法を用いて最小となるのは対数スケールでの実測値と予測値の差の二乗和であり、オリジナルスケールでのそれではありません。誤差項(\epsilon)が表すのは通常の最小二乗法のように実測値と予測値の差の二乗ではなく、実測値と予測値の比です。従ってこれを乗法的(multiplicative)な誤差構造と呼びます。


また対数スケールでの加算はオリジナルスケールでの乗算になるので、\epsilon正規分布すると、e^\epsilonここにある図のように対数正規分布(正の歪みがある分布)します。


そして誤差を乗算で算出する結果、このモデルは正の方向の誤差には(負の方向の誤差と比較して)影響を受けづらく、そちらの方向の外れ値には頑健です。


さて対数正規分布正規分布とは異なり、分散が平均に依存します。厳密には変動係数が一定である、すなわち分散は平均の二乗に比例するようです。つまり、誤差はyの予測値が大きいほど大きいと仮定します。


2. \epsilonが線形に入る場合
Rでは対数リンク関数+正規分布の一般化線形モデルを用いた、glm(y ~ x, family = gaussian(link = log))という式がこれに当たります。


y = ae^{bx} + \epsilon
E[y] = ae^{bx}
log(E[y]) = A + bx
あるいは
y + \epsilon = ae^{bx}(単純に移行すると-\epsilonですが、平均ゼロの誤差ですので符号を変えなくても影響は同じです)
log(y + \epsilon) = A + bx


四つ目の式が分かりやすいと思うのですが、この場合、\epsilonが吸収するのはオリジナルスケールでの実測値(y)と予測値(ae^{bx})の差です。このため、aとbはオリジナルスケールでの二者の差が最小となるように推定されます。つまり誤差項が表すのはオリジナルスケールでの二者の差であり、従ってこれを加法的(additive)な誤差構造と呼びます。誤差構造は通常の回帰モデルと同様に分散が一定の正規分布で、従って乗法的な誤差構造と比較すると正の方向の外れ値に影響を受けやすいとも言えます。


また三つ目の式と1での記述から、E[log(y)]とlog(E[y])が異なる意味を持つことがわかります。


どちらを用いるべきか
乗法的な誤差構造を仮定するなら対数変換、加法的な誤差構造を仮定するなら一般化線形モデル、というのが指針になります。一般的に冪関数や指数関数は乗法的な誤差構造を持つことが多いようですが、図などを見て決めることが推奨されているようです。


参考文献
主に以下の書籍、論文、ウェブサイトを参考にしました。Venables and Dichmont (2004)は私にとって馴染みのない分野での統計手法の話ですが、少なくとも一般化線形モデルに関しての記述はわかりやすく、とりわけ参考になりました。