★ ANOVAのためのlog変換,定数cの選び方 ★

 175 ANOVAのためのlog変換,定数cの選び方  迷える子羊  2002/10/16 (水) 09:43
  176 Re: ANOVAのためのlog変換,定数cの選び方  ひの  2002/10/17 (木) 00:41
   181 Re^2: ANOVAのためのlog変換,定数cの選び方  青木繁伸  2002/10/17 (木) 10:59
    182 Re^3: ANOVAのためのlog変換,定数cの選び方  迷える子羊  2002/10/17 (木) 12:15
     184 Re^4: ANOVAのためのlog変換,定数cの選び方  青木繁伸  2002/10/17 (木) 14:02
      190 Re^5: ANOVAのためのlog変換,定数cの選び方  青木繁伸  2002/10/17 (木) 18:41
       191 Re^6: ANOVAのためのlog変換,定数cの選び方  青木繁伸  2002/10/17 (木) 18:41
      185 Re^5: ANOVAのためのlog変換,定数cの選び方  青木繁伸  2002/10/17 (木) 14:07
       186 Re^6: ANOVAのためのlog変換,定数cの選び方  迷える子羊  2002/10/17 (木) 17:27


175. ANOVAのためのlog変換,定数cの選び方  迷える子羊  2002/10/16 (水) 09:43
再びANOVAに関してなのですが,Biometrics,1987,vol.43 p439-456で,ログ変換する際のlog(x+c)でのcの選び方に関する論文を見つけました。
頻度やカウントなどのデータではよくログ変換しますが,c=0のログ変換だったり,値が0の物がある場合には,c=1で計算したりしていますが,この論文ではskewness, kurtosisを最小にするcを選ぶ方法を述べています。
この方法は現在でも使われているのでしょうか?それともほかに良い方法があるのでしょうか?

     [このページのトップへ]


176. Re: ANOVAのためのlog変換,定数cの選び方  ひの  2002/10/17 (木) 00:41
> この方法は現在でも使われているのでしょうか?それともほかに良い方法があるのでしょうか?

 データの分布を正規分布に近づけることに主眼を置くなら,単純な対数変換ではなくてBox-Cox変換という手法があります。

     [このページのトップへ]


181. Re^2: ANOVAのためのlog変換,定数cの選び方  青木繁伸  2002/10/17 (木) 10:59
>  データの分布を正規分布に近づけることに主眼を置くなら,単純な対数変換ではなくてBox-Cox変換という手法があります。

ANOVA の場合は,正規分布に近づけると同時に,各群の分散を同じにすることも必要かも。

http://sato.jfast1.net/Tool/
では,元のデータをオンラインで送信すれば,変換結果を返してくれるようです。
Ruby で書かれたオンライン統計処理システムです。

     [このページのトップへ]


182. Re^3: ANOVAのためのlog変換,定数cの選び方  迷える子羊  2002/10/17 (木) 12:15
ひの様,青木様,どうもありがとうございます!
読んだ論文ではBox-coxの批判もしていたので,新しい方法が出てきているのかと思っていました。でもやはりBox-coxが標準的な変換方法なのですね。

> http://sato.jfast1.net/Tool/
> では,元のデータをオンラインで送信すれば,変換結果を返してくれるようです。
> Ruby で書かれたオンライン統計処理システムです。

こんな便利なサイトがあったとは。
早速試してみます。
ありがとうございました。

     [このページのトップへ]


184. Re^4: ANOVAのためのlog変換,定数cの選び方  青木繁伸  2002/10/17 (木) 14:02
> こんな便利なサイトがあったとは。
> 早速試してみます。

今まで私は,特定のλを使った変数変換しかやらなかった(勧めなかった)のですが,あのサイトでは,λを推定します。計算結果が示されるページの注意書きもありますが,計算されたλどんぴしゃを使うのではなくて,その値の近辺でよく使われるλを使った方が解釈上便利でしょう。

