以下は、標本数 30 の、身長(inches)と体重(pounds)の回帰分析例(図 17.3)。
中断右端グラフから、切片 β0 , 傾き β1 の強い相関関係が分かる。この相関が原因のサンプリングの非効率性を解消するために、データ変換を行う。変換方法は "mean centering" で、これにより parameter-correlation 問題は解決する。
次が変換式(式 17.1)
いわゆる「データ標準化」(データの平均を 0 、標準偏差 を 1)。
このように標準化したデータから JAGS がパラメータ推定した値も標準化データなので、元に戻す必要がある。以下の式 17.2 が「戻す方法」、標準化データの切片 ζ0 、傾き ζ1 。
algebra(代数学)が得意な人は、式 17.2 の 2 行目が 3 行目に展開されるのは「目視で納得」するのかもしれないが。私の場合、悲しいかな、ちょっと考え込んでしまった(泣)。「多分、展開したらそうなるのだろう」というモヤっとした理解をクリアにするため、地道に展開してみた。
スッキリしました(笑)
JAGS では、data ブロックにより変換データへの対応実装できる。以下は今回の data ブロックの実装。
data {
Ntotal <- length(y)
xm <- mean(x)
ym <- mean(y)
xsd <- sd(x)
ysd <- sd(y)
for ( i in 1:length(y) ) {
zx[i] <- ( x[i] - xm ) / xsd
zy[i] <- ( y[i] - ym ) / ysd
}
}
この data ブロックの値を、以下の model ブロックで使用する。
model {
for ( i in 1:Ntotal ) {
zy[i] ~ dt( zbeta0 + zbeta1 * zx[i] , 1/zsigma^2 , nu )
}
# Priors vague on standardized scale:
zbeta0 ~ dnorm( 0 , 1/(10)^2 )
zbeta1 ~ dnorm( 0 , 1/(10)^2 )
zsigma ~ dunif( 1.0E-3 , 1.0E+3 )
nu ~ dexp(1/30.0)
# Transform to original scale:
beta1 <- zbeta1 * ysd / xsd
beta0 <- zbeta0 * ysd + ym - zbeta1 * xm * ysd / xsd
sigma <- zsigma * ysd
}
「Group-Level Parameters & Shrinkage」に続く。
/* tex
*/




0 件のコメント:
コメントを投稿