If R's bs() and ns() are like S+'s (they do give very similar results* and S+'s were written by Doug Bates), then bs() does not do any linear algebra (like qr()) on splineDesign's output. bs() needs to come up with a default set of knots (if the user didn't supply them), combine the Boundary.knots (repeated ord times) and knots into one vector to pass to splineDesign, and, if there are any x's outside of range(Boundary.knots), treat them specially. ns() needs to project splineDesign's basis functions onto the subspace of functions whose 2nd derivatives are zero at the endpoints. The projection can be done with qr() and friends (S+ uses qr()).
(If you want basis functions for a periodic spline you could use a similar procedure to project to the subspace of functions whose first and second derivatives match at the upper and lower Boundary.knots.) * The only difference between the R and S+ versions of bs() that I've noticed is in how they deal with the x's that are outside of range(Boundary.knots). S+ extrapolates with cubics both above and below that range while R extrapolates with a cubic below the range and with a quadratic above the range. I don't know what the rationale for this is. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-devel-boun...@r-project.org [mailto:r-devel-boun...@r-project.org] On > Behalf > Of Terry Therneau > Sent: Thursday, August 02, 2012 6:10 AM > To: r-devel@r-project.org; Nathaniel Smith > Subject: Re: [Rd] Rd] Numerics behind splineDesign > > > > On 08/02/2012 05:00 AM, r-devel-requ...@r-project.org wrote: > > Now I just have to grovel over the R code in ns() and bs() to figure > > out how exactly they pick knots and handle boundary conditions, plus > > there is some code that I don't understand in ns() that uses qr() to > > postprocess the output from spline.des. I assume this is involved > > somehow in imposing the boundary conditions... > > > > Thanks again everyone for your help, > > -- Nathaniel > The ns and bs function post-process the spline bases to get an > orthagonal basis matrix, this is the use of qr. I think this causes > much more grief than it is worth, for the sake of a small increase in > numeric stability. For instance when you plot the spline bases, they > don't look anything like the basis functions one would expect. (Perhaps > my background in numerical analysis was a hindrance here, since I know > something about splines and thus have an expectation). > > Terry Therneau > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel