More Related Content
Similar to Rで学ぶ逆変換(逆関数)法 (20)
More from Nagi Teramo (20)
Rで学ぶ逆変換(逆関数)法
- 13. 君らエンジニア
じゃろう?無けれ
ば作りなさい!
CEOのアドバイス
13
- 17. 逆変換法とは
[0,1]の乱数
(例:0.1153…, 0.892…, 0.722…) u
変換 1
FX
FX からの乱数 x
17
- 18. 逆変換法とは
[0,1]の乱数
(例:0.1153…, 0.892…, 0.722…) u
1
変換 FX
正規 指数
分布 二項
分布
分布 x
18
- 19. 逆変換法とは
1. [0,1]区間の一様乱数 u を取得
1
2. x FX u として x を計算
3. x は累積分布関数 FXからの乱数
[0,1)の乱数 変換 FX からの乱数
(例:0.1153…, 0.892…, 0.722…)
1
u FX
x 19
- 20. (例)逆変換法で指数分布
• 累積分布関数 FX x 1 e x
• 累積分布関数の逆関数を計算
u : FX x 1 e x
1 log1 u
Xに
x
ついて解く
F 1
X u 1 log1 u
20
- 21. (例)逆変換法で指数分布
1. rand.exponential <- function(lambda, u)
2. {
3. - 1.0/lambda * log(1-u)
4. }
5. #λ=0.5とした指数分布に従う10000個生成
6. x <- sapply(runif(10000), function(u)rand.exponential(0.5,u))
7. #plot
8. qplot(x, geom = "blank") +
9. geom_histogram(aes(y=..density..),fill="bisque",colour="black") +
10. stat_function(fun=dexp,color="red",size=1,arg=list(rate=0.5)) +
11. scale_x_continuous(limits = c(0, 10))
21
- 22. (例)逆変換法で指数分布
0.5
Rで作った頻度分布 VS 実際の密度関数
0.4
0.3
density
0.2
0.1
0.0
0.0 2.5 5.0 7.5 10.0
x
22
- 29. そんなテキストらによくある証明
Pr X x Pr FX U x
1
PrU FX x FX x
29
- 38. 逆変換法的に考えて・・・
[0,1]の乱数
(例:0.1153…, 0.892…, 0.722…) u
変換 1
FX
あたり:50%
はずれ:50%
x
38
- 40. アルゴリズム的に考えて・・・
あたり if 0.0 u 0.5
,
結果
はずれ, if 0.5 u 1.0
u~Uniform(0,1)
40
- 42. こんな感じでPLOTしてます
1. library(grid)
2. library(ggplot2)
3. sampling <- function(size, generator)
4. {
5. data.frame(table(sapply(runif(size), unction(u)generator(u)),dnn=c("Result")))
6. }
7. plot.bar <- function(x,colors)
8. {
9. ggplot() +
10. geom_bar(data=x, aes(x=Result, y=Freq,fill=Result),width=.8) +
11. theme(
12. legend.key.size=unit(2,"cm"),
13. legend.text =element_text(size=20),
14. legend.title=element_text(size=20),
15. axis.text.x =element_text(size=25),
16. axis.text.y =element_text(size=25),
17. axis.title.x=element_text(size=25),
18. axis.title.y=element_blank()
19. ) +
20. scale_fill_manual(values=colors)
21. }
22. plot.bar(sampling(10,example.1),c("#4F81BD","#C0504D"))
42
- 44. 10回回した結果
6
Result
4
あたり
2 はずれ
0
あたり はずれ
Result
44
- 52. アルゴリズム的に考えて・・・
あたり if 0.0 u 0.7
,
結果
はずれ, if 0.7 u 1.0
u~Uniform(0,1)
52
- 64. 逆変換法的に考えて・・・
[0,1]の乱数
(例:0.1153…, 0.892…, 0.722…) u
変換 1
FX
青: 33%
赤:33%, 緑: 33%
x
64
- 65. 単純に考えて・・・
青 赤 緑
0.0 0.333… 0.666… 1.0
(1/3) (2/3) 65
- 66. アルゴリズム的に考えて・・・
1
青 , if 0 u
3
1 2
くじ 赤 , if u
3 3
緑 , if 3 u 1
2
u~Uniform(0,1) 66
- 74. 逆変換法的に考えて・・・
[0,1]の乱数
(例:0.1153…, 0.892…, 0.722…) u
変換 1
FX
青: 10%
赤:20%, 緑: 70% x
74
- 76. アルゴリズム的に考えて・・・
青, if 0.0 u 0.1
くじ 赤, if 0.1 u 0.3
緑, if 0.3 u 1.0
u~Uniform(0,1) 76
- 82. アルゴリズム的に考えて・・・
青, if 0.0 u 0.1
くじ 赤, if 0.1 u 0.3
緑, if 0.3 u 1.0
u~Uniform(0,1) 82
- 86. 青が出る確率(10%)+
赤が出る確率(20%)
赤, if 0.1 u 0.3
青が出る確率(10%)
86
- 87. アルゴリズム的に考えて・・・
青, if 0.0 u 0.1
くじ 赤, if 0.1 u 0.3
緑, if 0.3 u 1.0
u~Uniform(0,1) 87
- 89. 青が出る確率(10%)+
赤が出る確率(20%)+
緑が出る確率(70%)
青が出る確率(10%)+
赤が出る確率(20%)
緑, if 0.3 u 1.0
89
- 91. アルゴリズム的に考えて・・・
青, if 0.0 u 0.1
くじ 赤, if 0.1 u 0.3
緑, if 0.3 u 1.0
u~Uniform(0,1) 91
- 92. 結果を文字式へ
x1 , if 0.0 u 0.1
X x2 , if 0.1 u 0.3
x3 , if 0.3 u 1.0
u~Uniform(0,1) 92
- 93. 確率を文字式へ
x1 , if 0 u Px1
X x2 , if Px1 u Px1 Px2
x3 , if Px1 Px2 u Px1 Px2 Px3
u~Uniform(0,1) 93
- 94. x1 , if 0 u Px1
x2 , if Px1 u Px1 Px2
x3 , if Px1 Px2 u Px1 Px2 Px3
94
- 95. 和の記号(Σ)を使って書く
x 0 1
, if Pxi u Pxi
1 i1 i 1
x
2 i1
1 2
, if Pxi u Pxi
i 1
x 2 3
, if Pxi u Pxi
3 i1 i 1
95
- 96. 和の記号(Σ)を使って書く
x 0 1
, if Pxi u Pxi
1 i1 i 1
x
2 i1
1 2
, if Pxi u Pxi
i 1
x 2 3
, if pi u pi
自分の番号(2)から1引いた数値
3 i1 i 1
(1)と同じ番号(2)で和をとる
96
- 99. x1
くじ引きの設定
x2
x3 x4
x5 x6
x7 x8
x9 x10
x11 x12
x13 x14
x15 x16
x17 x18
x19 x20
x21 x22
x23 x24
x25 x26
x27 …
x_N-1 xN
99
- 101. N択くじの2番目結果は?
x
21
2 i1
2
, if Pxi u Pxi
i 1
自分の番号から1引いた数値と
同じ番号で和をとる
101
- 102. N択くじのn番目結果は?
x
n 1
n i1
n
, if Pxi u Pxi
i 1
自分の番号から1引いた数値と
同じ番号で和をとる
102
- 104. Nを∞にすると・・・
x
n i1
n 1
i 1
n
, if Pxi u Pxi
x x
x
, if px'dx' u px'dx'
104
- 105. FX x px'dx' u
x
1
両辺に F X かける
x F u 1
X 105
- 106. 逆変換法とは(再掲)
1. [0,1]区間の一様乱数 u を取得
1
2. x FX u として x を計算
3. x は累積分布関数 FXからの乱数
[0,1)の乱数 変換 FX からの乱数
(例:0.1153…, 0.892…, 0.722…)
1
u FX
x 106
- 107. 逆変換法とは(再掲)
1. [0,1]区間の一様乱数 u を取得
1
2. x FX u として x を計算
3. x は累積分布関数 FXからの乱数
[0,1)の乱数 変換 FX からの乱数
(例:0.1153…, 0.892…, 0.722…)
1
u FX
x 107