Box-Cox 変換の,最適のλ     Last modified: Oct 13, 2004

目的

Box-Cox 変換の,最適のλを図により求める

使用法

Box.Cox.transformation(x, l=-3, r=3, delta=0.1)

引数

x       データベクトル
l, r    λの探索範囲
delta   探索ステップ

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/Box_Cox_transformation.R", encoding="euc-jp")

# Box-Cox 変換の,最適のλを図により求める
Box.Cox.transformation <- function(  x,                      # データ
                                        l=-3, r=3,              # λの探索範囲
                                        delta=0.1)              # 探索ステップ
{
        x <- x[!is.na(x)]                                    # 有効データのみを対象とする
        Gm <- exp(mean(log(x)))                                      # 幾何平均を求める
        lambda0 <- seq(l, r, delta)                          # 候補とするλの値のベクトル
        result <- numeric(length(lambda0))                   # 変換値を保存するベクトル
        for (i in seq(along=lambda0)) {                         # λの各候補ごとに,
                lambda <- lambda0[i]
                if (lambda == 0) {
                        w <- Gm*log(x)
                }
                else {
                        w <- (x^lambda-1)/(lambda*Gm^(lambda-1))
                }
                result[i] <- sd(w)                           # 変換結果を保管
        }
        plot(lambda0, result, type="l")                         # 図に描く
}


使用例

> x <- c(5.0, 5.0, 3.3, 4.3, 4.0, 5.5, 4.0, 6.0, 5.0, 5.0, 4.0, 4.3, 5.3, 5.0, 6.0, 6.7, 6.5, 6.0, 6.0, 5.3, 7.0, 5.0, 6.3, 5.3, 4.5, 6.0, 7.0,
+ 2.0, 2.5, 1.5, 1.7, 1.0, 1.0, 2.0, 1.0, 1.7, 2.0, 2.0, 1.0, 1.3, 2.5, 1.0, 2.0, 2.0, 1.0, 3.0, 1.3, 1.0, 2.0, 2.0, 1.7, 1.0, 1.0, 1.0,
+ 4.0, 5.3, 3.0, 3.7, 2.7, 3.3, 5.0, 2.7, 4.7, 3.7, 3.7, 4.0, 4.7, 4.3, 5.7, 4.7, 5.3, 5.5, 4.3, 7.0, 5.0, 5.3, 5.7, 5.3, 4.3, 5.0, 5.0, 5.0, 4.3, 4.7,
+ 1.3, 1.3, 1.3, 1.7, 2.0, 1.0, 1.3, 1.3, 1.7, 1.7, 1.3, 1.3, 1.3, 2.3, 2.0, 2.7, 2.0, 1.7, 2.3, 1.0, 2.0, 2.0, 2.0, 1.7, 2.0, 1.3, 1.3, 2.0, 1.3, 1.7,
+ 5.0, 5.0, 3.7, 3.3, 3.0, 3.5, 3.3, 3.0, 3.0, 4.3, 3.7, 4.0, 4.0, 3.3, 5.0, 6.0, 4.0, 4.0, 5.7, 5.5, 5.5, 5.5, 5.3, 4.7, 5.0, 4.3, 4.3, 3.0, 6.0,
+ 2.3, 1.7, 2.0, 1.0, 1.5, 1.0, 1.0, 2.0, 1.0, 2.0, 1.3, 1.7, 1.7, 2.0, 2.0, 2.0, 1.7, 2.0, 1.7, 0.5, 1.7, 1.3, 1.7, 2.3, 2.0, 1.0, 1.0, 1.3, 2.0,
+ 2.0, 5.5, 3.5, 5.3, 5.0, 6.0, 8.0, 6.0, 4.0,
+ 2.0, 3.0, 2.5, 2.0, 1.0, 2.0, 1.0, 3.0, 2.0)

> Box.Cox.transformation(x)

以下のような図が描かれる

fig

・ 注:得られたλをそのまま採用するのではなく,意味の明らかな近傍の値を採用するべきである。
   たとえば上の図では,λ = 0 すなわち,対数変換をするのが妥当であろう。
   λ = 0.5 は,平方根変換
   λ = -1 は逆数変換
   λ = 1 のときは,単なる線形変換(もとのデータから 1 引くだけ)なので,分布型は変わらない。


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh