Kalıntıları önyükleme: Doğru mu yapıyorum?


10

Her şeyden önce: Anladığım kadarıyla, bootstrapping kalıntıları aşağıdaki gibi çalışır:

  1. Modeli verilere sığdır
  2. Kalıntıları hesaplayın
  3. Kalıntıları yeniden örnekleyin ve 1'e ekleyin.
  4. Modeli 3'ten yeni veri kümesine sığdır.
  5. nSüreleri tekrarlayın , ancak her zaman yeniden örneklenen kalıntıları 1'den uygunluğa ekleyin.

Bu şimdiye kadar doğru mu?


Ne yapmak istediğim biraz farklı bir şey:

Bazı çevresel değişkenleri tahmin eden bir algoritma için parametre ve tahmin belirsizliğini tahmin etmek istiyorum.

Sahip olduğum şey, sentetik bir veri kümesi oluşturmak için x_truebiraz gürültü eklediğim bu değişkenin hatasız bir zaman serisidir (bir simülasyondan) . Daha sonra objektif fonksiyon olarak algoritmamı karelerin toplamıyla (! Değil !) Sığdırıp en uygun parametreleri bulmaya çalışıyorum . Algoritmamın nasıl performans gösterdiğini görmek ve parametrelerimin dağılımlarından örnekler oluşturmak için yeniden örneklemek , eklemek , modelime tekrar sığdırmak, durulamak ve tekrarlamak istiyorum. Parametre belirsizliğini değerlendirmek için geçerli bir yaklaşım mı? Önyükleme veri kümelerinin uyumlarını tahmin belirsizliği olarak yorumlayabilir miyim, yoksa yukarıda gönderdiğim prosedürü izlemem gerekir mi?x_noisexsum((x_estimate - x_true)^2)x_estimate - xx_noisex_true

/ edit: Sanırım modelimin ne yaptığını netleştirmedim. Bunu esasen parazit giderici bir yöntem gibi düşünün. Öngörücü bir model değil, gürültülü bir zaman serisi çevresel verilerin temel sinyalini çıkarmaya çalışan bir algoritmadır.

/ edit ^ 2: MATLAB-Kullanıcılar için , ne demek istediğimin bazı hızlı ve kirli doğrusal regresyon örneğini yazdım.

Kalıntıların "sıradan" önyüklemesinin olduğuna inanıyorum (yanlışsam lütfen beni düzeltin): http://pastebin.com/C0CJp3d1

Yapmak istediğim bu: http://pastebin.com/mbapsz4c


Şimdiye kadar yaptığınız kodu gösterirseniz daha açık olacaktır.
Metrikler

Aslında bootstrapping açısından şimdiye kadar hiçbir şey kodlamamıştım. Modelimin kodu oldukça karmaşık, bunun yardımcı olacağı için teşekkür etmiyorum. Örnek olarak, modelin hareketli ortalama gibi bir düzeltme prosedürü olduğunu ve hareketli pencerenin tek model parametresi olduğunu varsayabiliriz. Zamanla bir dizi (sentetik) ölçümüm var ve buna bir hata (mutlaka homoskedastik ve normal olarak dağıtılmamış) ekliyorum. Daha sonra altta yatan "true" ya yaklaşan hareketli pencereyi tahmin etmek istiyorum ve sentetik hatamı önyükleyerek belirsizliği değerlendirmek istiyorum. Bu yardımcı olur mu?
Fred S

İşte bazı çok kötü MATLAB tarzı sahte kod, belki ne yapmak istediğimi anlamaya yardımcı olur: pastebin.com/yTRahzr5
Fred S

Üzgünüz Fred, Matlab'ı tanımıyorum. Kullanıcılardan girdi almak için lütfen Matlab olarak etiketleyin.
Metrikler

2
Oh sorum gerçekten MATLAB ile sınırlı değil (ve bu gerçekten MATLAB kodu değil, sadece döngüler ve yine de işe yaramayacak yorumlar için MATLABs sözdizimine dayanan bazı sözde kod). Ama her ihtimale karşı etiketleyebilirim.
Fred S

