ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

bootstrp

ブートストラップ標本化

構文

bootstat = bootstrp(nboot,bootfun,d1,...)
[bootstat,bootsam] = bootstrp(...)
bootstat = bootstrp(...,'Name',Value)

説明

bootstat = bootstrp(nboot,bootfun,d1,...) は、nboot 回のブートストラップ データ標本を抽出し、関数 bootfun を使用して各標本の統計量を計算し、行列 bootstat に結果を返します。nboot は正の整数でなければなりません。bootfun@ で指定された関数ハンドルです。bootstat の各行は、ブートストラップの標本に bootfun を適用した結果を含みます。bootfun が行列または配列を返す場合、この出力は、bootstat へ格納するために行ベクトルに変換されます。

3 番目以降の入力引数 (d1,...) は、関数 bootfun への入力を作成するために使用されるデータ (スカラー、列ベクトル、または行列) です。関数 bootstrp は、非スカラー データ引数 (これらは同じ行数でなければなりません) の行から復元抽出することでブートストラップの各標本を作成します。bootfun はスカラー データを変更せずに受け取ります。

[bootstat,bootsam] = bootstrp(...) は、nnboot 列の行列のブートストラップ インデックス bootsam を返します。bootsam における各列は、対応するブートストラップの標本を生成するために、元のデータセットから抽出された値のインデックスを含みます。たとえば、d1,... など、それぞれが 16 個の値を含み、nboot = 4 の場合、bootsam は 16 行 4 列の行列です。1 列目は、d1,... から抽出された 16 個の値のインデックスを含みます。2 列目は、4 つのブートストラップの標本の 2 番目の標本のインデックスを含みます。以下同様です (ブートストラップのインデックスは、すべての入力データセットに対して同じです)。関数に適用されない出力標本 bootsam を取得するには、bootfun を空 ([]) に設定してください。

bootstat = bootstrp(...,'Name',Value) は、1 つまたは複数の Name,Value ペア引数で指定される追加の引数を使用します。名前と値のペアは、データ引数の後に現れなければなりません。使用できる名前と値のペアは次のとおりです。

  • 'Weights' — 観測値の重み。weights 値は、少なくとも 1 つの正の要素を含む非負の数のベクトルでなければなりません。weights の要素数は、bootstrp の非スカラー入力引数の行数と等しくなければなりません。あるブートストラップのレプリカを取得するには、bootstrp によって、多項分布標本化確率として重みを使用して、N から N を復元抽出します。

  • 'Options' — 値は、ブートストラップ反復を並列で計算するかどうか、およびブートストラップの標本化中に乱数をどのように指定するかを指定するオプションを含む構造体です。statset を使用して options 構造体を作成します。該当する statset パラメーターは次のとおりです。

    • 'UseParallel'true の場合および Parallel Computing Toolbox™ の parpool が開いている場合、ブートストラップの反復回数を並列で計算します。Parallel Computing Toolbox がインストールされていないか、parpool が開いていない場合、計算は逐次モードで行われます。既定の設定は false (逐次計算) です。

    • UseSubstreams — 再生成可能な方法で並列計算する場合は true に設定します。既定値は false です。再現性のある計算を行うには、Streams をサブストリームを許可する型、'mlfg6331_64' または 'mrg32k3a' に設定します。

    • StreamsRandStream オブジェクトまたはそのようなオブジェクトのセル配列。Streams を指定しないと、bootstrp には既定のストリームが使用されます。Streams を指定するように選択した場合、次の場合を除いて単一オブジェクトを使用してください。

      • 開いている並列プールがある

      • UseParalleltrue

      • UseSubstreamsfalse

      この場合は、並列プールと同じサイズのセル配列を使用します。

すべて折りたたむ

相関係数の標準誤差のブートストラップ

この例では、サンプル データのブートストラップ再標本化を使用して相関係数標準誤差を計算する方法を説明します。

15 人の学生の LSAT スコアと法律学校の GPA のデータセットを読み込みます。これらの 15 データ点は、1000 の異なるデータセットを作成するために再標本化され、2 つの変数間の相関関係はデータセットごとに計算されます。

load lawdata
rng default  % For reproducibility
[bootstat,bootsam] = bootstrp(1000,@corr,lsat,gpa);

最初から 5 番目までのブートストラップ相関係数を表示します。

bootstat(1:5,:)
ans =

    0.9874
    0.4918
    0.5459
    0.8458
    0.8959

最初から 5 番目までのブートストラップ標本について選択されたデータのインデックスを表示します。

bootsam(:,1:5)
figure
hist(bootstat)
ans =

    13     3    11     8    12
    14     7     1     7     4
     2    14     5    10     8
    14    12     1    11    11
    10    15     2    12    14
     2    10    13     5    15
     5     1    11    11     9
     9    13     5    10     3
    15    15    15     3     3
    15    11     1     2     4
     3    12     7     8    13
    15    12     6    15     4
    15     6    12     6    13
     8    10    12     9     4
    13     3     3     4    14

ヒストグラムは、すべてのブートストラップ標本間の相関係数のばらつきを示しています。最小の標本は正の指標になっており、LSAT のスコアと GPA の関係が偶然でないことを示しています。

最後の推定相関係数の誤差のブートストラップ基準を計算します。

se = std(bootstat)
se =

    0.1285

ブートストラッピングされた統計量の密度の推定

この例では、ブートストラッピングされた平均値のカーネル密度を推定する方法を説明します。

ベクトル Y から取得した無作為な標本を使用して、100 個のブートストラッピングされた平均値の標本を計算します。

rng default;  % For reproducibility
y = exprnd(5,100,1);
m = bootstrp(100,@mean,y);

これらのブートストラッピングされた平均値の密度の推定値をプロットします。

figure;
[fi,xi] = ksdensity(m);
plot(xi,fi);

複数の統計値のブートストラッピング

この例では、データ ベクトルからブートストラッピングされた 100 個の標本の平均値と標準偏差を計算してプロットする方法を説明します。

ベクトル y から無作為に取得された標本により、100 個のブートストラッピングされた平均値と標準偏差の標本を計算します。

rng default  % For reproducibility
y = exprnd(5,100,1);
stats = bootstrp(100,@(x)[mean(x) std(x)],y);

ブートストラッピングされた推定値のペアをプロットします。

plot(stats(:,1),stats(:,2),'o')

回帰モデルのブートストラップ

この例では、残差をブートストラッピングして、線形回帰の係数ベクトルの標準誤差を推定する方法を説明します。

標本データを読み込みます。

load hald

線形回帰を実行し、残差を計算します。

x = [ones(size(heat)),ingredients];
y = heat;
b = regress(y,x);
yfit = x*b;
resid = y - yfit;

残差をブートストラッピングして標準誤差を推定します。

se = std(bootstrp(...
         1000,@(bootr)regress(yfit+bootr,x),resid))
se =

   56.1752    0.5940    0.5815    0.5989    0.5691

この情報は役に立ちましたか?