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 ...

Get The R Book now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.