Yanıtlar:


8

Genel (yarı parametrik-bootstrap) algoritması daha ayrıntılı olarak verilmiştir:

B = önyükleme sayısı

model:
y=xβ+ϵ

let kalıntılar olabilirϵ^

  1. Regresyonu çalıştırın ve ve rezidüel tahmin edicilerini alın .β^ϵ^
  2. Kalıntıları değiştirerek yeniden örnekleyin ve önyüklemeli artık vektörü edinin .ϵ^B
  3. Tahminciyi (1) 'den orijinal ve önyüklemeli ekleyerek önyükleme bağımlı değişkenini elde edin: .yB=xβ^+ϵ^B
  4. Regresyonu bootstrapped bağımlı değişkenleri ve orijinal çalıştırın , bu bootstrapped tahmincisi verir, yani üzerinde gerilemesi , .yBxβ^B
  5. Tekrar prosedür (2) geri giderek -times.B

1

Anladığımın doğru olduğundan emin değilim. Ama işte benim kodunuzu ("artıkların sıradan önyüklemesi", satır 28-34) değiştirmek için önerim:

for i = 2:n_boot  
x_res_boot = x_residuals( randi(n_data,n_data,1) );  
x_boot = x_res_boot+ x_best_fit;  
p_est(:, i) = polyfit( t, x_boot, 1 );  
x_best_fit2 = polyval( p_est(:, i), t );  
x_residuals = x_best_fit2 - x_boot;
x_best_fit=x_best_fit2;
end  

Fikir şu ki, ilk kullanımdan değil, önceki önyükleme uyumundan kalanları kullandığınızda. Bana gelince, diğerlerinin hepsi geçerli gibi görünüyor.

Bu, MATLAB'da kontrol edilen gözden geçirilmiş versiyondur. İki hata düzeltildi.


Oh, bu benim için yeni bir şeydi. bsxfun biraz karmaşıktır; İşte fikrinizi kullanan ve biraz daha açık olması gereken yeni bir sürüm. Ancak, bu biraz garip sonuçlar doğurur. Bu , her zaman en iyi uyumun kalıntılarını yeniden örneklemenin ve bunları aynı fikre eklememizin sonucudur (ilk fikrim) ve bu , her bir yinelemenin kalıntılarını yeniden örnekleyip her yeni en iyi uyum için eklersem olur. Herhangi bir fikir?
Fred S

Hata! 25 numaralı satırdaki küçük hata (p_est (:, 1) yerine p_est (:, i) olmalıdır)), ancak parametre dağılımlarının hala zayıf göründüğünü düzelttiğimde bile: tıklayın
Fred S

1
Cevap sabittir ve MATLAB'da kontrol edilir. Şimdi iyi gidiyor.
O_Devinyak

1
Her uyum için yeni artıklar - artık artık bootstrap hakkındaki ilk anlayışımdı. Ancak itiraf etmeliyim ki, farklı kaynaklar bu amaç için orijinal verilere kalan kalıntıları kullanıyor. İşte bootstrap hakkında güzel bir öğretici ( econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf ). Uygulamanız doğru iken yaklaşımımın yanlış olduğu anlaşılıyor. Verilen cevabı silmeli miyim?
O_Devinyak

1
Takip için teşekkürler. IMHO, aynı soruya sahip diğer kullanıcılar için cevap bırakın. Literatürün (en azından benim için mevcut olan) bu konuda her zaman net olmadığını ve oldukça kafa karıştırıcı olabileceğini buldum.
Fred S

1

Bir algoritmanın tahmini doğruluk / ortalama kare hatası açısından nasıl performans gösterdiğini görmek için muhtemelen Efron-Gong "iyimserlik" önyüklemesine ihtiyacınız vardır. Bu, R rmspaketinde kolay kullanım için uygulanır . Fonksiyonlarını Bkz ols, validate.ols, calibrate.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.