「全ての確率はコイン投げに通ず」 japan.r 発表資料

81
全ての確率は コイン投げに通ず 2015/12/5 JapanR 発表資料 2015/12/15 基礎からのベイズ統計学輪読会 LT資料 Ken’ichi Matsui (@kenmatsu4)

Upload: kenichi-matsui

Post on 16-Apr-2017

8.957 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

全ての確率は コイン投げに通ず

2015/12/5 JapanR 発表資料 2015/12/15 基礎からのベイズ統計学輪読会 LT資料

Ken’ichi Matsui (@kenmatsu4)

Page 2: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

自己紹介: @kenmatsu4・Facebookページ   https://www.facebook.com/matsukenbook ・Twitterアカウント   @kenmatsu4 ・Qiitaでブログを書いています(統計、機械学習、Python等)    http://qiita.com/kenmatsu4    (4600 contributionを超えました!)

・趣味    - バンドでベースを弾いたりしています。    - 主に東南アジアへバックパック旅行に行ったりします    (カンボジア、ミャンマー、バングラデシュ、新疆ウイグル自治区 etc) 旅行の写真 : http://matsu-ken.jimdo.com

Twitterアイコン

Page 3: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

Pythonタグで1位に なりました!(>∀<人)

Page 4: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

http://goo.gl/yxNJgQ

http://goo.gl/JNPfv3

http://goo.gl/0Tqgrd

Page 5: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

http://www.slideshare.net/matsukenbook

Page 6: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

本題です。

Page 7: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

http://nbviewer.ipython.org/github/bakfoo/pyconjp/blob/master/probprog3.ipynb

結局,確率的プログラミングにおいて,プログラマがやることは,  • データを用意する  • パラメータの種類を決め,確率分布を決める  • パラメータ込みで事前分布を数式で表す  • パラメータ込みで尤度を数式で表す  • MCMCサンプリング法を選ぶ あとは計算機がMCMCサンプリングをして,パラメータの推定値を返す. 結局,事前分布や尤度の確率分布を上手にモデリングするには, 確率分布とその確率分布の関係をよく知っていなければならない.

柏野さん@PyconJP

なるほど!

Page 8: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

そこで紹介されていたのが、

Page 9: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

これ!

http://www.math.wm.edu/~leemis/2008amstat.pdf

Page 10: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

これ!

http://www.math.wm.edu/~leemis/2008amstat.pdf

多いな! ((((;゚Д゚)))))))

Page 11: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

これ!

http://www.math.wm.edu/~leemis/2008amstat.pdf

多いな! ((((;゚Д゚)))))))

76個あります

Page 12: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

