ryamadaの遺伝学・遺伝統計学メモ このページをアンテナに追加 RSSフィード

数学・コンピュータ関連の姉妹ブログ『ryamadaのコンピュータ・数学メモ』
京都大学大学院医学研究科ゲノム医学センター統計遺伝学分野のWiki
講義・スライド
医学生物学と数学とプログラミングの三重学習を狙う学習ツール
駆け足で読む○○シリーズ
ぱらぱらめくるシリーズ
カシオの計算機
オンライン整数列大辞典

2011-07-22 Box-cox 変換

ryamada222011-07-22

[][]Box-cox変換

  • Box-cox変換が話題になった
  • こんなソースもあるし
  • こんな記事もある
  • 基本的には、このブログの記事に賛成するのだけれど、そうは言っても『常識として、平方根を取る』というその「常識」にも意味があると思う
  • 「こんな分布になるのがふつう」であることを繰り返していると、「そうなるのがふつうでしかもそれを正規分布に移せて、それがデータハンドリング上のメリットがあってデメリットがないのだったら、そうしてやるのをデフォルトにしてもよいではないか。「ふつう」なことには意味があるのだから」と考えてもよさそうだ
  • 問題は「どうして平方根なのか」だろう
  • こんなことを試してみた
    • 分布のタイプごとに分布のパラメタを振りながら、乱数を発生させて、box.coxの返り値との関係をみてやると:
    • 引数とbox.cox指数との間に明らかに関係のあるものもあります。(ポアソン、指数、ワイブル…)
    • ここで、既知の分布というのは、その生起理由と関係していることが多いですから、box.coxをしてやって、返り値を見ている、というのは、「分布の形状解析」をしているという側面がありそうです

par(mfcol=c(2,3))
# normal
ms<-seq(from=1,to=16,length=20)
bcout<-ms
for(i in 1:length(ms)){
	rp<-rnorm(1000,ms[i])
	#rp<-rexp(1000,ms[i])
	bcout[i]<-Box.Cox.transformation2(rp-min(rp)+1)
}

plot(ms,bcout,main="norm")

# poisson
ms<-seq(from=1,to=16,length=20)
bcout<-ms
for(i in 1:length(ms)){
	rp<-rpois(1000,ms[i])
	#rp<-rexp(1000,ms[i])
	bcout[i]<-Box.Cox.transformation2(rp-min(rp)+1)
}

plot(ms,bcout,main="pois")

# exponential
ms<-seq(from=1,to=50,length=20)
bcout<-ms
for(i in 1:length(ms)){
	#rp<-rpois(1000,ms[i])
	rp<-rexp(1000,ms[i])
	bcout[i]<-Box.Cox.transformation2(rp-min(rp)+1)
}

plot(ms,bcout,main="exp")

# uniform
ms<-seq(from=1,to=50,length=20)
bcout<-ms
for(i in 1:length(ms)){
	
	rp<-runif(1000)
	bcout[i]<-Box.Cox.transformation2(rp-min(rp)+1)
}

plot(ms,bcout,main="unif")

# gamma
ms<-seq(from=1,to=50,length=20)
bcout<-ms
for(i in 1:length(ms)){
	
	rp<-rgamma(1000,ms[i])
	bcout[i]<-Box.Cox.transformation2(rp-min(rp)+1)
}

plot(ms,bcout,main="gamma")

# weibull
ms<-seq(from=1,to=50,length=20)
bcout<-ms
for(i in 1:length(ms)){
	
	rp<-rweibull(1000,ms[i])
	bcout[i]<-Box.Cox.transformation2(rp-min(rp)+1)
}

plot(ms,bcout,main="weibull")