From bbolker at gmail.com  Sat May 14 14:46:17 2011
From: bbolker at gmail.com (Ben Bolker)
Date: Sat, 14 May 2011 08:46:17 -0400
Subject: [Rd] obscure error message from splines::ns
Message-ID: <4DCE7999.9050806@gmail.com>


  In the following case,


library(splines)
tt <- c(55, 251, 380, 289, 210, 385, 361, 669)
nn <- rep(0:7,tt)
ns(nn,4)
## knots are located at (0.25,0.5,0.75); quantiles = (2,5,7)

  we get the error

Error in qr.default(t(const)) :
  NA/NaN/Inf in foreign function call (arg 1)

  because the 75th quantile (the location of the last "interior" knot)
ends up on the boundary.  As a result, the call to
spline.des(...)$design within the bs() function call returns a design
matrix that includes NaN values, which triggers the error when qr() is
called.

(This alternative works OK:
ns(nn,4,knots=seq(min(nn),max(nn),length=5)[2:4])
)

   This could be argued to be a "well, just don't do that" case: splines
are designed for continuous data where this wouldn't happen.  On the
other hand, this was encountered as part of a sensible (IMO) data
analysis strategy, and it would be nice if there were at least an
informative warning message.  If there were any enthusiasm for it, I
would try to come up with a test and warning to incorporate into the
current version of bs() ...

  Ben Bolker



[Rd] obscure error message from splines::ns
Ben Bolker