5分間で出来る限り 説明してみます!(`・ω・́)

Page 13: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

今日はそのうち12個!

Page 14: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

Let’s Start!!!

Page 15: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

1/76 ベルヌーイ分布 Bernoulli Distribution

Page 16: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 17: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

01: ベルヌーイ分布

表は1 裏は0

試行を1度行い、成功か失敗など2値例:コイン投げ

確率関数

P (X = x) = p

x(1� p)1�x

(x = 0, 1)

パラメーターp:1 (表) が出る確率

Page 18: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

01: ベルヌーイ分布

#  ベルヌーイ分布からのサンプリングを実行  

#  パラメーター  p  =  0.7  trial_size  =  10000  set.seed(71)  

#  ベルヌーイ分布に従う乱数生成  data  <-­‐  rbern(trial_size,  p)  

#  ベルヌーイ分布の確率分布  dens  <-­‐  data.frame(y=c((1-­‐p),p)*trial_size,  x=c(0,  1))  

#  グラフ描画  ggplot()  +          layer(data=data.frame(x=data),  mapping=aes(x=x),  geom="bar",                      stat="bin",  bandwidth=0.1  )  +  layer(data=dens,  mapping=aes(x=x,  y=y),  geom="bar",                      stat="identity",  width=0.05,  fill="#777799",  alpha=0.7)  

Rコード

紫:理論的な確率 黒:乱数から生成したヒストグラム

Page 19: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

ここで、 もう一度タイトルを

Page 20: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

全ての確率は コイン投げに通ず

2015/12/5 JapanR 発表資料

Ken’ichi Matsui (@kenmatsu4)

Page 21: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

全ての確率は コイン投げに通ず

2015/12/5 JapanR 発表資料

Ken’ichi Matsui (@kenmatsu4)

これから、このコイン投げ (ベルヌーイ分布)を起点として

様々な確率分布に従う 乱数を作っていきます。

Page 22: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

2/76 二項分布 Binomial Distribution

Page 23: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 24: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

02: 二項分布

ベルヌーイ試行をn回実施し、何回成功したかの回数 を確率変数とした分布。

例:フリースロー 1セット30回実施。   1回あたりの成功率70%で計何回入ったか

確率関数

パラメーター

p:1 (表) が出る確率 [フリースローの成功確率]

P (X = x) =n

C

r

p

x(1� p)n�x

n:1セットあたりの回数

(x = 1, 2, · · · , n)

Page 25: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

02: 二項分布

n回実施

表の出た回数 x

コイン投げ(表の確率: p)

Page 26: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

02: 二項分布

#  パラメーター  p  =  0.7  trial_size  =  10000  sample_size  =  30  set.seed(71)  

#  ベルヌーイ分布に従う乱数生成  gen_binom_var  <-­‐  function()  {      return(sum(rbern(sample_size,  p)))  }  result  <-­‐  rdply(trial_size,  gen_binom_var())  

#  二項分布の密度関数  dens  <-­‐  data.frame(y=dbinom(seq(sample_size),                                          sample_size,  0.7))*trial_size  

#  グラフ描画  ggplot()  +      layer(data=resuylt,  mapping=aes(x=V1),  geom="bar",  stat  =  "bin",      binwidth=1,  fill="#6666ee",  color="gray"  )  +  layer(data=dens,  mapping=aes(x=seq(sample_size)+.5,  y=y),            geom="line",  stat="identity",  position="identity",colour="red"      )  +  ggtitle("Bernoulli  to  Binomial.")  

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

Rコード

Page 27: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

3/76 ポワソン分布 Poisson Distribution

Page 28: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 29: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

03: ポワソン分布1セット回数 n → ∞ 、1回あたり成功率 p → 0 npを一定とした時の分布例:棒の傷のチェックを考える。1cm幅で傷の有無を を調べる。ベルヌーイ試行の繰り返し → 二項分布 → 無限に分割してポアソン分布。

1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm

10cm 全部で傷が7つ

0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm 0.5cm

∞ に分割

Page 30: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

確率関数

パラメーター

この例の場合、棒一本あたりの傷の平均的な数λ:平均生起回数

P (X = x) =e

��

x

x!(x = 1, 2, · · · ,1)

( λ = np の関係が保たれている)

棒1本あたりの傷の数 の分布→ポアソン分布

上限がなくなった!

03: ポアソン分布

Page 31: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

n回実施

03: ポアソン分布コイン投げ(表の確率: p)

np一定で n→∞

Page 32: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

03: ポアソン分布

trial_size  =  5000;  width  <-­‐  1;  #  もともとの問題設定  p  =  0.7;  n  =  10;  np  <-­‐  p*n  #  n→∞、p→0、np=一定    n  =  100000;  p  <-­‐  np/n  

#  ベルヌーイ分布に従う乱数生成  gen_binom_var  <-­‐  function()  {      return(sum(rbern(n,  p)))  }  result  <-­‐  rdply(trial_size,  gen_binom_var())  

#  ポアソン分布の密度関数  dens  <-­‐  data.frame(y=dpois(seq(20),  np))*trial_size  

#  グラフ描画  ggplot()  +      layer(data=result,  mapping=aes(x=V1),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )  +  layer(data=dens,  mapping=aes(x=seq(20)+.5,  y=y),                            geom="line",  stat="identity",  position="identity",  colour="red"      )  +  ggtitle("Bernoulli  to  Poisson.")  

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

Rコード

Page 33: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

4/76 正規分布 Normal Distribution

Page 34: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 35: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

04: 正規分布

二項分布のnを大きくすると正規分布で近似できる。

確率密度関数

パラメーター

σ:標準的偏差μ:平均値

f(x) =

1p2⇡�

2exp

⇢�1

2

(x� µ)

2

2

(�1 < x < 1)

例:死ぬまでフリースロー投げて計何回入ったか

Page 36: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

04: 正規分布 (ポアソン分布との違い)

1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm

10cm

1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm

20cm

1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm

1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm

→ ∞ cm

1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm

延々と伸ばす

Page 37: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

n回実施コイン投げ(表の確率: p)

n → ∞

04: 正規分布

Page 38: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

04: 正規分布

#  パラメーター  n  <-­‐  10000;  p  <-­‐  0.7;  trial_size  =  10000  width=10  

#  ベルヌーイ分布に従う乱数生成  gen_binom_var  <-­‐  function()  {      return(sum(rbern(n,  p)))  }  result  <-­‐  rdply(trial_size,  gen_binom_var())  

#  正規分布の密度関数  dens  <-­‐  data.frame(y=dnorm(seq(6800,7200),  mean=n*p,                                                          sd=sqrt(n*p*(1-­‐p)))*trial_size*width)  

#  グラフ描画  ggplot()  +      layer(data=result,  mapping=aes(x=V1),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )  +  layer(data=dens,  mapping=aes(x=seq(6800,7200),  y=y),                            geom="line",  stat="identity",  position="identity",                            colour="red")  +  ggtitle("Bernoulli  to  Normal.")  

Rコード

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

Page 39: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

5/76 標準正規分布 Standard Normal Distribution

Page 40: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 41: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

05: 標準正規分布

正規分布を平均0、標準偏差1にしたもの

確率密度関数

パラメーターなし

(�1 < x < 1)

f(x) =

1p2⇡

exp

⇢�1

2

x

2

Page 42: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

n回実施コイン投げ(表の確率: p)

n → ∞

05: 標準正規分布

平均を0にずらす

標準偏差を1に 縮める

Page 43: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

05: 標準正規分布

#  パラメーター  n  <-­‐  10000;  p  <-­‐  0.7  trial_size  =  30000  width=0.18  

#  ベルヌーイ分布に従う乱数生成  gen_binom_var  <-­‐  function()  {      return(sum(rbern(n,  p)))  }  result  <-­‐  rdply(trial_size,  gen_binom_var())  m  <-­‐  mean(result$V1);  sd  <-­‐  sd(result$V1);  result  <-­‐  (result  -­‐  m)/sd  

#  標準正規分布の密度関数  dens  <-­‐  data.frame(y=dnorm(seq(-­‐4,4,0.05),  mean=0,                                                          sd=1)*trial_size*width)  

#  グラフ描画  ggplot()  +      layer(data=result,  mapping=aes(x=V1),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )  +  layer(data=dens,  mapping=aes(x=seq(-­‐4,4,0.05),  y=y),                            geom="line",  stat="identity",  position=“identity",                          colour="red"      )  +  ggtitle("Bernoulli  to  Standard  Normal.")  

Rコード

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

Page 44: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

6/76 カイ二乗分布 Chi Square Distribution

Page 45: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 46: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

06: カイ二乗分布標準正規分布に従う確率変数 を2乗してk個 足し合わせた                  が従う分布確率密度関数

パラメーターk:自由度 (2乗した標準正規分布の確率変数の       足し合わせた数)

f(x, k) =(1/2)k/2

�(k/2)x

k/2�1e

�x/2

(0 x)

Xi

Z = X21 + · · ·+X2

k

Page 47: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

平均を0にずらす

n回実施コイン投げ(表の確率: p)

n → ∞

06: カイ二乗分布

平均を0にずらす

標準偏差を1に 縮める

平均を0にずらす

k=1のとき

二乗したところに積んでいく

k=3のとき

k=3つ サンプリングする

k=3つの長さを 足したものを プロットする

Page 48: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

05: カイ二乗分布

#  パラメーター  p  <-­‐  0.7;  n  <-­‐  1000;  trial_size  <-­‐  100000;  width  <-­‐  0.3;  df  <-­‐  3  #  ベルヌーイ分布に従う乱数生成(3まわし)  gen_binom_var  <-­‐  function()  {      return(sum(rbern(n,  p)))  }  gen_chisq_var  <-­‐  function()  {      result  <-­‐  rdply(trial_size,  gen_binom_var())      return(((result$V1  -­‐  mean(result$V1))/sd(result$V1))**2)  }  #  自由度dfの分だけ生成する  result  <-­‐  rlply(df,  gen_chisq_var(),.progress  =  "text")  res  <-­‐  data.frame(x=result[[1]]  +  result[[2]]  +  result[[3]])  #  カイ二乗分布の密度関数(自由度=3)  xx  <-­‐  seq(0,20,0.1)  dens  <-­‐  data.frame(y=dchisq(x=xx,  df=df)*trial_size*width)  #  グラフ描画  ggplot()  +  layer(data=data,  mapping=aes(x=x),  geom="bar",  stat  =  "bin",                                    binwidth=width,  fill="#6666ee",  color="gray"      )  +  layer(data=dens,  mapping=aes(x=xx,  y=y),                            geom="line",  stat="identity",  position="identity",                                      colour="blue"    )  +  ggtitle("Bernoulli  to  Chisquare")  

Rコード

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

Page 49: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

7/76 指数分布 Exponential Distribution

Page 50: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 51: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

07: 指数分布ポアソン分布が単位長(もしくは単位時間)に平均 何回生起するか、を表す分布であったが、同じ事象 を違う角度で捉え直したのが指数分布。

1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm

10cm 全部で傷が7つポアソン分布的考え方

指数分布的考え方

次発生するまでに、どのくらいの距離(時間)か

Page 52: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

07: 指数分布

確率密度関数

パラメーター

λ:単位長(時間)に平均的に生起する回数

f(x,�) =

⇢�e

��x (x � 0)0 (x < 0)

Page 53: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

n回実施コイン投げ(表の確率: p)

np一定で n→∞

07: 指数分布

平均を0にずらす

間隔の長さをプロット

Page 54: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

trial_size  =  7000;  width  <-­‐  .01;  #  もともとの問題設定  p  =  0.7;  n  =  10;  np  <-­‐  p*n;    #  n→∞、p→0、np=一定    n  =  10000;  p  <-­‐  np/n  #  ベルヌーイ分布に従う乱数生成  gen_exp_var  <-­‐  function()  {      cnt  <-­‐  0      while  (TRUE)  {          cnt  <-­‐  cnt  +  1          if  (rbern(1,  p)==1){              return(cnt)    #  1が出たらそれが何回目かを返す          }      }  }  data  <-­‐  data.frame(x=rdply(trial_size,  gen_exp_var())/n)  names(data)  <-­‐  c("n",  "x")  #  指数分布の密度関数  dens  <-­‐  data.frame(y=dexp(seq(0,  1.5,  0.1),  np)*trial_size*width)  ggplot()  +      layer(data=data,  mapping=aes(x=x),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )    +  layer(data=dens,  mapping=aes(x=seq(0,  1.5,  0.1),  y=y),                              geom="line",  stat="identity",  position="identity",  colour="red"    )  +  ggtitle("Bernoulli  to  Exponential.")

Rコード

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

07: 指数分布

Page 55: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

8/76 ガンマ分布 Gamma Distribution

Page 56: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 57: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

08: ガンマ分布

確率密度関数

パラメーター単位長(時間)あたりβ回発生する指数分布の α個の和の確率分布を考えた時、ガンマ分布となる

f(x,↵,�) =

�(↵)

x

↵�1exp(��x)

(0 x < 1)

↵X

i=1

Xi ⇠ �(↵,�)Xi ⇠ Exp(�)

Page 58: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

n回実施コイン投げ(表の確率: p)

np一定で n→∞

平均を0にずらす

08: ガンマ分布

間隔の長さをプロット

k=5つの長さを 足したものを プロットする

k=5つサンプリング

Page 59: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

trial_size  =  7000;  width  <-­‐  .035;  #  もともとの問題設定  p  =  0.7;  n  =  10;  np  <-­‐  p*n;  #  n→∞、p→0、np=一定    n  =  10000;  p  <-­‐  np/n;  alpha  <-­‐  5  #  ベルヌーイ分布に従う乱数生成  get_interval  <-­‐  function(){      cnt  <-­‐  0      while  (TRUE)  {          cnt  <-­‐  cnt  +  1          if  (rbern(1,  p)==1){  return(cnt)  }      }  }  gen_exp_var  <-­‐  function()  {      data  <-­‐  data.frame(x=rdply(trial_size,  get_interval())/n)      names(data)  <-­‐  c("n",  "x")      return(data)  }  result  <-­‐  rlply(alpha,  gen_exp_var())  data  <-­‐  data.frame(x=result[[1]]$x  +  result[[2]]$x  +  result[[3]]$x  +  result[[4]]$x  +  result[[5]]$x)  #  ガンマ分布の密度関数  dens  <-­‐  data.frame(y=dgamma(seq(0,  3,.01),  shape=alpha,  rate=np)*trial_size*width)  ggplot()  +      layer(data=data,  mapping=aes(x=x),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )  +  layer(data=dens,  mapping=aes(x=seq(0,3,.01),  y=y),                              geom="line",  stat="identity",  position="identity",  colour="red"      )  +  ggtitle("Bernoulli  to  Gamma") Rコード

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

08: ガンマ分布

Page 60: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

9/76 逆ガンマ分布 Inverse Gamma Distribution

Page 61: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 62: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

09: 逆ガンマ分布

確率密度関数

パラメーター

f(x,↵,�) =

�(↵)

x

�(↵+1)exp

✓�

x

(0 x < 1)

単位長(時間)あたりβ回発生する指数分布のα個の和の 確率分布を考えた時、ガンマ分布となる

Xi ⇠ Exp(�) Z =↵X

i=1

Xi ⇠ �(↵,�)

1/Z ⇠ IG(↵,�)この時、Zの逆数が従う分布を逆ガンマ分布と言う。

Page 63: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

平均を0にずらす

n回実施コイン投げ(表の確率: p)

np一定で n→∞

平均を0にずらす

間隔の長さをプロット

09: 逆ガンマ分布

k=5つの長さを 足したものを プロットする

k=5つ サンプリング

全てのデータをy=1/x で変換

z

z

ww

Page 64: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

trial_size  =  7000;  width  <-­‐  .;  #  もともとの問題設定  p  =  0.7;  n  =  10;  np  <-­‐  p*n;  #  n→∞、p→0、np=一定    n  =  10000;  p  <-­‐  np/n;  alpha  <-­‐  5  #  ベルヌーイ分布に従う乱数生成  get_interval  <-­‐  function(){      cnt  <-­‐  0      while  (TRUE)  {          cnt  <-­‐  cnt  +  1          if  (rbern(1,  p)==1){  return(cnt)  }      }  }  gen_exp_var  <-­‐  function()  {      data  <-­‐  data.frame(x=rdply(trial_size,  get_interval())/n)      names(data)  <-­‐  c("n",  "x")      return(data)  }  result  <-­‐  rlply(alpha,  gen_exp_var())  data  <-­‐  data.frame(x=1/(result[[1]]$x  +  result[[2]]$x  +  result[[3]]$x  +                                                    result[[4]]$x  +  result[[5]]$x))  #  逆ガンマ分布の密度関数  dens  <-­‐  data.frame(y=dinvgamma(seq(0,  23,.01),  shape=5,  rate=1/np)*trial_size*width)  ggplot()  +      layer(data=data,  mapping=aes(x=x),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )  +  layer(data=dens,  mapping=aes(x=seq(0,3,.01),  y=y),                              geom="line",  stat="identity",  position="identity",  colour="red"      )  +  ggtitle("Bernoulli  to  Inversegamma") Rコード

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

09: 逆ガンマ分布

Page 65: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

10/76 標準一様分布 Standard Uniform Distribution

Page 66: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 67: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

10: 標準一様分布

確率密度関数

パラメーター

なし

0から1の間で等確率で発生するような現象を 表す分布

f(x) =

⇢1 (0 x 1)

0 (otherwise)

Page 68: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

10: 標準一様分布コイン投げ(表の確率: p) q回実施

試行結果を各桁に割り当て

表=1 裏=0 表=1 裏=0 表=1 裏=01回目 2回目 q回目

※ もっと効率の良いやり方もあると思いますが分かりやすさのため…

Z = x1(1/2)1 + x2(1/2)

2 + · · ·+ xq(1/2)q

Page 69: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

width  <-­‐  0.02  p  <-­‐  0.5;  sample_size  <-­‐  1000  trial_size  <-­‐  100000  

gen_unif_rand  <-­‐  function()  {      #  sample_size桁の2進少数をベルヌーイ分布に  

   #  従う乱数から生成      return  (sum(rbern(sample_size,  p)  *  (rep(1/2,  sample_size)                        **  seq(sample_size))))  }  

gen_rand  <-­‐  function(){          return(  rdply(trial_size,  gen_unif_rand())  )  }  system.time(res  <-­‐  gen_rand())  

ggplot()  +      layer(data=res,  mapping=aes(x=V1),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )  +  ggtitle("Bernoulli  to  Standard  Uniform")  

Rコード

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

10: 標準一様分布

Page 70: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

11/76 一様分布 Standard Uniform Distribution

Page 71: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 72: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

確率密度関数

パラメーター

a:下限b:上限

f(x, a, b) =

⇢(b� a)

�1(a x b)

0 (otherwise)

aからbの間では等確率で発生するような現象を 表す分布

11: 一様分布

Page 73: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

コイン投げ(表の確率: p)

q回実施11: 一様分布

平行移動と引き延ばし

Page 74: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

a  <-­‐  5  b  <-­‐  8;  width  <-­‐  0.05  p  <-­‐  0.5  sample_size  <-­‐  1000  trial_size  <-­‐  500000  

gen_unif_rand  <-­‐  function()  {      #  sample_size桁の2進少数をベルヌーイ分布に  

   #  従う乱数から生成      return  (sum(rbern(sample_size,  p)  *  (rep(1/2,  sample_size)                        **  seq(sample_size))))  }  

gen_rand  <-­‐  function(){          return(  rdply(trial_size,  gen_unif_rand())  )  }  system.time(res  <-­‐  gen_rand())  res$V1  <-­‐  res$V1  *  (b-­‐a)  +  a  

ggplot()  +    layer(data=res,  mapping=aes(x=V1),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )  +  ggtitle("Bernoulli  to  Uniform")  +  xlim(4,9)

Rコード

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

11: 一様分布

Page 75: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

12/76 ベータ分布 Beta Distribution

Page 76: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料
Page 77: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

12: ベータ分布

確率密度関数

パラメーターα:並べ替えたあとのサンプリングするポジションβ:同じくポジションだが、後ろから数えたときのもの

f(x,↵,�) =1

B(↵,�)x

↵�1(1� x)��1

(0 < x < 1)

独立に標準一様分布に従う (α+β-1) 個の確率変数

を大きさの順に並べ替えたとき、小さい方から α番め(大きい方からは β番目)の確率変数 X の分布がベータ分布 B(α,β) となる。

→ B(・)はベータ関数

Xi ⇠ U(0, 1)iid (i = 1, 2, · · · ,↵+ � � 1)

… …α個

β個

Page 78: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

コイン投げ(表の確率: p)

q回実施12: ベータ分布

大きさの順に並べて 2つめの値をプロット

3つサンプリング

Page 79: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

width  <-­‐  0.03;  p  <-­‐  0.5  digits_length  <-­‐  30;  set_size  <-­‐  3  trial_size        <-­‐  30000  gen_unif_rand  <-­‐  function()  {      #  digits_length桁の2進少数をベルヌーイ分布  

   #  に従う乱数から生成      return  (sum(rbern(digits_length,  p)  *        (rep(1/2,  digits_length)  **          seq(digits_length))))  }  gen_rand  <-­‐  function(){          return(  rdply(set_size,  gen_unif_rand())$V1  )  }  

unif_dataset  <-­‐  rlply(trial_size,  gen_rand,  .progress='text')  p  <-­‐  ceiling(set_size  *  0.5);  q  <-­‐  set_size  -­‐  p  +  1  get_nth_data  <-­‐  function(a){  return(a[order(a)][p])  }  disp_data  <-­‐  data.frame(lapply(unif_dataset,  get_nth_data))  names(disp_data)  <-­‐  seq(length(disp_data));  disp_data  <-­‐  data.frame(t(disp_data))  names(disp_data)  <-­‐  "V1"  x_range  <-­‐  seq(0,  1,  0.001)  

dens  <-­‐  data.frame(y=dbeta(x_range,  p,  q)*trial_size*width)  ggplot()  +      layer(data=disp_data,  mapping=aes(x=V1),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )  +  layer(data=dens,  mapping=aes(x=x_range,  y=y),                            geom="line",  stat="identity",  position="identity",  colour="red"      )  +  ggtitle("Bernoulli  to  Beta")   Rコード

赤の曲線:理論的な確率 ヒストグラム:乱数から生成

12: ベータ分布

Page 80: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

To be continued…

Page 81: 「全ての確率はコイン投げに通ず」 Japan.R 発表資料

参考このスライドのRのコード https://gist.github.com/matsuken92/671ae282429d6ad97aec

工科系のための統計概論 http://www.amazon.co.jp/dp/4563008168

指数分布とポアソン分布のいけない関係 http://www.slideshare.net/teramonagi/ss-11296227

ベータ分布の性質 http://www.kwansei.ac.jp/hs/z90010/sugakuc/toukei/beta/beta.htm