부트 스트랩 회귀에서 계수의 p- 값을 얻는 방법은 무엇입니까?


10

로버트 Kabacoff의에서 빠른-R 내가 가진

# 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

부트 스트랩 회귀 계수 의 p- 값 을 어떻게 얻을 수 있습니까?H0:bj=0


"p 값"은 무엇을 의미합니까? 귀무 가설에 대한 구체적인 테스트는 무엇입니까?
Brian Diggs

수정 H0 : bj = 0
ECII

3
신뢰 구간이 0을 포함하지 않는지 여부에 따라 이미 / 를 얻 습니다. 부트 스트랩에서 모수의 분포가 모수가 아니므로 더 이상 세부 사항을 볼 수 없습니다. 따라서 확률을 얻을 수 없습니다 값이 0 임). p<0.05p>0.05
Brian Diggs

분포를 가정 할 수없는 경우 CI에 0이 포함되지 않은 경우 p <0.05를 어떻게 알 수 있습니까? 이것은 z 또는 t 분포에 적용됩니다.
ECII

나는 그것을 얻지 만 p <0.05라고 말할 수는 있지만 특정 값을 정확하게 첨부 할 수는 없습니까?
ECII

답변:


8

다소 단순하지만 다른 boot사람들이 사용하는 구문과 일부 사람들을 혼동시킬 수 있는 라이브러리 를 명시 적으로 사용하지 않고 메시지를 전달한다고 생각 합니다.

우리는 선형 모델을 가지고 있습니다 : ,y=Xβ+ϵϵN(0,σ2)

다음은 해당 선형 모델에 대한 파라 메트릭 부트 스트랩입니다. 즉, 원래 데이터를 다시 샘플링하지 않지만 실제로는 적합 모델에서 새 데이터를 생성합니다. 또한 회귀 계수 의 부트 스트랩 된 분포 가 대칭이며 변환이 변하지 않는 것으로 가정합니다 . (대략 우리가 그 속성에 영향을 미치면서 축을 움직일 수 있다고 말하면) 의 변동은 때문 이므로 충분한 샘플을 사용하면 실제 분포 에 대한 근사치를 제공해야합니다 의 의. 이전과 같이 다시 테스트 하고 p- 값을 다음과 같이 정의했습니다.ββϵβH0:0=βj"데이터의 확률 분포에 대한 귀무 가설이 주어지면 결과는 관측 된 결과보다 극단이거나 극단 일 가능성" (이 경우 관측 된 결과는우리가 얻은우리의 본래 모형을 위해). 그래서 여기에 간다 :β

# 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))

앞에서 언급했듯이 의 부트 스트랩 배포는 실제 배포 량과 비슷합니다. (이 코드는 속도에 최적화되어 있지만 가독성에 최적화되어 있습니다. :))β


16

내가 잘못하면 커뮤니티와 @BrianDiggs가 나를 바로 잡을 수 있지만 다음과 같이 문제에 대한 p- 값을 얻을 수 있다고 생각합니다. 양면 테스트의 p- 값은 다음과 같이 정의됩니다.

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

따라서 부트 스트래핑 된 계수를 크기별로 정렬 한 다음 0보다 크고 작은 비율을 결정하면 최소 비율 곱하기 2는 p- 값을 제공해야합니다.

나는 보통 그러한 상황에서 다음 기능을 사용합니다.

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

4

부트 스트랩을 사용하여 을 계산할 수 있지만 코드를 크게 변경해야합니다. RI에 익숙하지 않기 때문에 필요한 작업을 찾아 볼 수있는 참조 자료 만 제공 할 수 있습니다 (4 장 (Davison and Hinkley 1997)).p

Davison, AC 및 Hinkley, DV 1997. 부트 스트랩 방법 및 응용 프로그램. 케임브리지 : Cambridge University Press.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.