Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

10.578 Aufrufe

Veröffentlicht am

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

様々な確率分布をベルヌーイ分布(コイン投げ)との関係性で説明をしてみるというスライドです。

Pythonバージョンのコード:
https://github.com/matsuken92/Qiita_Contents/blob/master/random_variables/random_variables.ipynb

Veröffentlicht in: Daten & Analysen
  • Visit Here to Download PDF eBook === http://ebookdfsrewsa.justdied.com/8838241309-gen-ius-la-consulenza-tra-genetica-e-diritto-quaderni-lumsa.html
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

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

  1. 1. 全ての確率は コイン投げに通ず 2015/12/5 JapanR 発表資料 2015/12/15 基礎からのベイズ統計学輪読会 LT資料 Ken ichi Matsui (@kenmatsu4)
  2. 2. 自己紹介: @kenmatsu4 ・Facebookページ   https://www.facebook.com/matsukenbook ・Twitterアカウント   @kenmatsu4 ・Qiitaでブログを書いています(統計、機械学習、Python等)    http://qiita.com/kenmatsu4    (4600 contributionを超えました!) ・趣味    - バンドでベースを弾いたりしています。    - 主に東南アジアへバックパック旅行に行ったりします    (カンボジア、ミャンマー、バングラデシュ、新疆ウイグル自治区 etc) 旅行の写真 : http://matsu-ken.jimdo.com Twitterアイコン
  3. 3. Pythonタグで1位に なりました!(> <人)
  4. 4. http://goo.gl/yxNJgQ http://goo.gl/JNPfv3 http://goo.gl/0Tqgrd
  5. 5. http://www.slideshare.net/matsukenbook
  6. 6. 本題です。
  7. 7. http://nbviewer.ipython.org/github/bakfoo/pyconjp/blob/master/probprog3.ipynb 結局,確率的プログラミングにおいて,プログラマがやることは,  • データを用意する  • パラメータの種類を決め,確率分布を決める  • パラメータ込みで事前分布を数式で表す  • パラメータ込みで尤度を数式で表す  • MCMCサンプリング法を選ぶ あとは計算機がMCMCサンプリングをして,パラメータの推定値を返す. 結局,事前分布や尤度の確率分布を上手にモデリングするには, 確率分布とその確率分布の関係をよく知っていなければならない. 柏野さん@PyconJP なるほど!
  8. 8. そこで紹介されていたのが、
  9. 9. これ! http://www.math.wm.edu/~leemis/2008amstat.pdf
  10. 10. これ! http://www.math.wm.edu/~leemis/2008amstat.pdf 多いな! ((((;゚Д゚)))))))
  11. 11. これ! http://www.math.wm.edu/~leemis/2008amstat.pdf 多いな! ((((;゚Д゚))))))) 76個あります
  12. 12. 5分間で出来る限り 説明してみます!(`・ω・́)
  13. 13. 今日はそのうち12個!
  14. 14. Let’s Start!!!
  15. 15. 1/76 ベルヌーイ分布 Bernoulli Distribution
  16. 16. 01: ベルヌーイ分布 表は1 裏は0 試行を1度行い、成功か失敗など2値 例:コイン投げ 確率関数 P(X = x) = px (1 p)1 x (x = 0, 1) パラメーター p:1 (表) が出る確率
  17. 17. 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コード 紫:理論的な確率 黒:乱数から生成したヒストグラム
  18. 18. ここで、 もう一度タイトルを
  19. 19. 全ての確率は コイン投げに通ず 2015/12/5 JapanR 発表資料 Ken ichi Matsui (@kenmatsu4)
  20. 20. 全ての確率は コイン投げに通ず 2015/12/5 JapanR 発表資料 Ken ichi Matsui (@kenmatsu4) これから、このコイン投げ (ベルヌーイ分布)を起点として 様々な確率分布に従う 乱数を作っていきます。
  21. 21. 2/76 二項分布 Binomial Distribution
  22. 22. 02: 二項分布 ベルヌーイ試行をn回実施し、何回成功したかの回数 を確率変数とした分布。 例:フリースロー 1セット30回実施。   1回あたりの成功率70%で計何回入ったか 確率関数 パラメーター p:1 (表) が出る確率 [フリースローの成功確率] P(X = x) = nCrpx (1 p)n x n:1セットあたりの回数 (x = 1, 2, · · · , n)
  23. 23. 02: 二項分布 n回実施 表の出た回数 x コイン投げ (表の確率: p)
  24. 24. 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コード
  25. 25. 3/76 ポワソン分布 Poisson Distribution
  26. 26. 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 に分割
  27. 27. 確率関数 パラメーター この例の場合、棒一本あたりの傷の平均的な数 λ:平均生起回数 P(X = x) = e x x! (x = 1, 2, · · · , 1) ( λ = np の関係が保たれている) 棒1本あたりの傷の数 の分布→ポアソン分布 上限がなくなった! 03: ポアソン分布
  28. 28. n回実施 03: ポアソン分布 コイン投げ (表の確率: p) np一定で n→
  29. 29. 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コード
  30. 30. 4/76 正規分布 Normal Distribution
  31. 31. 04: 正規分布 二項分布のnを大きくすると正規分布で近似できる。 確率密度関数 パラメーター σ:標準的偏差 μ:平均値 f(x) = 1 p 2⇡ 2 exp ⇢ 1 2 (x µ)2 2 ( 1 < x < 1) 例:死ぬまでフリースロー投げて計何回入ったか
  32. 32. 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 延々と伸ばす
  33. 33. n回実施コイン投げ (表の確率: p) n → 04: 正規分布
  34. 34. 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コード 赤の曲線:理論的な確率 ヒストグラム:乱数から生成
  35. 35. 5/76 標準正規分布 Standard Normal Distribution
  36. 36. 05: 標準正規分布 正規分布を平均0、標準偏差1にしたもの 確率密度関数 パラメーター なし ( 1 < x < 1) f(x) = 1 p 2⇡ exp ⇢ 1 2 x2
  37. 37. n回実施コイン投げ (表の確率: p) n → 05: 標準正規分布 平均を0にずらす 標準偏差を1に 縮める
  38. 38. 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コード 赤の曲線:理論的な確率 ヒストグラム:乱数から生成
  39. 39. 6/76 カイ二乗分布 Chi Square Distribution
  40. 40. 06: カイ二乗分布 標準正規分布に従う確率変数 を2乗してk個 足し合わせた                  が従う分布 確率密度関数 パラメーター k:自由度 (2乗した標準正規分布の確率変数の       足し合わせた数) f(x, k) = (1/2)k/2 (k/2) xk/2 1 e x/2 (0  x) Xi Z = X2 1 + · · · + X2 k
  41. 41. 平均を0にずらす n回実施 コイン投げ (表の確率: p) n → 06: カイ二乗分布 平均を0にずらす 標準偏差を1に 縮める 平均を0にずらす k=1のとき 二乗したところ に積んでいく k=3のとき k=3つ サンプリングする k=3つの長さを 足したものを プロットする
  42. 42. 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コード 赤の曲線:理論的な確率 ヒストグラム:乱数から生成
  43. 43. 7/76 指数分布 Exponential Distribution
  44. 44. 07: 指数分布 ポアソン分布が単位長(もしくは単位時間)に平均 何回生起するか、を表す分布であったが、同じ事象 を違う角度で捉え直したのが指数分布。 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 1cm 10cm 全部で傷が7つ ポアソン分布的考え方 指数分布的考え方 次発生するまでに、どのくらいの距離(時間)か
  45. 45. 07: 指数分布 確率密度関数 パラメーター λ:単位長(時間)に平均的に生起する回数 f(x, ) = ⇢ e x (x 0) 0 (x < 0)
  46. 46. n回実施 コイン投げ (表の確率: p) np一定で n→ 07: 指数分布 平均を0にずらす 間隔の長さをプロット
  47. 47. 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: 指数分布
  48. 48. 8/76 ガンマ分布 Gamma Distribution
  49. 49. 08: ガンマ分布 確率密度関数 パラメーター 単位長(時間)あたりβ回発生する指数分布の α個の和の確率分布を考えた時、ガンマ分布となる f(x, ↵, ) = ↵ (↵) x↵ 1 exp( x) (0  x < 1) ↵X i=1 Xi ⇠ (↵, )Xi ⇠ Exp( )
  50. 50. n回実施 コイン投げ (表の確率: p) np一定で n→ 平均を0にずらす 08: ガンマ分布 間隔の長さをプロット k=5つの長さを 足したものを プロットする k=5つサンプリング
  51. 51. 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: ガンマ分布
  52. 52. 9/76 逆ガンマ分布 Inverse Gamma Distribution
  53. 53. 09: 逆ガンマ分布 確率密度関数 パラメーター f(x, ↵, ) = ↵ (↵) x (↵+1) exp ✓ x ◆ (0  x < 1) 単位長(時間)あたりβ回発生する指数分布のα個の和の 確率分布を考えた時、ガンマ分布となる Xi ⇠ Exp( ) Z = ↵X i=1 Xi ⇠ (↵, ) 1/Z ⇠ IG(↵, ) この時、Zの逆数が従う分布を逆ガンマ分布と言う。
  54. 54. 平均を0にずらす n回実施 コイン投げ (表の確率: p) np一定で n→ 平均を0にずらす 間隔の長さをプロット 09: 逆ガンマ分布 k=5つの長さを 足したものを プロットする k=5つ サンプリング 全てのデータを y=1/x で変換 z z w w
  55. 55. 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: 逆ガンマ分布
  56. 56. 10/76 標準一様分布 Standard Uniform Distribution
  57. 57. 10: 標準一様分布 確率密度関数 パラメーター なし 0から1の間で等確率で発生するような現象を 表す分布 f(x) = ⇢ 1 (0  x  1) 0 (otherwise)
  58. 58. 10: 標準一様分布 コイン投げ (表の確率: p) q回実施 試行結果を各桁に割り当て 表=1 裏=0 表=1 裏=0 表=1 裏=0 1回目 2回目 q回目 ※ もっと効率の良いやり方もあると思いますが分かりやすさのため… Z = x1(1/2)1 + x2(1/2)2 + · · · + xq(1/2)q
  59. 59. 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: 標準一様分布
  60. 60. 11/76 一様分布 Standard Uniform Distribution
  61. 61. 確率密度関数 パラメーター a:下限 b:上限 f(x, a, b) = ⇢ (b a) 1 (a  x  b) 0 (otherwise) aからbの間では等確率で発生するような現象を 表す分布 11: 一様分布
  62. 62. コイン投げ (表の確率: p) q回実施 11: 一様分布 平行移動と引き延ばし
  63. 63. 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: 一様分布
  64. 64. 12/76 ベータ分布 Beta Distribution
  65. 65. 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) … … α個 β個
  66. 66. コイン投げ (表の確率: p) q回実施 12: ベータ分布 大きさの順に並べて 2つめの値をプロット 3つサンプリング
  67. 67. 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: ベータ分布
  68. 68. To be continued…
  69. 69. 参考 このスライドの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

×