[R] Bootstrap BCa confidence limits with your own resamples

John Fox jfox at mcmaster.ca
Tue Mar 12 19:34:42 CET 2013


Dear Frank,

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Frank Harrell
> Sent: Tuesday, March 12, 2013 2:24 PM
> To: r-help at r-project.org
> Subject: Re: [R] Bootstrap BCa confidence limits with your own
> resamples
> 
> That's very helpful John.  Did you happen to run a test to make sure
> that
> boot.ci(..., type='bca') in fact gives the BCa intervals or that they
> at
> least disagree with percentile intervals?

If you run the example I included, you'll see that the BCa intervals differ
from the simple percentile intervals. OTOH, I don't believe that I ever
checked that the BCa intervals are correct for objects produced by bootSem()
-- I did many years ago check against manual computations for a regression
model fit by robust regression, but that's another matter.

Best,
 John

> 
> Frank
> 
> 
> John Fox wrote
> > Dear Frank,
> >
> > I'm not sure that it will help, but you might look at the bootSem()
> > function
> > in the sem package, which creates objects that inherit from "boot".
> Here's
> > an artificial example:
> >
> > ---------- snip ----------
> >
> > library(sem)
> > for (x in names(CNES)) CNES[[x]] <- as.numeric(CNES[[x]])
> > model.cnes <- specifyModel()
> > F -> MBSA2, lam1
> > F -> MBSA7, lam2
> > F -> MBSA8, lam3
> > F -> MBSA9, lam4
> > F <-> F, NA, 1
> > MBSA2 <-> MBSA2, the1
> > MBSA7 <-> MBSA7, the2
> > MBSA8 <-> MBSA8, the3
> > MBSA9 <-> MBSA9, the4
> >
> > sem.cnes <- sem(model.cnes, data=CNES)
> > summary(sem.cnes)
> >
> > set.seed(12345) # for reproducibility
> > system.time(boot.cnes <- bootSem(sem.cnes, R=5000))
> > class(boot.cnes)
> > boot.ci(boot.cnes)
> >
> > ---------- snip ----------
> >
> > I hope this helps,
> >  John
> >
> >> -----Original Message-----
> >> From:
> 
> > r-help-bounces@
> 
> >  [mailto:r-help-bounces at r-
> >> project.org] On Behalf Of Frank Harrell
> >> Sent: Tuesday, March 12, 2013 11:27 AM
> >> To:
> 
> > r-help@
> 
> >> Subject: [R] Bootstrap BCa confidence limits with your own resamples
> >>
> >> I like to bootstrap regression models, saving the entire set of
> >> bootstrapped
> >> regression coefficients for later use so that I can get confidence
> >> limits
> >> for a whole set of contrasts derived from the coefficients.  I'm
> >> finding
> >> that ordinary bootstrap percentile confidence limits can provide
> poor
> >> coverage for odds ratios for binary logistic models with small N.
> So
> >> I'm
> >> exploring BCa confidence intervals.
> >>
> >> Because the matrix of bootstrapped regression coefficients is
> generated
> >> outside of the boot packages' boot() function, I need to see if it
> is
> >> possible to compute BCa intervals using boot's boot.ci() function
> after
> >> constructing a suitable boot object.  The function below almost
> works,
> >> but
> >> it seems to return bootstrap percentile confidence limits for BCa
> >> limits.
> >> The failure is probably due to my being new to BCa limits and not
> >> understanding the inner workings.   Has anyone successfully done
> >> something
> >> similar to this?
> >>
> >> Thanks very much,
> >> Frank
> >>
> >> bootBCa <- function(estimate, estimates, n, conf.int=0.95) {
> >>   require(boot)
> >>   if(!exists('.Random.seed')) runif(1)
> >>   w <- list(sim= 'ordinary',
> >>             stype = 'i',
> >>             t0 = estimate,
> >>             t  = as.matrix(estimates),
> >>             R  = length(estimates),
> >>             data    = 1:n,
> >>             strata  = rep(1, n),
> >>             weights = rep(1/n, n),
> >>             seed = .Random.seed,
> >>             statistic = function(...) 1e10,
> >>             call = list('rigged', weights='junk'))
> >>   np <- boot.ci(w, type='perc', conf=conf.int)$percent
> >>   m  <- length(np)
> >>   np <- np[c(m-1, m)]
> >>   bca <- tryCatch(boot.ci(w, type='bca', conf=conf.int),
> >>                   error=function(...) list(fail=TRUE))
> >>   if(length(bca$fail) && bca$fail) {
> >>     bca <- NULL
> >>     warning('could not obtain BCa bootstrap confidence interval')
> >>   } else {
> >>     bca <- bca$bca
> >>     m <- length(bca)
> >>     bca <- bca[c(m-1, m)]
> >>   }
> >>   list(np=np, bca=bca)
> >> }
> >>
> >>
> >>
> >>
> >> -----
> >> Frank Harrell
> >> Department of Biostatistics, Vanderbilt University
> >> --
> >> View this message in context:
> http://r.789695.n4.nabble.com/Bootstrap-
> >> BCa-confidence-limits-with-your-own-resamples-tp4661045.html
> >> Sent from the R help mailing list archive at Nabble.com.
> >>
> >> ______________________________________________
> >>
> 
> > R-help@
> 
> >  mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide http://www.R-project.org/posting-
> >> guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
> >
> > ______________________________________________
> 
> > R-help@
> 
> >  mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> > http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> 
> 
> 
> 
> 
> -----
> Frank Harrell
> Department of Biostatistics, Vanderbilt University
> --
> View this message in context: http://r.789695.n4.nabble.com/Bootstrap-
> BCa-confidence-limits-with-your-own-resamples-tp4661045p4661077.html
> Sent from the R help mailing list archive at Nabble.com.
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list