Bootstrap regresyonundan katsayıların p-değerleri nasıl elde edilir?


10

Robert Kabacoff en düşük Hızlı-R Ben

# Bootstrap 95% CI for regression coefficients 
library(boot)
# function to obtain regression weights 
bs <- function(formula, data, indices) {
  d <- data[indices,] # allows boot to select sample 
  fit <- lm(formula, data=d)
  return(coef(fit)) 
} 
# bootstrapping with 1000 replications 
results <- boot(data=mtcars, statistic=bs, 
     R=1000, formula=mpg~wt+disp)

# view results
results
plot(results, index=1) # intercept 
plot(results, index=2) # wt 
plot(results, index=3) # disp 

# get 95% confidence intervals 
boot.ci(results, type="bca", index=1) # intercept 
boot.ci(results, type="bca", index=2) # wt 
boot.ci(results, type="bca", index=3) # disp

Bootstrap regresyon katsayılarının p değerlerini nasıl elde edebilirim ?'H0:bj=0


"p değerleri" ne demektir? Hangi sıfır hipotezi ile hangi spesifik test?
Brian Diggs

Düzeltme H0: bj = 0
ECII

3
Güven aralığının 0 içermemesine / içermemesine bağlı olarak / elde edersiniz . Parametrenin bootstrap'tan dağılımı parametrik olmadığından daha fazla ayrıntı mümkün değildir (ve böylece bir olasılık elde edemezsiniz) değer 0). p<0.05p>0.05
Brian Diggs

Eğer bir dağılım olduğunu tahmin edemezseniz, CI 0 içermiyorsa p <0.05 olduğunu nasıl anlarsınız? Bu z veya t dağılımları için geçerlidir.
ECII

Bunu anlıyorum ama sadece p <0.05 olduğunu söyleyebilirsin, belirli bir değeri ekleyemezsin değil mi?
ECII

Yanıtlar:


8

Biraz basit olan başka bir varyant ama bence bootbazı kişileri kullandığı sözdizimi ile karıştırabilecek kütüphaneyi kullanmadan iletiyi teslim ediyorum .

Doğrusal bir modelimiz var: y=Xβ+ε, ε~N-(0,σ2)

Aşağıdaki, bu doğrusal model için parametrik bir önyükleme, yani orijinal verilerimizi yeniden örneklemediğimiz, ancak takılan modelimizden yeni veriler ürettiğimiz anlamına gelir. Ek olarak, regresyon katsayısının önyüklemeli dağılımınınβsimetriktir ve çeviri değişmezidir. (Kabaca bunun eksenini özelliklerini etkileyerek hareket ettirebileceğimizi söylemek gerekirse) Arkasındaki fikir şudur:β 'dan kaynaklanmaktadır εve bu nedenle yeterli sayıda numune ile gerçek dağılımının iyi bir yaklaşımını sağlamalıdırlarβ'S. Tekrar test ettiğimiz gibi'H0:0=βjve p-değerlerimizi "verilerin olasılık dağılımı için boş bir hipotez verildiğinde, sonucun gözlemlenen sonuç kadar aşırı veya daha aşırı olacağı olasılığı" olarak tanımladık (bu durumda gözlemlenen sonuçlar bunlarβorijinal modelimiz için aldık). İşte böyle:

# Sample Size
N           <- 2^12;
# Linear Model to Boostrap          
Model2Boot  <- lm( mpg ~ wt + disp, mtcars)
# Values of the model coefficients
Betas       <- coefficients(Model2Boot)
# Number of coefficents to test against
M           <- length(Betas)
# Matrix of M columns to hold Bootstraping results
BtStrpRes   <- matrix( rep(0,M*N), ncol=M)

for (i in 1:N) {
# Simulate data N times from the model we assume be true
# and save the resulting coefficient in the i-th row of BtStrpRes
BtStrpRes[i,] <-coefficients(lm(unlist(simulate(Model2Boot)) ~wt + disp, mtcars))
}

#Get the p-values for coefficient
P_val1 <-mean( abs(BtStrpRes[,1] - mean(BtStrpRes[,1]) )> abs( Betas[1]))
P_val2 <-mean( abs(BtStrpRes[,2] - mean(BtStrpRes[,2]) )> abs( Betas[2]))
P_val3 <-mean( abs(BtStrpRes[,3] - mean(BtStrpRes[,3]) )> abs( Betas[3]))

#and some parametric bootstrap confidence intervals (2.5%, 97.5%) 
ConfInt1 <- quantile(BtStrpRes[,1], c(.025, 0.975))
ConfInt2 <- quantile(BtStrpRes[,2], c(.025, 0.975))
ConfInt3 <- quantile(BtStrpRes[,3], c(.025, 0.975))

Bahsedildiği gibi, tüm fikir, βonların gerçek olanına yaklaşıyor. (Açıkçası bu kod hız için, ancak okunabilirlik için optimize edilmiştir. :))


16

Topluluk ve @BrianDiggs yanılıyorsam beni düzeltebilir, ancak sorununuz için aşağıdaki gibi bir p değeri alabileceğinizi düşünüyorum. İki taraflı bir test için p-değeri şu şekilde tanımlanır:

2*min[P(Xx|'H0),P(Xx|'H0)]

Öyleyse, önyüklemeli katsayıları boyuta göre sipariş ederseniz ve daha büyük ve daha küçük sıfır oranlarını belirlerseniz, minimum oran süreleri iki kez bir p değeri vermelidir.

Normalde böyle bir durumda aşağıdaki işlevi kullanırım:

twosidep<-function(data){
  p1<-sum(data>0)/length(data)
  p2<-sum(data<0)/length(data)
  p<-min(p1,p2)*2
  return(p)
}

4

Bootstrap hesaplamak için kullanılabilir p-değerler, ancak kodunuzda önemli bir değişiklik yapılması gerekir. RI hakkında bilgi sahibi olmadığım için size sadece ne yapmanız gerektiğini arayabileceğiniz bir referans verebiliriz: Bölüm 4 (Davison ve Hinkley 1997).

Davison, AC ve Hinkley, DV 1997. Bootstrap yöntemleri ve uygulamaları. Cambridge: Cambridge Üniversitesi Yayınları.

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.