How to | ブートストラップ解析を行う方法
限られた量のデータしかなく,そのデータから母集団についての統計の推定値を得る場合を考えてみよう.そのような推定値の標本分布は,もとのデータから新しい標本を取り出してから,各標本から統計を計算することによって,近似することができる.この過程はブートストラップ方式と呼ばれ,Wolfram言語ではRandomChoiceを使って行うことができる.
data = {7.05, 2.49, 16.09, 21.3, 19.21, 14.88, 16.41, 0.19, 9.71, 10.18, 8.81, 2.93, 18.11, 22.2, 9.79, 14.74, 4.54, 16.76, 8.46, 24.9}RandomChoiceを使い,置換によって標本を抽出することができる.RandomChoiceの第2引数としてLength[data]を含むことによって,もとの標本と同じ大きさの新しい標本を生成することができる:
smpl = RandomChoice[data, Length[data]]もとのデータ集合が,その集合が導き出されたより大きい母集団の典型的な値であると仮定すると,新たに抽出された標本値ももとの母集団からの標本のように働くはずである.したがって,もとのデータ集合からの標本の統計は,母集団の標本統計のシミュレーションとなるはずである.
Skewnessを使って,もとのデータの歪度を計算する:
Skewness[data]Skewness[smpl]もとのデータ集合から数回標本を抽出し,これらの標本それぞれの歪度を計算することによって,歪度の標本分布の近似値を出すことができる.
Tableを使って,新たに抽出された1000個のデータ集合について歪度の値を反復的に計算する:
skews = Table[Skewness[RandomChoice[data, Length[data]]], {1000}];Histogramを使って,新たに抽出された1000個のデータ集合について歪度の値の標本分布を可視化することができる:
Histogram[skews]新たに抽出された標本値のリストは,推定値について標本空間,この場合は歪度を提供するので,追加的な統計を計算することもできる.
歪度の推定値における標準誤差を推定する.推定値の標準偏差が標準誤差である:
StandardDeviation[skews]Quantileを使って標本の歪度について95%の信頼区間を得る:
Quantile[skews, {.025, .975}]最大尤度のフィットにおけるパラメータ推定値のような,より複雑な結果にもブートストラップ方式が使える.
ガンマ分布から点をいくつか生成し,そのデータのヒストグラムを表示する:
gdata = BlockRandom[SeedRandom[1];RandomVariate[GammaDistribution[2, 3], 100]];Histogram[gdata]データ集合が特定の型の分布に従うと仮定して,データ集合からパラメータ推定値を得ると便利なことがよくある.例えば最大の尤度を使って,ガンマ分布から生成されたデータの α および β のパラメータを推定したい場合がある.
FindDistributionParametersを使ってデータ集合全体の対数尤度関数を得ることができる:
FindDistributionParameters[gdata, GammaDistribution[α, β]]これでデータをもとのデータ集合からの値の再サンプリングで置換することによって,パラメータ推定値の統計をブートストラップすることができる.この操作はRandomChoiceを使って再サンプリングされたデータ集合を得ることによって行うことができる:
FindDistributionParameters[RandomChoice[gdata, Length[gdata]], GammaDistribution[α, β]]params := {α, β} /. FindDistributionParameters[RandomChoice[gdata, Length[gdata]], GammaDistribution[α, β]]paramsを何度も評価して α および β について多くの推定値を生成し,パラメータの標本空間を与えることができる.
Tableをparamsと一緒に使って,α および β について100個の推定値を得る:
ests = Table[params, {100}];パラメータ値のブートストラップ推定値を得るために,推定値の平均を取る:
Mean[ests]相関行列をパラメータ推定値について計算することで,α および β の推定値の関係を評価することができる:
Correlation[ests]//MatrixForm