O'Reilly logo

The R Book by Michael J. Crawley

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Bootstrapping a Family of Non-linear Regressions

There are two broad applications of bootstrapping to the estimation of parameters in nonlinear models:

  • Select certain of the data points at random with replacement, so that, for any given model fit, some data points are duplicated and others are left out.
  • Fit the model and estimate the residuals, then allocate the residuals at random, adding them to different fitted values in different simulations

Our next example involves the viscosity data from the MASS library, where sinking time is measured for three different weights in fluids of nine different viscosities:

images

We need to estimate the two parameters b and c and their standard errors.

library(MASS)
data(stormer)
attach(stormer)

Here are the results of the straightforward non-linear regression:

model<-nls(Time~b*Viscosity/(Wt-c),start=list(b=29,c=2))
summary(model)

Formula: Time ~ b * Viscosity/(Wt - c)

Parameters:
   Estimate   Std. Error  t value  Pr(>| t|)
b   29.4013       0.9155   32.114    < 2e-16    ***
c    2.2182       0.6655    3.333    0.00316    **
Residual standard error: 6.268 on 21 degrees of freedom

Here is a home-made bootstrap which leaves out cases at random. The idea is to sample the indices (subscripts) of the 23 cases at random with replacement:

sample(1:23,replace=T)
[1]  4  4  10  10  12  3  23  22  21  13  9  14  8  5  15  14  21  14  12 3 20  14  19

In this realization cases 1 and 2 were left out, case 3 appeared ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required