統計ER

統計ソフトRの使い方を中心に、統計解析方法の解説をするブログ。ありそうでなかなか見つからないサンプルサイズ計算などニッチな方法について紹介しています。

EZRで連続量を正規分布にする方法 Box-Cox 変換

Toukei Consul Banner

KH Coder Consul Banner

連続量を何らかの方法で正規分布に近づける方法はいくつかある。

よく使う方法は自然対数をとる方法だ。

ここではBox-Cox変換の方法をまとめてみた。

EZRでBox-Cox変換を行うには?

EZRでBox-Cox変換を行うには、メニューからはできないので、Rスクリプトで対応することになる。

まず、Rスクリプト枠に以下のように書いて実行する。

これは、すでにインストールされている car パッケージを呼び出している。

library(car)

car パッケージの中の、powerTransform()とbcpower()を使って変換する。

EZRでBox-Cox変換してみた!

例に使うのは、EZR公式マニュアルの付録でついてくるデータ ElderlyAML 内のLDHのデータである。

f:id:toukeier:20211021194109p:plain
ElderlyAMLデータセット内のLDH

powerTransform()で、 \lambda (ラムダ)というパラメータを推定する。

Box-Cox変換にはこのパラメータが必要になる。

ptf.LDH1 <- powerTransform(ElderlyAML$LDH)

 \lambdaを確認してみると、 -0.3184011であった。

> ptf.LDH1$lambda
ElderlyAML$LDH 
    -0.3184011

次に、bcPower()を使って、先ほど計算した \lambdaを用いて、Box-Cox変換を行う。

bc.LDH1という新しい名前の変数にする。

bc.LDH1 <- bcPower(ElderlyAML$LDH, ptf.LDH1$lambda)

要約値を出してみても、よくわからない値になっている。

LDHは、通常、数百程度の値なので、全然想像がつかない。

> summary(bc.LDH1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  2.444   2.597   2.656   2.662   2.737   2.862       1

EZRでBox-Cox変換した値の分布を確認してみる

ヒストグラムでデータの分布を確認してみる。

まず、元のデータをそのまま使ってヒストグラムを描いてみると、ものの見事に右に裾を引いている。

hist(ElderlyAML$LDH)

f:id:toukeier:20211021193627p:plain
元データのヒストグラム

Box-Cox変換後の値を使うと、非常にきれいな左右対称の分布になっていることがわかる。

hist(bc.LDH1)

f:id:toukeier:20211021193709p:plain
Box-Cox変換した後のヒストグラム

ちなみに、よく知られている自然対数変換の場合は、元のデータよりは左右対称になっているが、中央より少し低いところで、狭い範囲に集中しすぎているようなグラフになるため、Box-Cox変換のほうが優れているように思える。

hist(log(ElderlyAML$LDH))

f:id:toukeier:20211021193754p:plain
自然対数変換した後のヒストグラム

EZRでBox-Cox変換した値を逆変換して元の世界に戻す方法

Box-Cox変換は、式で表すと  \lambda がゼロでない場合は以下のようになる。

 \displaystyle y(\lambda) = \frac{y^{\lambda}-1}{\lambda}

なので、逆変換するならば、

 \displaystyle (y \times \lambda + 1) ^ {1/\lambda}

で計算できる。

先ほど変換した値 bc.LDH1 を元に戻すならば、以下のようにすると元に戻る。

Box-Cox変換した値を使って、回帰分析を行った後に、予測値を使うために、元に戻したい場合などに使う。

rev.LDH1 <- (bc.LDH1 * ptf.LDH1$lambda + 1)^(1/ptf.LDH1$lambda)

summary()をとってみると、完全に一致していて、元に戻ったことがわかる。

> summary(rev.LDH1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  113.0   246.5   355.0   518.9   629.5  2007.0       1 

> summary(ElderlyAML$LDH)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  113.0   246.5   355.0   518.9   629.5  2007.0       1

まとめ

正規分布していない連続量を正規分布に近づける方法として、EZRでBox-Cox変換を行ってみた。

自然対数変換でうまくいかないときの奥の手として知っておくと、助かることがあるかもしれない。

参考ウェブサイト

Box-cox変換を用いて正規分布に従わないデータを解析をしてみよう!|スタビジ

EZR公式マニュアル

しっかり学びたい人向け。