サンプルのリサンプリングまたはシャッフルに依存するさまざまなリサンプリングメソッド、または大まかに「シミュレーション」メソッドと呼ばれるものを見つけることができます。適切な用語に関して意見には違いがあるかもしれませんが、以下の議論では、適切な文献で利用できるものを一般化し、簡素化しようとします。
リサンプリング方法は、(1)データのサブセットを使用してサンプル統計の精度/精度を推定する(Jackknifingなど)、またはデータポイントのセットから置き換えてランダムに描画する(ブートストラップなど)(2)有意性を実行するときにデータポイントのラベルを交換するテスト(置換テスト、正確テスト、ランダム化テスト、または再ランダム化テストとも呼ばれます)(3)ランダムサブセットを使用したモデルの検証(ブートストラップ、クロス検証)(wikipedia:リサンプリングメソッドを参照)
ブートストラップ
「ブートストラップは、元のサンプルから置換してサンプリングすることにより、推定器のサンプリング分布を推定するための統計的手法です」。この方法では、精度の測定値(バイアス、分散、信頼区間、予測誤差などの測定値で定義)をサンプル推定値に割り当てます。
ブートストラップの基本的な考え方は、サンプルデータ(サンプル→母集団)からの母集団に関する推論は、サンプルデータをリサンプリングし、推論を実行する(リサンプル→サンプル)ことでモデル化できるということです。母集団が不明であるため、母集団の値に対するサンプル統計の真の誤差は不明です。bootstrap-resamplesでは、「人口」が実際にサンプルであり、これは既知です。したがって、リサンプルデータからの推論の品質→「true」サンプルが測定可能です。」ウィキペディアを参照
Yvar <- c(8,9,10,13,12, 14,18,12,8,9, 1,3,2,3,4)
#To generate a single bootstrap sample
sample(Yvar, replace = TRUE)
#generate 1000 bootstrap samples
boot <-list()
for (i in 1:1000)
boot[[i]] <- sample(Yvar,replace=TRUE)
単変量問題では、通常、個々の観測値を置換(「ケースリサンプリング」)でリサンプリングすることは許容されます。ここで、置換を使用してデータをリサンプリングします。リサンプルのサイズは、元のデータセットのサイズと等しくなければなりません。
回帰問題では、 ケースのリサンプリングとは、個々のケースをリサンプリングする単純なスキームを指します-多くの場合、回帰問題のデータセットの行、説明変数は固定されているか、少なくとも応答変数よりも制御されて観察されます。また、説明変数の範囲は、それらから利用可能な情報を定義します。したがって、ケースをリサンプルするとは、各ブートストラップサンプルが一部の情報を失うことを意味します(Wikipediaを参照)。したがって、単にデータの行をサンプリングするのは論理的Yvar
です。
Yvar <- c(8,9,10,13,12, 14,18,12,8,9, 1,3,2,3,4)
Xvar <- c(rep("A", 5), rep("B", 5), rep("C", 5))
mydf <- data.frame (Yvar, Xvar)
boot.samples <- list()
for(i in 1:10) {
b.samples.cases <- sample(length(Xvar), length(Xvar), replace=TRUE)
b.mydf <- mydf[b.samples.cases,]
boot.samples[[i]] <- b.mydf
}
str(boot.samples)
boot.samples[1]
交換でサンプリングしているため、いくつかのケースが繰り返されていることがわかります。
" パラメトリックブートストラップ -パラメトリックモデルは、多くの場合最尤法によってデータに適合され、乱数のサンプルはこの適合モデルから引き出されます。通常、引き出されたサンプルは元のデータと同じサンプルサイズを持ちます。ブートストラップ方法論のサンプリング段階でのパラメトリックモデルの使用は、基本的な統計理論を適用することによって得られる手順とは異なる手順につながります。同じモデルの推論へ。」(ウィキペディアを参照)。以下は、平均および標準偏差パラメーターを使用した正規分布の仮定を使用したパラメーターブートストラップです。
Yvar <- c(8,9,10,13,12, 14,18,12,8,9, 1,3,2,3,4)
# parameters for Yvar
mean.y <- mean(Yvar)
sd.y <- sd(Yvar)
#To generate a single bootstrap sample with assumed normal distribution (mean, sd)
rnorm(length(Yvar), mean.y, sd.y)
#generate 1000 bootstrap samples
boot <-list()
for (i in 1:1000)
boot[[i]] <- rnorm(length(Yvar), mean.y, sd.y)
ブートストラップには他にも変形があります。ウィキペディアのページまたはリサンプリングに関する静的な本を参照してください。
ジャックナイフ
「パラメータのジャックナイフ推定を体系によって求められる各観測を除外データセットからと推定値を計算し、次にこれらの計算の平均を求める。サイズNのサンプルが与えられると、ジャックナイフ推定値は、それぞれの推定集約することにより発見されたN − 1
推定値をサンプルで。」参照:ウィキペディア以下は、をジャックナイフする方法を示していますYvar
。
jackdf <- list()
jack <- numeric(length(Yvar)-1)
for (i in 1:length (Yvar)){
for (j in 1:length(Yvar)){
if(j < i){
jack[j] <- Yvar[j]
} else if(j > i) {
jack[j-1] <- Yvar[j]
}
}
jackdf[[i]] <- jack
}
jackdf
「通常のブートストラップとジャックナイフ、パラメータの仮定からではなく、サブサンプル間の統計値の変動性から統計値の変動性を推定します。どちらも近似の数値結果をもたらします。そのため、それぞれが他方の近似と見なすことができます。」Bootstrap対Jacknifeに関するこの質問を参照してください。
ランダム化検定
「パラメトリックテストでは、1つまたは複数の母集団からランダムにサンプリングします。これらの母集団について一定の仮定を行います。最も一般的には、それらは等分散で正規分布します。多くの場合、m1 -m2 = 0。対応する母集団パラメーターの推定値としてサンプル統計を使用し、検定統計量(検定時など)を計算します(例:スチューデントのt-分散が不明であるが考慮される場合の平均の差の検定)関心のある H0: m1 = m2
仮説は次のとおりです。対立仮説の1つは次のように述べられます。HA: m1 < m2
。母集団1および2から抽出された2つのサンプルが与えられ、これらが等分散の正規分布母集団であり、サンプルが各母集団から独立してランダムに抽出されたと仮定すると、分布が既知の統計を詳しく調べて検定できますH0
。
これらの分布の仮定を回避する1つの方法は、非パラメトリック、ランク-順序、ランク-のような、および分布-無料の統計と呼ばれるアプローチです。これらの分布-無料統計は、通常、母集団が正規分布していると仮定した場合の類似のテストよりも「効率が悪い」と批判されます。
別の代替アプローチは、ランダム化アプローチです。「観測がメンバーであるサンプルに関する知識とは無関係に、観測にランダムにランクを割り当てるプロセス。ランダム化テストでは、このような手順を使用しますが、ジョイントではなく、観測に対して操作を行います観察のランキング。この理由のため、類似の統計量(一つのサンプルの観測値の和)の分布を容易にそのような分布を列挙することは理論的に可能であるが、表にすることができません」(参照)
ランダム化テストは、ほぼすべての点でパラメトリックテストと異なります。(1)1つまたは複数の母集団からランダムサンプルを取得する必要はありません。実際、通常はランダムにサンプリングしていません。(2)データの由来となる母集団に関して考えることはめったになく、正規性や同分散性について何も仮定する必要はありません(3)帰無仮説はパラメーターとは関係ありませんが、たとえば、治療が参加者のパフォーマンスに影響を与えないという仮説。(4)集団に関心がないため、集団の特性の推定(またはテスト)に関心がありません(5)一種の検定統計量ですが、その統計量をテーブル分布と比較しません。代わりに、グループ間でデータを繰り返しランダム化したときに得られた結果と比較し、各ランダム化に対応する統計を計算します。(6)ランダム化テストは、パラメトリックテストよりもさらに、参加者を治療にランダムに割り当てることの重要性を強調しています。」をご覧ください。
非常に人気のあるランダム化テストのタイプは、順列テストです。サンプルサイズが12と5の場合、可能な置換の合計はC(12,5) = 792
です。サンプルサイズが10と15であれば、320万以上のアレンジが可能になります。これがコンピューティングの課題です:それでは何ですか? サンプル。可能な配置の宇宙が大きすぎて、この宇宙からの配置を独立してランダムにサンプリングしないのはなぜですか?次に、この一連のサンプルにわたる検定統計量の分布を集計し、その平均と分散を計算し、仮説検定に関連するエラー率を推定します。
授精テスト
ウィキペディアによると、「順列検定(ランダム化検定、再ランダム化検定、または正確検定とも呼ばれます)は、すべての可能な値を計算することにより帰無仮説の下での検定統計量の分布が得られる統計的有意性検定の一種です観測されたデータポイントのラベルの再配置の下での検定統計量の分布。分布が既知であるかどうかに関係なく、あらゆる検定統計量に対して置換検定が存在します。したがって、仮説と代替案を区別する統計量を常に自由に選択できます。損失を最小限に抑えます。」
順列とブートストラップの違いは、ブートストラップが置換ありのサンプルと置換なしの置換サンプルがあることです。いずれの場合も、観測の時間順序が失われるため、ボラティリティクラスタリングが失われます。したがって、サンプルはボラティリティクラスタリングなしという帰無仮説の下にあることが保証されます。
順列は常にすべて同じ観測値を持っているため、ブートストラップサンプルよりも元のデータに似ています。期待されるのは、順列テストがブートストラップテストよりも敏感であるべきだということです。順列は、ボラティリティクラスタリングを破壊しますが、その他の変動性は追加しません。
順列vsブートストラップに関する質問を参照してください-「順列テストは仮説のテストに最適であり、ブートストラップは信頼区間の推定に最適です」。
したがって、この場合に順列を実行するにreplace = FALSE
は、上記のブートストラップの例を変更するだけです。
Yvar <- c(8,9,10,13,12, 14,18,12,8,9, 1,3,2,3,4)
#generate 1000 bootstrap samples
permutes <-list()
for (i in 1:1000)
permutes[[i]] <- sample(Yvar,replace=FALSE)
複数の変数の場合、行を選択して順序を入れ替えるだけでは、データは変わらないため、違いは生じません。そのため、y変数をシャッフルします。あなたがやったことの何かですが、両方を二重にシャッフルする必要はないと思います(あなたがやったように)。 x
y variables
Yvar <- c(8,9,10,13,12, 14,18,12,8,9, 1,3,2,3,4)
Xvar <- c(rep("A", 5), rep("B", 5), rep("C", 5))
mydf <- data.frame (Yvar, Xvar)
permt.samples <- list()
for(i in 1:10) {
t.yvar <- Yvar[ sample(length(Yvar), length(Yvar), replace=FALSE) ]
b.df <- data.frame (Xvar, t.yvar)
permt.samples[[i]] <- b.df
}
str(permt.samples)
permt.samples[1]
モンテカルロ法
「モンテカルロ法(またはモンテカルロ実験)は、数値結果を得るために繰り返しランダムサンプリングに依存する計算アルゴリズムの幅広いクラスです。通常、未知の確率論的エンティティの分布を得るために何度もシミュレーションを実行します。技術の類似性から、実際のギャンブルカジノでの結果の再生と記録の行為まで。」ウィキペディアを参照
「応用統計では、モンテカルロ法は通常2つの目的に使用されます。
(1)現実的なデータ条件の下で小さなサンプルの競合する統計を比較する。統計のタイプIの誤差と検出力の特性は、漸近的条件(つまり、無限のサンプルサイズと無限に小さな処理効果)の古典的な理論分布(例:正規曲線、コーシー分布)から得られたデータに対して計算できますが、実際のデータはそのような分布はありません。
(2)漸近分布の臨界値よりも正確でありながら、置換テスト(多くの場合計算が不可能な場合が多い)などの正確なテストよりも効率的な仮説テストの実装を提供すること。
モンテカルロ法は、近似ランダム化と置換テストの間の妥協でもあります。おおよそのランダム化試験が(順列が考慮されている潜在的に膨大なハウスキーピングを伴う)全ての順列の特定のサブセットに基づいています。モンテカルロアプローチは、指定された数のランダムに描画された順列に基づいています(順列が2回以上、またはより頻繁に描画される場合、どの順列が既に選択されているかを追跡する必要がないため、精度のわずかな損失を交換します)。
MCとPermutationテストの両方は、ランダム化テストと呼ばれることもあります。違いはMCの順列サンプルをサンプリングすることです。すべての可能な組み合わせを使用してください。
相互検証
相互検証を超えたアイデアは、モデルの適合に使用されなかったデータを使用してモデルをテストする必要があるということです。相互検証は、おそらく予測のコンテキストで最も頻繁に使用されます。
「クロスバリデーションは、予測モデルを検証するための統計的手法です。データのサブセットは検証セットとして使用するために保持されます。モデルは残りのデータ(トレーニングセット)に適合し、検証セットの予測に使用されます。検証セット全体の予測の品質により、予測精度の全体的な尺度が得られます。
相互検証の1つの形式では、一度に1つの観測が除外されます。これはジャックナイフに似ています。別のK分割交差検証では、データをK個のサブセットに分割します。Wikipediaを参照してください。通常、クロス検証は定量的データを使用して行われます。何らかの方法で定性的(因子データ)を定量的に変換して、線形モデルに適合し、このモデルをテストできます。データの50%がモデルの予測に使用され、残りがテストに使用されるホールドアウト戦略Xvar
。
Yvar <- c(8,9,10,13,12, 14,18,12,8,9, 1,3,2,3,4)
Xvar <- c(rep(1, 5), rep(2, 5), rep(3, 5))
mydf <- data.frame (Yvar, Xvar)
training.id <- sample(1:nrow(mydf), round(nrow(mydf)/2,0), replace = FALSE)
test.id <- setdiff(1:nrow(mydf), training.id)
# training dataset
mydf.train <- mydf[training.id]
#testing dataset
mydf.test <- mydf[test.id]
ブートストラップおよび置換テストとは異なり、トレーニングおよびテスト用の相互検証データセットは異なります。次の図は、さまざまな方法でのリサンプリングの概要を示しています。
これが少し役立つことを願っています。