Log transformations are often recommended for skewed data, such as monetary measures or certain biological and demographic measures. データを対数変換すると、通常、データのかたまりを広げ、広がっているデータをまとめる効果があります。 例えば、以下は米国50州の面積のヒストグラムです。 9202>
hist(state.area)
対数変換後、ヒストグラムがほぼ対称になっていることに注意してください。 大きな状態を近くに移動し、小さな状態を間隔をあけて配置しています。
hist(log(state.area))
なぜこれを行うのでしょうか。 1 つの理由は、データをより「正常」、つまり対称的にするためです。 正規性を仮定した統計解析を行っている場合、対数変換はこの仮定を満たすのに役立つかもしれません。 もう1つの理由は、線形モデリングの文脈で、分散が一定であるという仮定を満たすのに役立つからです。 さらに、非線形な関係をより線形にするためでもあります。 しかし、対数変換を行うのは簡単ですが、解釈を複雑にする可能性があります。 例えば、対数変換された従属変数で線形モデルをフィットさせたとします。 その係数はどのように解釈すればよいのでしょうか? 対数変換された従属変数と独立変数がある場合はどうでしょうか?
最初に、すぐに役立つ解釈のレシピを提供します。 そして、データを対数変換したときに、私たちのモデルについて何を言っているのか、もう少し深く掘り下げていきます。
解釈のルール
OK、あなたは回帰を実行/線形モデルをフィットし、変数のいくつかは対数変換されています。
- 依存/応答変数だけが対数変換されています。 係数を指数化し、この数字から1を引き、100を掛ける。 これは、独立変数が1単位増加するごとに、レスポンスの増加(または減少)パーセントを与えます。 例: 係数は 0.198 です。 (exp(0.198) – 1) * 100 = 21.9. 独立変数が1ユニット増加するごとに、我々の従属変数は約22%増加します。
- 独立/予測変数のみが対数変換されます。 係数を100で割る。 これは、独立変数の1%増加が従属変数を(係数/100)単位で増加(または減少)させることを教えてくれます。 例:係数は0.198です。 0.198/100 = 0.00198. 独立変数が1%増加するごとに、従属変数は約0.002増加します。 x%増加の場合、係数にlog(1.x)を掛けます。 例 例:独立変数が10%増加するごとに、我々の従属変数は約0.198 * log(1.10) = 0.02増加する。
- 従属/応答変数と独立/予測変数の両方が対数変換される。 係数を独立変数の1%増加に対する従属変数の増加パーセントとして解釈する。 例: 係数は0.198です。 独立変数が1%増加するごとに、従属変数が約0.20%増加します。 xパーセントの増加については、係数の1.x乗を計算し、1を引き、100をかけます。 例 独立変数が20%増加するごとに、従属変数は約 (1.20 0.198 – 1) * 100 = 3.7 パーセント増加します。
What Log Transformations Really Mean for your Models
対数変換されたデータの係数を正しく解釈する方法を知ることは素晴らしいですが、対数変換されたデータを含むときにモデルが正確に何を意味しているかを知ることが重要です。 理解を深めるために、Rを使って、正しい分析のために対数変換を必要とするいくつかのデータをシミュレートしてみましょう。 ここでは、独立変数が1つで、正規分布の誤差があるシンプルなものにします。 まず、対数変換された従属変数を見てみましょう。
x <- seq(0.1,5,length.out = 100)set.seed(1)e <- rnorm(100, mean = 0, sd = 0.2)
最初の行は0.1から5までの100個の値のシーケンスを生成してxに割り当て、次の行では乱数生成器の種を1にしています。同じようにして実行すると、次の行で得られたのと同じランダム生成データが得られるはずです。 コード rnorm(100, mean = 0, sd = 0.2)
は、平均が 0、標準偏差が 0.2 の正規分布から 100 個の値を生成しています。 これが私たちの「誤差」になります。 これは単純な線形回帰の仮定の1つです。データは直線でモデル化できますが、平均0、標準偏差を持つ正規分布から来ると仮定すると、あるランダムな量だけずれることになります。 我々は、誤差をe.
に割り当てます。さて、対数変換された従属変数を作成する準備が整いました。 切片 (1.2) と傾き (0.2) を選び、それに x を掛けて、ランダム誤差 e を加えます。
y <- exp(1.2 + 0.2 * x + e)
なぜ指数化するかというと、次のことに気づくでしょう。
$$text{log}(y) = \beta_0 + \beta_1x$
$text{exp}(\text{log}(y)) = \text{exp}(\beta_0 + \beta_1x)$$
$y = \text{exp}(\beta_0 + \beta_1x)$$
だから対数を使うと、その対数は従属変数が変換されるということは、単純な線形モデルが指数関数化されたことを意味します。 指数の積の法則から、上の最後の行を
$y = \text{exp}(\beta_0) \text{exp}(\beta_1x)$$
これはさらに、我々の独立変数が我々の従属変数と通常の加法関係ではなく、乗法関係を持つことを意味する。 したがって、xの1単位の変化がyに及ぼす影響をパーセントで表す必要がある。
正しいモデルをデータに当てはめると、データを生成するために使用した真のパラメータ値をかなりうまく回復できることに気づきます。
lm1 <- lm(log(y) ~ x)summary(lm1)Call:lm(formula = log(y) ~ x)Residuals: Min 1Q Median 3Q Max -0.4680 -0.1212 0.0031 0.1170 0.4595 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.22643 0.03693 33.20 <2e-16 ***x 0.19818 0.01264 15.68 <2e-16 ***---Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Residual standard error: 0.1805 on 98 degrees of freedomMultiple R-squared: 0.7151,Adjusted R-squared: 0.7122 F-statistic: 246 on 1 and 98 DF, p-value: < 2.2e-16
推定切片の 1.226 は真の値 1.2 に近いです。 推定された傾き0.198は、真の値0.2に非常に近い。
傾きの値を解釈するために、それを指数化する必要があることを思い出してください。
exp(coef(lm1)) x 1.219179
これは、xが1単位増加するごとに、約1.22倍されることを意味します。 あるいは言い換えれば、xが1単位増えるごとにyは約22%増えるということです。 22%を得るには、1を引いて100をかけます。
(exp(coef(lm1)) - 1) * 100 x 21.91786
log(y) の代わりにyだけを当てはめたらどうでしょうか。 対数変換を考えるべきというのは、どのように考えればよいでしょうか。
lm2 <- lm(y ~ x)summary(lm2)Call:lm(formula = y ~ x)Residuals: Min 1Q Median 3Q Max -2.3868 -0.6886 -0.1060 0.5298 3.3383 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 3.00947 0.23643 12.73 <2e-16 ***x 1.16277 0.08089 14.38 <2e-16 ***---Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Residual standard error: 1.156 on 98 degrees of freedomMultiple R-squared: 0.6783,Adjusted R-squared: 0.675 F-statistic: 206.6 on 1 and 98 DF, p-value: < 2.2e-16
確かに、私たちはデータを生成したので、係数が大きく外れており、残留標準誤差がかなり高すぎることがわかります。 しかし、実際の生活では、これを知ることはできません! これが回帰診断の理由です。 チェックすべき重要な仮定は、誤差の分散が一定であることです。 これはスケール-ロケーションプロットで行うことができます。
plot(lm2, which = 3) # 3 = Scale-Location plot
標準化残差が上向きであることに注意してください。 これは、定分散の仮定が破られているサインです。
plot(lm1, which = 3)
傾向線は均一で、残差は一様に散らばっていることがわかります。
これは、定散性の仮定が破られたと疑われる場合、常に従属変数を対数変換する必要があるということですか。 必ずしもそうではありません。 分散が一定でないのは、モデルにおける他の誤った仕様のせいかもしれません。 また、対数変換された従属変数のモデリングが何を意味するか考えてみてください。 それは、予測変数と乗法的な関係を持っているということです。 これは正しいでしょうか? あなたの判断と専門知識を使用してください。
さて、対数変換された独立予測変数のデータを考えてみましょう。 これは生成するのがより簡単です。
y <- 1.2 + 0.2*log(x) + e
もう一度、最初に正しいモデルをフィットし、データを生成するために使用した真の値を回復するために素晴らしい仕事をすることに気がつきます。
coef(lm3)/100 log(x) 0.001997892
これは、x の 1%の増加が従属変数を約 0.002 増加させることを教えてくれます。 なぜ、このようなことがわかるのでしょうか。 少し計算してみましょう。 以下では、xを1から1.01に変えたとき(つまり、1%増加)のyの変化を計算します。
$(\beta_0 + \beta_1 text{log}1.01) – (\beta_0 + \beta_1 text{log}1)$$
$beta_1 text{log}1.01 – \beta_1 text{log}1$
$beta_1(\text{log}1.01) – \beta_1 text{log}1$$$$beta_1(\text{log}1.01) – \text_0.01) $$(\text_0 + ⑅text{log}1.01)01 – \text{log}1)$$
$beta_1}Text{log}Thrac{1.01}{1} = \beta_1text{log}1.01$
傾斜係数にlog(1.01)をかけた結果、ほぼ0.01つまり \frac{1}{100}Θとなることがわかります。 したがって、xが1%増加すると、その係数/100だけ従属変数が増加するという解釈となる。
もう一度、モデル構文で x の対数変換を指定しないことで、間違ったモデルを適合させてみましょう。
lm4 <- lm(y ~ x)
モデルの概要を見ると、係数の推定値が真の値から大きく外れていることがわかります。 しかし、実際には、真の値を知ることはできません。 もう一度、モデルの妥当性を評価するために、診断が必要です。 この場合、有用な診断は、線形性からの逸脱を明らかにすることができる部分残差プロット(partial-residual plot)です。 線形モデルは、予測変数が加法的で、応答変数と線形関係を持つことを仮定していることを思い出してください。 carパッケージは、部分残余プロットを素早く作成するためのcrPlot関数を提供します。 モデルオブジェクトを与えて、どの変数の部分残差図を作りたいかを指定するだけです。
library(car)crPlot(lm4, variable = "x")
直線はxとyの指定した関係を表します。曲線はxとyの観測された関係を要約した滑らかなトレンドラインです。
crPlot(lm3, variable = "log(x)")
滑らかな線とフィットした線は互いにぴったりで、直線性からの深刻な逸脱はないことがわかります。
これは、直線性からの逸脱が見られる場合、対数変換が唯一の修正であるとすぐに仮定すべきであるということではありません! 非線形関係は複雑で、単純な変換では簡単に説明できないかもしれません。 しかし、対数変換はそのような場合に適しているかもしれませんし、確かに検討すべきことです。
最後に、従属変数と独立変数の両方が対数変換されたデータについて考えてみましょう。
y <- exp(1.2 + 0.2 * log(x) + e)
上のコードをよく見てください。 x と y の関係は今、乗法的かつ非線形的です!
いつものように、正しいモデルをフィットすることができ、データを生成するために使用した真の値を回復する素晴らしい仕事をしていることに気づきます:
lm5 <- lm(log(y)~ log(x))summary(lm5)Call:lm(formula = log(y) ~ log(x))Residuals: Min 1Q Median 3Q Max -0.46492 -0.12063 0.00112 0.11661 0.45864 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.22192 0.02308 52.938 < 2e-16 ***log(x) 0.19979 0.02119 9.427 2.12e-15 ***---Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Residual standard error: 0.1806 on 98 degrees of freedomMultiple R-squared: 0.4756,Adjusted R-squared: 0.4702 F-statistic: 88.87 on 1 and 98 DF, p-value: 2.121e-15
x 係数を x で 1% 増加ごとに y でパーセント増加として解釈してください。 この場合、xが1%増加するごとにyが約0.2%増加します。
間違ったモデルをフィットすると、再び目標から大きく外れた係数と残差標準誤差の推定値が生成されます。
lm6 <- lm(y ~ x)summary(lm6)
Scale-Location および Partial-Residual プロットは、私たちのモデルで何か問題があることを示す証拠を提供します。 Scale-Locationプロットは曲がった傾向線を示し、Partial-Residualプロットは一致しない直線と滑らかな線を示しています。
plot(lm6, which = 3)
crPlot(lm6, variable = "x")
正しいモデルは独立変数と従属変数のログ変換を必要とすると、どのようにして現実世界でわかるのでしょうか。 それはないでしょう。 診断プロットやモデリングの経験に基づいて、直感的に判断することはできます。 あるいは、モデル化しているプロセスに関する専門知識があり、その関係が乗法的かつ非線形であると考える十分な理由があるかもしれません。
線形モデルで対数変換された変数を解釈する方法だけでなく、モデルで対数変換された変数が何を意味するのかについて、より良いハンドルがあることを望みます。
この記事に関するご質問やご説明は、UVA Library StatLabにご連絡ください:[email protected]
UVAライブラリStatLab記事のコレクション全体を見る
Clay Ford
Statistical Research Consultant
University of Virginia Library
August 17, 2018