Fisher情報量とJeffreys prior

私のためのJeffreys prior

私のためのJeffreys prior

---
title: "私のためのJeffreys prior"
author: "ryamada"
date: "2016年5月14日"
output: html_document
---

# 無情報priorとしてのJeffreys prior

ベイズ推定によって、事後確率分布を得るときに、「無情報prior」をどうするか、という話しがある。

「無情報prior」はパラメタの取り方によらないのが、よい、そうするとJeffreys priorが適当になる。

『そのJeffreys priorっていうのは、Fisher情報量(Fisher情報行列の行列式)の平方根である』という話がある。

これを二項分布、ベータ分布にそって、丁寧に確かめてみる

は、[この資料](http://www.ejwagenmakers.com/submitted/LyEtAlTutorial.pdf) ("Fisher情報量について50ページ超のlike")に基づく。

なお、「無情報prior」にはこのJeffreys priorの他にも提案されているものがある。

このJeffreys priorは『パラメタの取り方によらず、同じ事後分布が推定されるなら、それをもたらすpriorは、無情報priorとして適切なはずだ』という考え方に基づいて定義されたものであることを、再度確認しておく。

# 成功か失敗か〜二項分布・ベータ分布〜

## 2つのパラメタ表示

この文書では、成功するか失敗するかの観察と、その背後に潜む、成功率の分布推定とに関することのみを扱う。

成功・失敗を扱うが、以下で用いる、2種類のパラメタ設定を解りやすくするために、コインを投げて表裏のどちらが出るか、という設定で行う。

表の出る確率を$\theta$とする。

パラメタの取り方によらない事後分布についての文書であるから、別のパラメタの取り方をもう1つ導入する。

2つのパラメタの対応を決める関数を$h,k$とする。

$$\theta = h(\phi)=\frac{1}{2} + \frac{1}{2}(\frac{\phi}{\pi})^3$$

$$\phi = k(\theta)=(2(\theta-\frac{1}{2}))^{\frac{1}{3}}$$


この新たなパラメタ$\phi$の心は、「コイントスの表裏を考える。ただし、このコインは直径で折れ曲がっている。折れ曲がり方は、$-\pi$から$\pi$まで曲がっているとする。表を外側にして半分に折りたたまれていれば、いつも表が出るし、折れていなければ、表の出る確率は0.5、表を内側に折ってあれば、表の出る確率が0。このように折れ確度と表が出る角度が、たとえば、上式のようになっていると仮定する」とそういう話である。

$\theta,\phi$を一様に取り、$\theta$の値に対応する$\phi$の値、$\phi$の値に対応する$\theta$の値を計算しておく。

$\theta$$\phi$との相互関係をグラフにしておく。

単調な関係である。$\theta=0.5$$\phi$の増加が0になるなどの特徴があることが見て取れる。

```{r}
theta <- seq(from=0,to=1,length=1000)
phi <- seq(from=-pi,to=pi,length=1000)

k.theta <- pi * sign(theta-0.5)*(2*abs(theta-0.5))^(1/3)
h.phi <- 1/2 + 1/2 * (phi/pi)^3

par(mfcol=c(1,2))
plot(theta,k.theta,type="l")
plot(phi,h.phi,type="l")
```

## 確率密度分布 like

A回の成功・表、B回の失敗・裏という観測が起きる確率を$\theta$をパラメタとして尤度関数とすれば
$$like(A,B|\theta) = \begin{pmatrix}A+B\\ A\end{pmatrix} \theta^A(1-\theta)^B$$
となる。

$\phi$を使えば

$$like(A,B|\phi) = \begin{pmatrix}A+B\\ A \end{pmatrix} (\frac{1}{2} + \frac{1}{2}(\frac{\phi}{\pi})^3)^A + (1-(\frac{1}{2} + \frac{1}{2}(\frac{\phi}{\pi})^3))^B$$

となる。


## ベイズ推定の基本的枠組み

ベイズ推定では、この$like(A,B|*)$をpriorに掛けることで、この(A,B)という情報を得た後の事後分布を得る。

今、$\theta,\phi$でのpriorが、ともに一様とすると、$\[0,1\]$,\[-\pi,\pi\]$の範囲で同じ値なので、上記の$like(A,B|*)$自身(に比例した値)が事後分布となる。

なお、(A,B)の観測確率は、$\theta = \frac{1}{2} + \frac{1}{2}(\frac{\phi}{\pi})^3$に基づいて、それぞれの$\phi$の値に対応する$\theta$を計算した上で、それに対する二項分布として計算するが、少し工夫が必要である。

それぞれの$\theta,\phi$に対する「尤度」は計算された値そのままであるが、それを、連続なパラメタとして「グラフ」にするときには、微小周辺で積分できることになるので、そのことへの配慮が発生する。

特に、$\theta$$\phi$とを入れ替えたりするときに、その考慮が必要になる。

なぜなら、パラメタの取り方によって、局所での単位パラメタ変化量が異なるからである。

$\phi$で計算して値が出ている「局所」は$d \phi$なる微小長さ分の「面積」を代表するしているが、$d \theta$$d \phi$との比率は$\theta,\phi$の値ごとに変わるからである。


$\phi$から対応する$\theta$に変えるときには、$d \theta$に相当する「面積」に変換するから、$d \phi$を掛けて、$d \theta$で割った値が、$\theta$を軸としたときの「高さ」になる。

$\frac{d \phi}{d \theta}$を掛ける、ということ。

これをたとえば、A=7,B=3の場合にプロットしてみる。

```{r}
my.dbinom <- function(k,n,theta){
	tmp <- lgamma(n+1)-lgamma(k+1)-lgamma(n-k+1)+k*log(theta) + (n-k)*log(1-theta)
	exp(tmp)
}
A <- 7
B <- 3

like.theta <- my.dbinom(A,A+B,theta)
like.phi <- my.dbinom(A,A+B,h.phi) #phiに対応するthetaの値で計算
par(mfcol=c(1,2))
plot(theta,like.theta,type="l")
plot(phi,like.phi,type="l")
```

```{r}
# 事前分布を平坦な分布にする
flat.prior.theta <- rep(1,length(theta))
flat.prior.phi <- rep(1/(2*pi),length(phi))

# phiで計算した密度分布をthetaの軸に表すためには、dtheta/dphiで補正する必要がある
# もともと、phiでの尤度関数を上述していたが
# 生起確率に照らしてphiでの「確率密度関数」にするには
# 上記の式の値をd theta/ dphi 倍しておくはずであったところ
# ここでは、逆に、thetaに対応しなおすために
# d theta/ d phi で除している
dtheta.dphi <- 3/2 * phi^2/pi^3
dphi.dtheta <- sign(theta-0.5)*pi * 2/3*(2*abs(theta-0.5))^(-2/3)
# flatな事前分布を掛けておく
post.phi.from.flat <- like.phi * flat.prior.phi
plot(phi,post.phi.from.flat,type="l")
# 横軸変更
post.phi.from.flat.dtheta.dphi <- like.phi / dtheta.dphi
plot(h.phi,post.phi.from.flat.dtheta.dphi,type="l",ylim=c(0,10))
```

$\frac{d \theta}{d \phi}]$\theta=0]付近で増減が0なので、それでの補正により、∞に発散する影響を受けている様子が見える。

