Bootstrap prosedürleri ile Monte Carlo prosedürleri arasındaki bu karışıklık tekrarlamaya devam ediyor, bu yüzden belki de bu, ele alınması gereken herhangi bir yer. ( R
Kod örnekleri ev ödevlerinde de yardımcı olabilir.)
Bootstrap'in bu uygulamasını şu şekilde düşünün :R
boot <- function(x, t) { # Exact bootstrap of procedure t on data x
n <- length(x) # Must lie between 2 and 7 inclusive.
if (n > 7) {
stop("Sample size exceeds 7; use an approximate method instead.")
}
p <- c(n, 1:(n-1))
a <- rep(x, n^(n-1))
dim(a) <- rep(n, n)
y <- as.vector(a)
while (n > 1) {
n <- n-1
a <- aperm(a, p)
y <- cbind(as.vector(a), y)
}
apply(y, 1, t)
}
Hızlı bir bakış, bunun deterministik bir hesaplama olduğunu teyit edecektir : rastgele değerler üretilmez veya kullanılmaz. (İlgilenen okuyucuların kendileri için anlamaları için iç çalışmalarının ayrıntılarını bırakacağım.)
Bağımsız değişkenler boot
, dizideki sayısal veri grubu x
ve tek bir sayısal değer döndürmek t
için bir işleve (tam olarak olduğu gibi dizilere uygulanabilen) bir başvurudır x
; diğer bir deyişle, t
bir istatistiktir . Tüm olası örnekleri her birinden değiştirerek üretir x
ve t
bunlara uygulanır , böylece her bir örnek için bir sayı üretir: bu kısaca bootstraptir. Dönüş değeri temsil eden bir dizi tam önyükleme dağılımına ait t
numune için x
.
Küçük bir örnek olarak , bir örnek için ortalamayı başlatalım x
= c(1,3)
:
> boot(c(1,3), mean)
> [1] 1 2 2 3
Gerçekten de ( 1 , 3 ) ' ten değiştirilen boyutta dört olası numune vardır ; yani, ( 1 , 1 ) , ( 1 , 3 ) , ( 3 , 1 ) ve ( 3 , 3 ) . hepsini oluşturur (listelenen sırayla) ve her biri için geçerlidir . Bu durumda ortalamayı hesaplar ve bunlar 1 , 2 , 2 ve 3 olur2( 1 , 3 )( 1 , 1 )( 1 , 3 )( 3 , 1 )( 3 , 3 )boot
t
t
1223, çıkışta gösterildiği gibi.
Buradan nereye gideceğiniz, bootstrap'i nasıl kullanmak istediğinize bağlıdır. Tam bootstrap hakkında bilgiler yüzden görüntülemek için iyi bir fikir genellikle var, bu çıkış dizisinde bulunur. Standart sapmanın örnekten önyüklendiği bir örnek :( 1 , 3 , 3 , 4 , 7 )
hist(boot(c(1,3,3,4,7), sd))
5
> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
95%
3.835870
Bu özel rasgele örnek için sonuç 3.83587'dir. Bu kesindir: Aynı veri kümesiyle boot
tekrar arayacak olsaydınız, cevap tamamen aynı olurdu. Peki cevap farklı rastgele örneklerle nasıl değişebilir? Bu işlemi birkaç kez tekrarlayarak ve sonuçların bir histogramını çizerek öğrenin:
> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)
01010 / 12--√≈ 2.887
> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75
Ama bu, belirttiğimiz (ve umduğumuz) nominal% 95'e yakın bir yerde değil! Bu bir simülasyon değeri: umutlarımızı gerçekte olanlarla karşılaştırıyor. (Neden tutarsızlık? Bunun bir SD'nin önyüklemesinin gerçekten küçük örneklerle iyi çalışmamasından kaynaklandığına inanıyorum.)
gözden geçirmek
Önyükleme istatistikleri kavramsal olarak ortalama veya standart sapma gibi diğer istatistiklerle aynıdır; hesaplanması uzun zaman alıyor. (Koddaki uyarı mesajına bakın boot
!)
Monte-Carlo simülasyonu, bir bootstrap istatistiğinin örneklerin elde edilmesindeki rastgelelik nedeniyle nasıl değiştiğini incelemek için yararlı olabilir. Bu simülasyonda gözlenen varyasyon, önyüklemedeki varyasyondan değil , numunelerdeki varyasyondan kaynaklanmaktadır .
nnn