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)
以下のような図が描かれる
注:得られたλをそのまま採用するのではなく,意味の明らかな近傍の値を採用するべきである。
たとえば上の図では,λ = 0 すなわち,対数変換をするのが妥当であろう。
λ = 0.5 は,平方根変換
λ = -1 は逆数変換
λ = 1 のときは,単なる線形変換(もとのデータから 1 引くだけ)なので,分布型は変わらない。
直前のページへ戻る
E-mail to Shigenobu AOKI