【zansa】第17回 ブートストラップ法入門
DESCRIPTION
Zansa 第17回 2013/11/27 の資料 『ブートストラップ法入門』@ksmznTRANSCRIPT
ブートストラップ法入門
@ksmzn
第 17 回 Zansa
27 Novenber 2013
1 / 31
誰か
Twiiter : @ksmzn
専門 : 計算機統計
2 / 31
本日のテーマは!
3 / 31
4 / 31
ではなく!
5 / 31
ブートストラップ法!!
6 / 31
ブートストラップ法とは?
ブートストラップ法(Bootstrap Method)とは、n 個の標本 x1, x2, ..., xnから繰り返しを許してランダムに n 個の標本をB組選び、平均や分散などパラメータの推定値を繰り返し求め、その分布からパラメータの確率分布や誤差を推定する方法
7 / 31
ブートストラップ法とは
とにかくやってみよう!!
8 / 31
前提
ターゲットは、統計量の標本分布!定義
F :未知の確率分布θ : F に関する興味あるパラメータθ = T (F )で表されるとするFn : 既知の経験分布関数F から抽出された n個の標本Xで構成されるθn : θの推定値として用いる統計量θn = T (FN)で表されるθnはサンプリングのたびに変動するので、θnは分布Gnを持つ。(θn ∼ Gn)
9 / 31
かんたんな例で考えよう!
10 / 31
簡単な例
平均を求める場合
F :未知の確率分布µ : F の平均を知りたい。µ = T (F ) = EF [X]
x = {12, 15, 16, 17, 19, 20, 22, 23, 25, 28}F から抽出された 10個の標本Fn : 既知の経験分布関数10個の標本 xで構成されるµn : µの推定値として用いる統計量µn = T (Fn) =
1n
∑ni=1 xi = 19.7
µnはサンプリングのたびに変動するので、µnは分布Gnを持つ。(µn ∼ Gn)
11 / 31
経験分布関数Fn
n個の標本x1, x2, ..., xnを大きい順に x(1), x(2), ..., x(n)と並べ替え、各点に等確率 1
n を与えた分布
赤:真の分布関数 黒:経験分布関数(n = 40)
12 / 31
リサンプリング
この経験分布関数Fnからさらにサンプリングする!
→ xから復元抽出する!
13 / 31
ブートストラップ標本の例
n = 10の標本
x = {12, 15, 16, 17, 19, 20, 22, 23, 25, 28}
から 10個 復元抽出してみる
x∗(1) = {20, 19, 20, 23, 19, 28, 23, 28, 17, 25}
もう一度 10個 復元抽出してみる
x∗(2) = {15, 23, 12, 17, 23, 25, 16, 22, 25, 25}
14 / 31
ブートストラップ標本
この経験分布関数Fnからのランダムサンプリングをブートストラップ標本という。x1, x2, ..., xnからn個を復元抽出して得たx∗ = {x∗1, x∗2, ..., x∗n}で構成した経験分布関数をF ∗
nとする
15 / 31
ブートストラップ標本の平均をとってみる
もとの標本の平均
x = {12, 15, 16, 17, 19, 20, 22, 23, 25, 28}
→ µn = 1n
∑ni=1 xi = 19.7
x∗(1) = {20, 19, 20, 23, 19, 28, 23, 28, 17, 25}
→ µ∗1 =
1n
∑ni=1 x
∗i (1) = 22.2
x∗(2) = {15, 23, 12, 17, 23, 25, 16, 22, 25, 25}
→ µ∗2 =
1n
∑ni=1 x
∗i (2) = 20.3
16 / 31
ブートストラップ推定量の分布
µ∗1 = 22.2, µ∗
2 = 20.3, µ∗3 = 19.5, ...
ブートストラップ標本を取るたびにその平均値が変わるので、ブートストラップ推定量µ∗は分布G∗
nをもつ。
↓
ブートストラップ標本の平均をB = 2000回作って、ヒストグラムを作ってみよう!!
17 / 31
Mathematica code
bootstrap[func_ , dat_ , num_] :=
Table[func[RandomChoice[dat , Length[dat]]], {i, num}]
data = {12, 15, 16, 17, 19, 20, 22, 23, 25, 28};
boot = bootstrap[Mean , data , 2000];
Histogram[boot , Automatic]
In [289]:= N[Mean[boot]]
Out [289]= 19.6897
16 18 20 22 24 26
50
100
150
200
250
300
18 / 31
ブートストラップ法の流れ
1 母集団F から大きさnの標本を抽出する2 標本から興味のあるパラメータ θnを求める3 標本から復元抽出をB回繰り返してブートストラップ標本をつくる
4 それぞれのブートストラップ推定値を求め、バイアスや信頼区間を求める
19 / 31
ブートストラップ法の考え方
ブートストラップ法は以下のような置き換えをしている
未知の確率分布 F ⇒ 経験分布関数 Fn
F に関する θ = T (F ) ⇒ Fnに関する θn = T (Fn)
推定量 θn = T (Fn) ⇒ ブートストラップ推定量の分布Gn θ∗n = T (F ∗
n)の分布G∗n
未知のF から標本を何度も抽出できないので、既知のFnからサンプリングしている。
20 / 31
適用例
ガンマ分布Γ(α, β)のパラメータを推定してみよう!
21 / 31
ガンマ分布
ガンマ分布 Γ(5, 2)から標本を抽出して、パラメータ推定をしてみる
5 10 15 20 25 30
0.02
0.04
0.06
0.08
22 / 31
標本を抽出
Γ(5, 2)から標本を 30個抽出して、パラメータを最尤推定してみるIn [304]:= dat = RandomReal[GammaDistribution [5, 2], 30];
edist = FindDistributionParameters[dat ,
GammaDistribution[α, β]]
Out [305]= {α -> 7.05494 , β -> 1.41704}
_人人人人人人人人_> ぜんぜん違う <‾Y^Y^Y^Y^Y^Y^Y‾
23 / 31
パラメータの最尤推定値の分布
試しに、30個の標本を 1000組取り出し、最尤推定値の分布を見てみる
4 6 8 10 12 14
50
100
150
α : 平均 5.46133分散 2.05054
1.0 1.5 2.0 2.5 3.0 3.5 4.0
50
100
150
β : 平均 1.94222分散 0.247136
24 / 31
このように母集団から何度もサンプリングできればよいが、現実的には難しい。
↓
ブートストラップ標本をとろう!
25 / 31
ブートストラップ推定量
ブートストラップ標本を 2000組抽出し、パラメータを推定してみる。
In [432]:=
Fgamma[dat_] :=
FindDistributionParameters[dat ,
GammaDistribution[α, β]]boot = bootstrap[Fgamma , dat , 2000];
Mean[boot[[All , All , 2]]]
Out [434]={7.95611 , 1.34972}
↑ 2000組のブートストラップ推定値 α, β の平均
26 / 31
バイアスの計算
推定の誤差を捉えるため、バイアスを計算してみる
推定量 θnのバイアス
b(Fn) = EFn(θ∗n)− θn
≈ 1
B
B∑b=1
θ∗n(b)− θn
In [443]:= nvalue = Fgamma[dat]
bias = Mean[boot[[All , All , 2]]] - nvalue [[All , 2]]
Out [443]= {0.901169 , -0.067321}
αのバイアスが 0.901169, βのバイアスが−0.067321となった
27 / 31
ブートストラップ推定量をバイアスで修正
ブートストラップ偏り修正済推定量
θ̃ = θn − b(Fn)
= 2θn − EFn(θ∗n)
In [443]:= nvalue [[All , 2]] - bias
Out [444]= {6.15377 , 1.48436}
偏り修正済推定量は、(α, β) = (6.15377, 1.48436)となった
28 / 31
ブートストラップ偏り修正済推定量の分布偏り修正済推定量temp = Table[dat = RandomReal[GammaDistribution [5, 2], 30];
boot = bootstrap[Fgamma , dat , 100];
nvalue = Fgamma[dat];
bias = Mean[boot[[All , All , 2]]] - nvalue [[All , 2]];
nvalue [[All , 2]] - bias , {i, 100}];
3 4 5 6 7 8 9 10
10
20
30
40
α : 平均 4.98765分散 1.38136
1.0 1.5 2.0 2.5 3.0
10
20
30
40
β : 平均 1.96953分散 0.203531
29 / 31
まとめ
ブートストラップ法は、標本から多数回リサンプリングを行いパラメータを推定する未知の確率分布を既知の経験分布に置き換える母集団がわからない場合でも、計算機におまかせ統計量の偏り(や分散、パラメータに対する信頼区間)を構成できる
30 / 31
ありがとうございました。
31 / 31