Σ
SDCalc
İleriİleri Düzey·15 min

Standart Sapma İçin Bootstrap Yöntemleri

Standart sapma tahmini için bootstrap yeniden örneklemeyi öğrenin. Yüzdelik, BCa ve parametrik bootstrap yöntemlerini Python uygulaması ve çözümlü örneklerle keşfedin.

Bootstrap: Bilgisayar Çağının İstatistik Devrimi

Bootstrap yeniden örnekleme, gözlemlenen verilerinizden tekrar tekrar yeniden örnekleyerek herhangi bir istatistiğin örnekleme dağılımını tahmin eden güçlü bir istatistiksel tekniktir. 1979’da Bradley Efron tarafından tanıtılan bu yöntem, matematiksel formüllere veya dağılım varsayımlarına dayanmadan karmaşık istatistiklerin analizini mümkün kılarak istatistiksel çıkarımda devrim yapmıştır.

Bootstrap’un arkasındaki temel kavrayış zarif bir şekilde basittir: örnekleminiz popülasyonun en iyi tahmininizdir. Örnekleminizden (yerine koyarak) yeniden örnekleme yaparak, popülasyondan tekrar tekrar örneklem alabilseydiniz ne olacağını simüle edersiniz. Bu yaklaşım özellikle standart sapma için değerlidir; çünkü geleneksel güven aralığı formülleri normallik varsayar—pratikte sıklıkla başarısız olan bir varsayım.

Bootstrap, herhangi bir istatistikle (medyan, korelasyon, regresyon katsayıları, sinir ağı ağırlıkları) çalıştığı ve verilerinizin altta yatan dağılımı hakkında varsayım yapmadığı için modern veri biliminde vazgeçilmez hale gelmiştir.

Standart Sapma İçin Neden Bootstrap?

Standart sapma için geleneksel güven aralıkları, verilerinizin normal dağılımdan geldiğini varsayar. Bu varsayım başarısız olduğunda (ki bu yaygındır), bu aralıklar tamamen yanlış olabilir. Bootstrap, dağılımdan bağımsız bir alternatif sunar.

Geleneksel Yöntemler Başarısız Olduğunda

Standart sapma için ki-kare tabanlı GA normallik varsayar. Çarpık verilerle (gelir, tepki süreleri, sağkalım verileri) bu, gerçek parametreyi beklenen %5 yerine zamanın %20-30’unda kaçıran aralıklar üretebilir.

Standart sapma için bootstrap’un temel avantajları:

  • Dağılım varsayımı yok: Normal, çarpık veya kalın kuyruklu verilerle eşit derecede iyi çalışır
  • Küçük örneklem performansı: n < 30 ile genellikle parametrik yöntemlerden daha doğru
  • Karmaşık istatistikleri ele alır: Aynı yaklaşım kırpılmış SS, MAD veya özel değişkenlik ölçüleri için çalışır
  • Görsel kavrayış: Bootstrap dağılımı size sadece son sayıları değil, ne olduğunu gösterir

Bootstrap Prosedürü

Bootstrap algoritması oldukça basittir. n gözlemlik orijinal örnekleminizden:

1

Bootstrap Örneklemi Çekin

Orijinal verilerinizden yerine koyarak rastgele n gözlem seçin. Bazı değerler birden çok kez görünecek, diğerleri hiç görünmeyecek.
2

İstatistiği Hesaplayın

Bu bootstrap örnekleminin standart sapmasını hesaplayın. Bu bir bootstrap kopyasıdır.
3

Birçok Kez Tekrarlayın

1-2 adımlarını binlerce kez (genellikle B = 10.000) tekrarlayın. Her tekrar bir bootstrap SS verir.
4

Dağılımı Analiz Edin

B bootstrap SS’lerinin koleksiyonu örnekleme dağılımını yaklaşık olarak temsil eder. GA ve hipotez testi için kullanın.

Neden Yerine Koyarak?

Yerine koyarak örnekleme kritiktir. Bileşim bakımından farklı örneklemler oluşturarak, popülasyondan farklı örneklemler alsaydınız göreceğiniz değişkenliği taklit eder. Yerine koymadan, her örneklem orijinal ile aynı olurdu.

Kaç bootstrap örneklemi? B = 1.000 kaba tahminler ve hipotez testleri için genellikle yeterlidir. Güven aralıkları için B = 10.000 kararlı yüzdelikler sağlar. Yayın kalitesinde BCa aralıkları için B = 15.000+ önerilir.

Bootstrap Güven Aralığı Yöntemleri

Bootstrap örneklemlerinden güven aralıkları oluşturmak için birkaç yöntem mevcuttur, her birinin artıları ve eksileri vardır:

1. Yüzdelik Yöntemi (En Basit)

En sezgisel yaklaşım: bootstrap dağılımının yüzdeliklerini doğrudan alın.

Yüzdelik GA

95% CI = [θ*₂.₅, θ*₉₇.₅]

10.000 bootstrap örneklemi için bu, 250. ve 9.750. sıralı değerlerdir. Basit ancak bootstrap dağılımı çarpık olduğunda yanlı olabilir.

