2016年2月16日火曜日

Metric 予測 by Metric:相関する切片と傾き

単純線形回帰」からの続き。

以下は、標本数 30 の、身長(inches)と体重(pounds)の回帰分析例(図 17.3)。
中断右端グラフから、切片 β0 , 傾き β1 の強い相関関係が分かる。この相関が原因のサンプリングの非効率性を解消するために、データ変換を行う。変換方法は "mean centering" で、これにより parameter-correlation 問題は解決する。

次が変換式(式 17.1
いわゆる「データ標準化」(データの平均を 0 、標準偏差 を 1)。

このように標準化したデータから JAGS がパラメータ推定した値も標準化データなので、元に戻す必要がある。以下の式 17.2 が「戻す方法」、標準化データの切片 ζ0 、傾き ζ1 。
algebra(代数学)が得意な人は、式 17.22 行目が 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
    }
  }

標準化したデータを格納する変数名は "z" で始まることとしている。ここでは、観測データの zx[i], zy[i]

この 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
  }

beta1, beta0 行が、式 17.2 を用いた「標準化データを元データに戻す」実装。

Group-Level Parameters & Shrinkage」に続く。

/* tex */

0 件のコメント:

コメントを投稿