『ベイズ統計の理論と方法』1.4節の例を R でやってみます。
- 作者:渡辺澄夫
- 出版社/メーカー:コロナ社
- 発売日: 2012/03/01
- メディア:単行本
- 購入: 1人 クリック: 4回
- この商品を含むブログ (8件) を見る
尤度関数が正規分布で近似できるとき、いろいろ良い性質がなりたちます。
関数 を標準正規分布の密度関数とし、確率モデル
(ただし ) から100個の乱数を生成して、尤度関数の形を見ていきます。
真のパラメータが、のとき、ヒストグラムを書いてみると、密度関数は混合分布で表せそうに見えます。
最尤推定量は (0.52, 2.90) であり、真のパラメータの近くにあります。
尤度関数の等高線に多変量正規分布から生成した乱数を重ねてみると、尤度関数は正規分布で近似できそうに見えます。
真のパラメータが、のとき、ヒストグラムを書いてみると、ぱっと見では混合分布だとはわからないかもしれません。
最尤推定量は (0.45 1.17) であり、まあまあ真のパラメータの近くにあります。
尤度関数の等高線はちょっといびつな形をしており、多変量正規分布で近似するのは少々強引な気がします。
真のパラメータが、のとき、ヒストグラムを書いてみると、やはりぱっと見では混合分布だとはわからないかもしれません。
最尤推定量は (0.31 0.67) でした。真のパラメータからは少しずれています。
尤度関数の等高線は局所的にするどいピークを持ち、正規分布で近似するのはあきらかに無理があります。
以下に R のコードを貼ります。
library(mvtnorm)library(tidyverse) rmixnorm <-function(n,a,b){ Y <-sample.int(2, n, replace=TRUE, prob=c(1-a,a)) mu <- c(0, b) rnorm(n, mu)} dmixnorm <-function(par,x,log=TRUE){ a0 <- par[1] b0 <- par[2] ll <- sum(log((1-a0)*dnorm(x)+a0*dnorm(x,b0)))if(log){ ll }else{ exp(ll)}} set.seed(1) x1 <- rmixnorm(100,0.5,3.0) x2 <- rmixnorm(100,0.5,1.0) x3 <- rmixnorm(100,0.5,0.5) hist(x1) hist(x2) hist(x3) opt1 <- optim(c(0.5,1), dmixnorm,control =list(fnscale=-1), x=x1, method ="L-BFGS-B", lower=c(0,-5),upper=c(1,5),hessian =TRUE) opt2 <- optim(c(0.5,1), dmixnorm,control =list(fnscale=-1), x=x2, method ="L-BFGS-B", lower=c(0,-5),upper=c(1,5),hessian =TRUE) opt3 <- optim(c(0.5,1), dmixnorm,control =list(fnscale=-1), x=x3) print(round(opt1$par,2)) print(round(opt2$par,2)) print(round(opt3$par,2)) a <- seq(0,1,length.out =200) b <- seq(-5,5,length.out =200) parms <-expand.grid(a,b) L1 <- apply(parms,1,dmixnorm,x=x1,log=FALSE) datL1 <- as_data_frame(parms)%>% set_names(c("a","b"))%>% mutate(L=L1) sample_out1 <-as_data_frame(rmvnorm(10000,opt1$par,-solve(opt1$hessian)))%>% set_names(c("a","b")) ggplot(datL1,aes(x=a,y=b))+ geom_point(data=sample_out1,alpha=0.2)+ geom_contour(aes(z=L),size=1)+ theme_bw() L2 <- apply(parms,1,dmixnorm,x=x2,log=FALSE) datL2 <- as_data_frame(parms)%>% set_names(c("a","b"))%>% mutate(L=L2) sample_out2 <-as_data_frame(rmvnorm(10000,opt2$par,-solve(opt2$hessian)))%>% set_names(c("a","b")) ggplot(datL2,aes(x=a,y=b))+ geom_point(data=sample_out2,alpha=0.2)+ geom_contour(aes(z=L),size=1)+ theme_bw() L3 <- apply(parms,1,dmixnorm,x=x3,log=FALSE) datL3 <- as_data_frame(parms)%>% set_names(c("a","b"))%>% mutate(L=L3) ggplot(datL3,aes(x=a,y=b))+ geom_contour(aes(z=L),size=1)+ theme_bw()
#統計渡辺澄夫著『ベイズ統計の理論と方法』の主張の内容を理解して実用的に利用することを目的とする読み方での最初の小目標は「様々な確率モデルとサンプルについて事後分布をプロットしてみること」にすると良いと思う。具体的には第1章pp.20-21の内容を自分で再現することを最初の小目標にする。
— 黒木玄 Gen Kuroki (@genkuroki) February 21, 2018
#統計実は渡辺澄夫著『ベイズ統計の理論と方法』の第1.4節事後分布の例は重要。なぜならば特異点解消のような大道具が必要になる特異モデルになるパラメーター集合は測度零集合だからです。有限のサンプルサイズで特異パラメーターの影響が出て来ることを確認しておく必要がある。続く
— 黒木玄 Gen Kuroki (@genkuroki) February 21, 2018
#統計続き。サンプルを生成する真の確率分布q(x)がq(x)=p(x|w_0)となっていて、w_0が特異モデルを与えるパラメーターであれば、渡辺澄夫さんの理論がぴったい適用できる場合になります。しかし、そのようなw_0の集合は測度零です。それにもかかわらず、特異モデルも扱う必要があることを~続く
— 黒木玄 Gen Kuroki (@genkuroki) February 21, 2018
#統計続き~価値ある仕事だと言うためには、測度零集合の影響が実際に推定が実行される有限サンプルサイズの場合に出て来ることをきちんと説明しておかなければいけません。それが第1.4節なのです。だから、極めて重要。
— 黒木玄 Gen Kuroki (@genkuroki) February 21, 2018