# Jeffreys priorを使う

Jeffreys priorを使うと、このパラメタの使い分けがうまくキャンセルできる、と言う。

Jeffreys priorは対数尤度関数をパラメタの2階の微分であるFisher 情報量の平方根であるから、その手順で作る。

まず、対数尤度関数を作る。
$$\ln{like(A,B|\theta)} = \ln{(\begin{pmatrix}A+B\\ A\end{pmatrix} \theta^A(1-\theta)^B)}$$
$$\ln{like(A,B|\theta)} = \ln{\begin{pmatrix}A+B\\ A\end{pmatrix}} +A\ln{ \theta} + B\ln{(1-\theta)}$$
同様に
$$\ln{like(A,B|\phi)} = \ln{(\begin{pmatrix}A+B\\ A\end{pmatrix} (\frac{1}{2} + \frac{1}{2}(\frac{\phi}{\pi})^3)^A(1-(\frac{1}{2} + \frac{1}{2}(\frac{\phi}{\pi})^3))^B)}$$
$$\ln{like(A,B|\phi)} = \ln{\begin{pmatrix}A+B\\ A\end{pmatrix}} +A\ln{(\frac{1}{2} + \frac{1}{2}(\frac{\phi}{\pi})^3)} + B\ln{(1-(\frac{1}{2} + \frac{1}{2}(\frac{\phi}{\pi})^3))}$$


Fisher情報量は、この対数尤度関数をパラメタ($\theta,\phi$)で二回(二階)微分し、その負を取る。

$$Fisher(\theta) = \frac{1}{\theta(1-\theta)}$$
$$Fisher(\phi) = \frac{9 \phi^4}{\pi^6 - \phi^6}$$

Jeffreys priorはこの平方根に比例していて、積分して1になるようにしたもの。

今回の例では、積分の条件により$\pi$で割る。
$$J(\theta) = \frac{1}{\pi}\sqrt{Fisher(\theta)} = \frac{1}{\pi}\sqrt{\frac{1}{\theta(1-\theta)}}$$
$$J(\phi) = \frac{1}{\pi} \sqrt{Fisher(\phi)} = \frac{1}{\pi}\sqrt{\frac{9 \phi^4}{\pi^6 - \phi^6}}$$

Rでやってみる。

```{r}
fisher.theta <- 1/(theta*(1-theta))
fisher.phi <- (9*phi^4)/(pi^6-phi^6)

jef.theta <- sqrt(fisher.theta)/pi
jef.phi <- sqrt(fisher.phi)/pi

par(mfcol=c(2,2))
plot(theta,fisher.theta,type="l")
plot(phi,fisher.phi,type="l")
plot(theta,jef.theta,type="l")
plot(phi,jef.phi,type="l")
```

ちなみに、$J(\theta)$はパラメタが0.5,0.5のベータ分布である。

それもRで確かめる。
```{r}
r <- 0.5
jef.theta.beta <- dbeta(theta,r,r)
par(mfcol=c(1,1))
plot(jef.theta,jef.theta.beta)
```

このJeffreys priorを使って事後分布を推定してみる。
```{r}
post.theta.from.jef <- like.theta * jef.theta
post.phi.from.jef <- like.phi * jef.phi
par(mfcol=c(1,2))
plot(theta,post.theta.from.jef,type="l")
plot(phi,post.phi.from.jef,type="l")
```

$\phi$で推定した事後分布の横軸を$\theta$にしてみる。
```{r}
# 横軸変更
post.phi.from.jef.dtheta.dphi <- post.phi.from.jef / dtheta.dphi
plot(h.phi,post.phi.from.jef.dtheta.dphi,type="l",xlab="h.phi=theta")
# h.phiの値でthetaの事後分布を作る
post.theta.from.jef.h.phi <- dbeta(h.phi,A+r,B+r)
plot(h.phi,post.theta.from.jef.h.phi,type="l")
```

確かによく似ている。

当に(定数倍を除いて)一致しているかを確かめる。
```{r}
# 本当に一緒?
par(mfcol=c(1,1))
plot(post.phi.from.jef.dtheta.dphi,post.theta.from.jef.h.phi)
```