2. Temel (Pivotal) Bootstrap

Örneklem istatistiği ile bootstrap istatistikleri arasındaki ilişkiyi kullanır:

Temel Bootstrap GA

95% CI = [2θ̂ - θ*₉₇.₅, 2θ̂ - θ*₂.₅]

Burada θ̂ orijinal örneklem SS’sidir. Bu, yüzdelik aralığını örneklem tahmini etrafında “yansıtır”.

3. BCa (Yanlılık Düzeltmeli ve Hızlandırılmış)

Doğruluk için altın standart. BCa, bootstrap dağılımındaki hem yanlılığı hem de hızlanmayı (standart hatanın parametre değeriyle nasıl değiştiğini) düzeltir. Hesaplaması daha karmaşık ancak ikinci derece doğru aralıklar sağlar.

YöntemArtılarEksiler
YüzdelikBasit, sezgiselÇarpık verilerle yanlı olabilir
TemelSimetrik aralıklarNegatif değerler üretebilir
BCaEn doğru, dönüşüme saygılıHesaplama açısından yoğun

Çözümlü Örnek: Normal Olmayan Veri

15 tepki süresi ölçümünü (ms cinsinden) düşünün: 245, 312, 287, 456, 234, 298, 267, 523, 289, 301, 278, 645, 256, 289, 312. Bu veri sağa çarpıktır (bazı çok yavaş tepkiler).

1

Örneklem SS’sini Hesaplayın

Orijinal örneklem: n=15, SS = 109,8 ms
2

Bootstrap Örneklemleri Üretin

Yerine koyarak 15 büyüklüğünde 10.000 örneklem çekin. Her örneklem farklı bileşime sahip.
3

Bootstrap SS’lerini Hesaplayın

Her bootstrap örneklemi için SS hesaplayın, ~60’dan ~180’e kadar değişen 10.000 değer elde edin
4

Yüzdelikleri Bulun

2,5. yüzdelik: 72,3 ms, 97,5. yüzdelik: 156,8 ms
5

%95 GA’yı Oluşturun

%95 GA: [72,3; 156,8] ms. Normallik varsayan ki-kare GA ile karşılaştırın: [79,4; 175,2].

Bootstrap GA asimetriktir (yüksek tarafta daha geniş), verinin sağa çarpık doğasını yansıtır. Ki-kare GA bu asimetriyi yakalayamaz.

Python Uygulaması

Birden fazla GA yöntemiyle eksiksiz bootstrap uygulaması:

python
import numpy as np
from scipy import stats

def bootstrap_sd_ci(data, n_bootstrap=10000, ci=0.95, method='percentile'):
    """
    Bootstrap confidence interval for standard deviation.

    Parameters:
    -----------
    data : array-like - Original sample
    n_bootstrap : int - Number of bootstrap samples
    ci : float - Confidence level (e.g., 0.95)
    method : str - 'percentile', 'basic', or 'bca'

    Returns:
    --------
    tuple : (lower_bound, upper_bound, bootstrap_sds)
    """
    data = np.array(data)
    n = len(data)
    original_sd = np.std(data, ddof=1)

    # Generate bootstrap samples and calculate SDs
    bootstrap_sds = np.array([
        np.std(np.random.choice(data, size=n, replace=True), ddof=1)
        for _ in range(n_bootstrap)
    ])

    alpha = 1 - ci

    if method == 'percentile':
        lower = np.percentile(bootstrap_sds, 100 * alpha/2)
        upper = np.percentile(bootstrap_sds, 100 * (1 - alpha/2))

    elif method == 'basic':
        lower = 2*original_sd - np.percentile(bootstrap_sds, 100*(1-alpha/2))
        upper = 2*original_sd - np.percentile(bootstrap_sds, 100*alpha/2)

    elif method == 'bca':
        # Bias correction
        prop_less = np.mean(bootstrap_sds < original_sd)
        z0 = stats.norm.ppf(prop_less)

        # Acceleration (jackknife estimate)
        jackknife_sds = np.array([
            np.std(np.delete(data, i), ddof=1) for i in range(n)
        ])
        jack_mean = jackknife_sds.mean()
        a = np.sum((jack_mean - jackknife_sds)**3) / \
            (6 * np.sum((jack_mean - jackknife_sds)**2)**1.5)

        # Adjusted percentiles
        z_alpha = stats.norm.ppf([alpha/2, 1-alpha/2])
        adj_percentiles = stats.norm.cdf(
            z0 + (z0 + z_alpha) / (1 - a*(z0 + z_alpha))
        ) * 100
        lower = np.percentile(bootstrap_sds, adj_percentiles[0])
        upper = np.percentile(bootstrap_sds, adj_percentiles[1])

    return lower, upper, bootstrap_sds

# Example usage
response_times = [245, 312, 287, 456, 234, 298, 267, 523, 289, 301, 278, 645, 256, 289, 312]

for method in ['percentile', 'basic', 'bca']:
    lower, upper, _ = bootstrap_sd_ci(response_times, method=method)
    print(f"{method.upper():12s} 95% CI: [{lower:.1f}, {upper:.1f}]")