Yeniden örneklenen veri kümelerindeki hipotez testleri null değerini çok sık reddediyor?


10

tl; dr: null altında oluşturulan bir veri kümesi ile başlayarak, vakaları değiştirerek yeniden örnekledim ve her yeniden örneklenen veri kümesi üzerinde bir hipotez testi gerçekleştirdim. Bu hipotez testleri boş değeri% 5'ten fazla reddeder.

Aşağıda, çok basit bir simülasyonda, ile veri kümeleri oluşturuyorum XN(0,1)⨿YN(0,1)ve her birine basit bir OLS modeli takıyorum . Daha sonra, her veri kümesi için, orijinal veri kümesinin satırlarını değiştirmeyle yeniden örnekleyerek 1000 yeni veri kümesi oluşturuyorum (Davison & Hinkley'in klasik metninde doğrusal regresyon için uygun olarak özellikle açıklanan bir algoritma). Bunların her biri için aynı OLS modeline uyuyorum. Nihayetinde, bootstrap örnekleri içindeki hipotez testlerinin yaklaşık% 16'sı null değerini reddederken, % 5'i almalıyız (orijinal veri setlerinde olduğu gibi).

Şişirilmiş derneklere neden olan tekrarlanan gözlemlerle ilgili bir şey olduğundan şüpheliyim, bu yüzden karşılaştırma için aşağıdaki kodda diğer iki yaklaşımı denedim (yorumladı). Yöntem 2'de düzeltiyorum , sonra Y'yi orijinal veri kümesindeki OLS modelinden yeniden örneklenen artıklarla değiştiriyorum . Yöntem 3'te, değiştirmeden rastgele bir alt örnek çiziyorum. Bu alternatiflerin her ikisi de işe yarar, yani hipotez testleri zamanın% 5'ini boş bırakır.XY

Sorum: Tekrarlanan gözlemlerin suçlu olduğu doğru mu? Öyleyse, bunun önyükleme için standart bir yaklaşım olduğu düşünüldüğünde, standart önyükleme teorisini tam olarak nerede ihlal ediyoruz?

Güncelleme # 1: Daha fazla simülasyon

Y

# note: simulation takes 5-10 min on my laptop; can reduce boot.reps
#  and n.sims.run if wanted
# set the number of cores: can change this to match your machine
library(doParallel)
registerDoParallel(cores=8)
boot.reps = 1000
n.sims.run = 1000

for ( j in 1:n.sims.run ) {

  # make initial dataset from which to bootstrap
  # generate under null
  d = data.frame( X1 = rnorm( n = 1000 ), Y1 = rnorm( n = 1000 ) )

  # fit OLS to original data
  mod.orig = lm( Y1 ~ X1, data = d )
  bhat = coef( mod.orig )[["X1"]]
  se = coef(summary(mod.orig))["X1",2]
  rej = coef(summary(mod.orig))["X1",4] < 0.05

  # run all bootstrap iterates
  parallel.time = system.time( {
    r = foreach( icount( boot.reps ), .combine=rbind ) %dopar% {

      # Algorithm 6.2: Resample entire cases - FAILS
      # residuals of this model are repeated, so not normal?
      ids = sample( 1:nrow(d), replace=TRUE )
      b = d[ ids, ]

      # # Method 2: Resample just the residuals themselves - WORKS
      # b = data.frame( X1 = d$X1, Y1 = sample(mod.orig$residuals, replace = TRUE) )

      # # Method 3: Subsampling without replacement - WORKS
      # ids = sample( 1:nrow(d), size = 500, replace=FALSE )
      # b = d[ ids, ]

      # save stats from bootstrap sample
      mod = lm( Y1 ~ X1, data = b ) 
      data.frame( bhat = coef( mod )[["X1"]],
                  se = coef(summary(mod))["X1",2],
                  rej = coef(summary(mod))["X1",4] < 0.05 )

    }
  } )[3]


  ###### Results for This Simulation Rep #####
  r = data.frame(r)
  names(r) = c( "bhat.bt", "se.bt", "rej.bt" )

  # return results of each bootstrap iterate
  new.rows = data.frame( bt.iterate = 1:boot.reps,
                         bhat.bt = r$bhat.bt,
                         se.bt = r$se.bt,
                         rej.bt = r$rej.bt )
  # along with results from original sample
  new.rows$bhat = bhat
  new.rows$se = se
  new.rows$rej = rej

  # add row to output file
  if ( j == 1 ) res = new.rows
  else res = rbind( res, new.rows )
  # res should have boot.reps rows per "j" in the for-loop

  # simulation rep counter
  d$sim.rep = j

}  # end loop over j simulation reps



##### Analyze results #####

# dataset with only one row per simulation
s = res[ res$bt.iterate == 1, ]

# prob of rejecting within each resample
# should be 0.05
mean(res$rej.bt); mean(s$rej)

Güncelleme # 2: Cevap

H0


1
Standart önyüklemede, ilişkili p değerlerini değil, yalnızca X1 katsayısının önyükleme dağılımını dikkate alırsınız. Bu nedenle, önyüklemenin bir sorunu değildir. Yine de gözleminiz ilginç ve kasıtsızdır.
Michael M

1
@MichaelM, bu doğru. Ancak, numunelerdeki verilerin ortak CDF'sinin n içinde yakınsama olması ve bootstrap sayısının orijinal verileri oluşturan gerçek CDF'ye yinelenmesi nedeniyle, p değerlerinin de farklı olmasını beklemezdim.
yarı pas

Sağ. Etkinin bağımsız olmayan (söylediğiniz gibi) ve çok iyimser standart hatalar veren sonuçlardan kaynaklandığından eminim. Simülasyonunuzda, normal doğrusal modelin tek ihlal edilen varsayımı gibi görünüyor. Belki de ilgili varyans azaltma faktörünü bile türetebiliriz.
Michael M

2
xidsids <- unique(ids)

2
@whuber. Anlıyorum. Ve bu, tekrarlanan gözlemlere rağmen artıkların neden ikame çalışmalarla yeniden örnekleneceğini açıklayacaktır: bu modelin kalıntıları bir kez daha X'ten bağımsızdır. Bunu bir cevap haline getirmek isterseniz, kabul etmekten mutluluk duyarım.
Yarım-pass

Yanıtlar:


5

Null değerini yeniden örneklediğinizde, regresyon katsayısının beklenen değeri sıfır olur. Gözlemlenen bazı veri kümelerini yeniden örneklediğinizde, beklenen değer bu veriler için gözlenen katsayıdır. Gözlenen verileri yeniden örneklediğinizde P <= 0,05 ise tip I hatası değildir. Aslında, P> 0.05 ise tip II hatasıdır.

Abs (b) ve ortalama (P) arasındaki korelasyonu hesaplayarak biraz sezgi kazanabilirsiniz. Yaptığınız şeyi çoğaltmak için daha basit kod ve simülasyon seti üzerinde b ve "tip I" hatası arasındaki korelasyonu hesaplamak

boot.reps = 1000
n.sims.run = 10
n <- 1000
b <- matrix(NA, nrow=boot.reps, ncol=n.sims.run)
p <- matrix(NA, nrow=boot.reps, ncol=n.sims.run)
for(sim_j in 1:n.sims.run){
  x <- rnorm(n)
  y <- rnorm(n)
  inc <- 1:n
  for(boot_i in 1:boot.reps){
    fit <- lm(y[inc] ~ x[inc])
    b[boot_i, sim_j] <- abs(coefficients(summary(fit))['x[inc]', 'Estimate'])
    p[boot_i, sim_j] <- coefficients(summary(fit))['x[inc]', 'Pr(>|t|)']
    inc <- sample(1:n, replace=TRUE)
  }
}
# note this is not really a type I error but whatever
type1 <- apply(p, 2, function(x) sum(x <= 0.05))/boot.reps
# correlation between b and "type I"
cor(b[1, ], type1)

cevabı grand_chat ile güncelleyin P <= 0.05 sıklığının> 0.05 olmasının nedeni değildir. Cevap çok basit ve yukarıda söylediğim şey - her yeniden örneklemin ortalamasının beklenen değeri orijinal, gözlenen ortalamadır. Bu, bir hipotez testi olarak değil, gözlenen bir ortalamada standart hatalar / güven sınırları oluşturmak için geliştirilen önyüklemenin temelidir. Beklenti sıfır olmadığından, "tip I hatası" alfadan daha büyük olacaktır. İşte bu yüzden katsayının büyüklüğü (sıfırdan ne kadar uzak) ile "tip I hatasının" alfadan sapmasının büyüklüğü arasında bir ilişki olacaktır.


H0:β=β^H0:β=0

H 0 : β = 0 , H 0 : β = 0H0:β=βˆ denklik testi yapar ve farklı bir çalışma tasarımı yaklaşımı gerektirir. , önemli olan, gözlenen farklılıklarınızın akıcı olmadığından emin olmak, tahmininizin doğru olduğundan emin olmak istediğinizde denklik olduğunda kullanılır. Ne yazık ki genellikle tek beden herkese uyar olarak görülür, ancak durumunuzdaki risklere bağlıdır. Kullanımı tipik daha sizin bilginin doğruluğunu test geçmek için mantıklı olabilir bilindiği zaman sonra alternatif hipotezi tanımlamak için yeterli olduğunu bilmiyorsan trematodlarına dışarı filtreye erken evre araştırma. H0:β=0H0:β=0
ReneBt

2

Orijinal normal numunenizden değiştirerek numune alırsanız, sonuçta ortaya çıkan bootstrap örneği normal değildir . Önyükleme örneğinin eklem dağılımı, yinelenen kayıtlar içermesi muhtemel olan gnarly bir karışım dağılımını takip ederken, normal numunelerden iid örnekleri aldığınızda yinelenen değerlerin olasılığı sıfırdır.

Basit bir örnek olarak, orijinal örneğiniz tek değişkenli normal dağılımdan iki gözlemse, değiştirilen bir önyükleme örneği orijinal sürenin yarısından oluşur ve sürenin yarısı kopyalanan orijinal değerlerden birini içerir. Önyükleme örneğinin örnek varyansının ortalama olarak orijinalinden daha az olacağı açıktır - aslında orijinalin yarısı olacaktır.

Temel sonuç, normal teoriye dayalı olarak yaptığınız çıkarımın bootstrap örneğine uygulandığında yanlış değerlerini döndürmesidir . Özellikle normal teori anti-muhafazakar karar kuralları verir, çünkü bootstrap örneğiniz , kopyaların varlığı nedeniyle paydaları normal teoride beklenenden daha küçük istatistikleri üretecektir . Sonuç olarak, normal teori hipotez testi, sıfır hipotezini beklenenden daha fazla reddeder.tpt


Ancak durum böyleyse, artıkları değiştirmeyle yeniden örneklerken tam olarak aynı sorun olmaz mı? Yine de, bu yaklaşım nominal olasılıkla reddeder.
yarı geçiş

Ayrıca, n = 1000 olan bir t-testinin normal olmayan verilerle bir sorunu olmamalıdır.
yarı geçiş

0

@ JWalker'in cevabına tamamen katılıyorum.

Bu sorunun başka bir yönü daha var. Bu sizin yeniden örnekleme sürecinizde. Eğer farz çünkü regresyon katsayısı sıfıra etrafında bekliyoruz Xve Ybağımsızdır. Ancak, yeniden örneklemenizde

ids = sample( 1:nrow(d), replace=TRUE )
  b = d[ ids, ]

bu da korelasyon yaratır çünkü siz örneklersiniz Xve Yberabersiniz. Örneğin, veri kümesi ilk satırı demek dolduğunu (x1, y1)yeniden örneklenen veri kümesi ise, P(Y = y1|X = x1) = 1eğer iken, Xve Ybağımsız, P(Y|X = x1)normal dağılım takip eder.

Yani bunu düzeltmenin başka bir yolu da

b = data.frame( X1 = rnorm( n = 1000 ), Y1 = rnorm( n = 1000 ) )

dX ve Y'yi birbirinden bağımsız hale getirmek için oluşturmak için kullandığınız kod .

Aynı sebep, neden artık yeniden örnekleme ile çalıştığını da açıklamaktadır (çünkü yeniden Xbağımsızdır Y).


Bir süre için, yeniden örneklenen gözlemlerin bağımsız olmayabileceğini düşündüm, ancak çok daha fazla düşündükten sonra, aslında böyle olduğunu düşünmüyorum: stats.stackexchange.com/questions/339237/…
half -pass

Yukarıda anlattığım sorun yayından farklı. Bahsettiğiniz şey bağımsızlığıdır x's. Bahsettiğim, Xs ve Ys arasındaki korelasyon .
Tianxia Zhou

-1

Buradaki en büyük sorun, model sonuçlarının sahte ve bu nedenle son derece dengesiz olması, çünkü modelin sadece gürültüye uymasıdır. Çok gerçek anlamda. Y1, örnek verilerin nasıl üretildiğinden dolayı bağımlı bir değişken değildir.


Yorumlara yanıt olarak düzenleyin. Düşüncemi açıklamak için başka bir deneme yapalım.

Bir OLS ile genel amaç, verilerdeki temel ilişkileri keşfetmek ve ölçmektir. Gerçek dünyadaki verilerle, bunları tam olarak bilmiyoruz.

Ancak bu yapay bir test durumudur. EXACT veri oluşturma mekanizmasını biliyoruz, işte OP tarafından gönderilen kodda

X1 = rnorm (n = 1000), Y1 = rnorm (n = 1000)

Bunu bildiğimiz bir OLS regresyon formunda ifade edersek, yani

Y1 = kesişme + Beta1 * X1 + Y1
haline gelen hata
= ortalama (X1) + 0 (X1) + Hata

Yani bence, bu doğrusal FORM'da ifade edilen bir model, ama aslında doğrusal bir ilişki / model DEĞİL, çünkü eğim yok. B1 = 0,000000.

1000 rasgele veri noktası oluşturduğumuzda, dağılım grafiği klasik av tüfeği dairesel spreyi gibi görünecektir. Oluşturulan 1000 rasgele noktanın spesifik örneğinde X1 ve Y1 arasında bir korelasyon olabilir, ancak eğer öyleyse rasgele bir olaydır. OLS bir korelasyon bulursa, yani eğim olmadığı yönündeki sıfır hipotezini reddeder, çünkü bu iki değişken arasında gerçekten herhangi bir ilişki olmadığını kesin olarak biliyoruz, o zaman OLS Hata Bileşeninde tam anlamıyla bir örüntü buldu. Ben "gürültü uydurma" ve "sahte" olarak nitelendirdi.

Ek olarak, bir OLS'nin standart varsayımlarından / gereksinimlerinden biri (+/-) "doğrusal regresyon modelinin" parametrelerde doğrusal "olmasıdır. Veriler göz önüne alındığında, benim varsayımım, bu varsayımı tatmin etmememizdir.Bu nedenle, önem için altta yatan test istatistikleri yanlıştır.

Bu sorunu ilk okuduğumda, OP'nin boş [hipotez] altında test etmek istediği için batmadı.

Ancak, veri seti şu şekilde oluşturulmuş olsaydı aynı sezgisel olmayan sonuçlar olur mu?

X1 = rnorm (n = 1000), Y1 = X1 * .4 + rnorm (n = 1000)?


4
Bu cevabın her açıdan yanlış olduğunu düşünüyorum. OLS'nin kötü bir prosedür olduğunu düşünmüyorsanız - sonuçlar ne "sahte" olur, ne de hata varyansından tahmin edilenden daha "kararsız" değildir. kesinlikle bağımlı bir değişkendir: teorinin herhangi bir yerinde diğer değişkenlerle nedensel bir ilişkiye sahip gerek yoktur . Gerçekten de, tüm regresyon yazılımları tarafından geleneksel olarak test edilen sıfır hipotezler, tam olarak burada simüle edildiği gibi, bağımlılık olmamasıdır. Y 1Y1Y1
whuber

(-1) aynı nedenlerle @whuber verdi.
Yarım-pass

1
Düzenlemenizdeki son soruya yanıt: evet, kesinlikle. Bir simülasyon ile kendiniz deneyin. (Ama yorum konusunda dikkatli olun, çünkü boş olanın ne olduğunu ve gerçek durumun ne olduğunu göz önünde bulundurmalısınız.)
Whuber
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.