この点からは,次のコメントに示すような R プログラムも有用かも。
推定方法については,
http://www.minitab.com/support/docs/BoxCoxTransformCalculations.pdf
を参考にしました。

     [このページのトップへ]


190. Re^5: ANOVAのためのlog変換,定数cの選び方  青木繁伸  2002/10/17 (木) 18:41
シンプレックス法で最適なλを決定する R プログラムを次のコメントで示しておきます。

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)
Box.Cox.transformation2(x)

のように使います。

     [このページのトップへ]


191. Re^6: ANOVAのためのlog変換,定数cの選び方  青木繁伸  2002/10/17 (木) 18:41
Box.Cox.transformation2 <- function(x, loop = 500, epsilon = 1e-15, Alpha = 2, Beta = 0.5, Gamma = 2)
{
	Gm <- exp(mean(log(x)))
	
	BCsub <- function(lambda)
	{
		if (lambda == 0) {
			w <- Gm*log(x)
		}
		else {
			w <- (x^lambda-1)/(lambda*Gm^(lambda-1))
		}
		sd(w)
	}
	
	pos <- function(x, m)
	{
		ifelse(x[1] == m, 1, 2)
	}
	
	p2 <- p1 <- -3+0.1
	vec <- c(p1, p2)
	
	for (i in 1:loop) {
		
		result <- c(BCsub(vec[1]), BCsub(vec[2]))
		
		h <- pos(result, max(result))
		s <- pos(result, min(result))
		
		ph <- vec[h]
		fh <- result[h]
		ps <- vec[s]
		fs <- result[s]
		
		p0 <- vec[s]
		
		pr <- (1+Alpha)*p0-Alpha*ph
		fr <- BCsub(pr)
		
		if (fr > fh) {
			pc <- Beta*ph+(1-Beta)*p0
			vec[h] <- pc
		}
		else if (fs > fr) {
			pe <- Gamma*pr+(1-Gamma)*p0
			fe <- BCsub(pe)
			if (fr > fe) vec[h] <- pe else vec[h] <- pr
		}
		else {
			 vec[h] <- pr
		}
		if (abs((vec[1]-vec[2])/vec[1]) < epsilon) break
	}
	
	mean(vec)
}

     [このページのトップへ]


185. Re^5: ANOVAのためのlog変換,定数cの選び方  青木繁伸  2002/10/17 (木) 14:07
Box.Cox.transformation <- function(x)
{
    Gm <- exp(mean(log(x)))
    lambda0 <- seq(-3, 3, 0.1)
    result <- rep(0, length(lambda0))

    for (i in 1:length(lambda0)) {
        lambda <- lambda0[i]
        if (lambda == 0) {
            w <- Gm*log(x)
        }
        else {
            w <- (x^lambda-1)/(lambda*Gm^(lambda-1))
        }
        result[i] <- sd(w)
    }
    cbind(lambda0, result)
}

x <- rnorm(100)+5
results <- Box.Cox.transformation(x)
plot(results)

結果(一部)
[40,]     0.9 1.038741 λ,SD の順に示す。
[41,]     1.0 1.036765
[42,]     1.1 1.035565
[43,]     1.2 1.035120 この近辺で SD が最小になる
[44,]     1.3 1.035413
採用するλは 1 でよいだろう
1ならば,元のデータから1引くだけなので,変数変換の意味はない。
たしかに,元のデータは正規乱数なので,この結論はもっともだ...ということになる。

     [このページのトップへ]


186. Re^6: ANOVAのためのlog変換,定数cの選び方  迷える子羊  2002/10/17 (木) 17:27
どうもありがとうございます。
今後ぜひぜひ使っていきたいと思います。

指導教官と話し合った結果,今回のデータに関しては,
農学の分野では便宜的にlog(x+1)を使うことが多いので,正規性・等分散性の如何に関わらず,カウントデータはこれで変換してANOVAにかけようということになりました。ルール違反かも知れませんが。。。

また今後もご指導よろしくお願いいたします。

     [このページのトップへ]


● 「統計学関連なんでもあり」の過去ログ--- 021 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る