- 具体例がないとわかりにくいので、具体例から入る
- 正規分布を座標系と座標系で表すことができる
- 座標系というのは、分布関数を指数族表現したときに現れるパラメタであって、正規分布の場合にはとなるようなそれである
- 具体的には
- 他方、座標系というのは、指数族表現して現れたパラメタに掛け合わされるの関数の期待値を取ることになっているから、の期待値のこと
- 正規分布の場合、の期待値は、だし、の期待値はなる関係があるから、が期待値である。というパラメタを取る、と言うことである
- 座標系、座標系のそれぞれで、接ベクトル(関数を偏微分したもの)を取り、その関係を調べると「双直交」だとわかるわけであるが
- 、座標系ではそれぞれ,を偏微分することになっている
- それは、フィッシャー情報量がと表されることと関係していて、もっと一般的には(と表されるときのが[l^{(1)}=\log{p}]であって、そのときに現れるパラメタが、がであって、そのときに現れるパラメタがであることと結びついている
- 別の説明もできる。のどちらにもの偏微分を取るのだが、偏微分同士の積の期待値を取ろうとすると、となるが、であるから、がキャンセルアウトする、とも見える
- 実際、この二つの座標系について、それぞれのパラメタを微小変化させ、それに対応する正規分布(とその)との微小変化を計算し、偏微分相当の値を算出し、それを無限次元ベクトル(の有限離散版)として、ととの内積を取ると、以下に示すように、単位行列が現れ、『双直交』であることの例示ができる
my.ms2theta <- function(m,s){
theta1 <- m/(s^2)
theta2 <- -1/(2*s^2)
return(c(theta1,theta2))
}
my.ms2eta <- function(m,s){
eta1 <- m
eta2 <- s^2+m^2
return(c(eta1,eta2))
}
my.theta2ms <- function(theta1,theta2){
m <- -theta1/(2*theta2)
s <- sqrt(-1/(2*theta2))
return(c(m,s))
}
my.eta2ms <- function(eta1,eta2){
m <- eta1
s <- sqrt(eta2-eta1^2)
return(c(m,s))
}
my.thata2eta <- function(theta1,theta2){
ms <- my.theta2ms(theta1,theta2)
my.ms2eta(ms[1],ms[2])
}
my.eta2theta <- function(eta1,eta2){
ms <- my.eta2ms(eta1,eta2)
my.ms2theta(ms[1],ms[2])
}
my.dnorm.theta <- function(x,theta1,theta2,log=TRUE){
ms <- my.theta2ms(theta1,theta2)
dnorm(x,ms[1],ms[2],log=log)
}
my.dnorm.eta <- function(x,eta1,eta2,log=FALSE){
ms <- my.eta2ms(eta1,eta2)
dnorm(x,ms[1],ms[2],log=log)
}
m0 <- 2
s0 <- 1
dx <- 1/1000
x <- seq(from=-10,to=10,by=dx)
p <- dnorm(x,m0,s0)
plot(x,p)
thetas <- my.ms2theta(m0,s0)
etas <- my.ms2eta(m0,s0)
d.theta1 <- 0.0001
dp.dtheta1 <- (my.dnorm.theta(x,thetas[1]+d.theta1,thetas[2]) - my.dnorm.theta(x,thetas[1],thetas[2]))/d.theta1
plot(x,dp.dtheta1)
d.theta2 <- 0.0001
d.eta1 <- 0.0001
d.eta2 <- 0.0001
dp.dtheta1 <- (my.dnorm.theta(x,thetas[1]+d.theta1,thetas[2]) - my.dnorm.theta(x,thetas[1],thetas[2]))/d.theta1
dp.dtheta2 <- (my.dnorm.theta(x,thetas[1],thetas[2]+d.theta2) - my.dnorm.theta(x,thetas[1],thetas[2]))/d.theta2
dp.deta1 <- (my.dnorm.eta(x,etas[1]+d.eta1,etas[2]) - my.dnorm.eta(x,etas[1],etas[2]))/d.eta1
dp.deta2 <- (my.dnorm.eta(x,etas[1],etas[2]+d.eta2) - my.dnorm.eta(x,etas[1],etas[2]))/d.eta2
sum(dp.dtheta1 * dp.deta1) * diff(x)[1]
sum(dp.dtheta1 * dp.deta2) * diff(x)[1]
sum(dp.dtheta2 * dp.deta1) * diff(x)[1]
sum(dp.dtheta2 * dp.deta2) * diff(x)[1]