From therneau at mayo.edu  Thu Aug  2 19:26:08 2012
From: therneau at mayo.edu (Terry Therneau)
Date: Thu, 02 Aug 2012 12:26:08 -0500
Subject: [Rd] Rd] Numerics behind splineDesign
In-Reply-To: <E66794E69CFDE04D9A70842786030B932E063C@PA-MBX01.na.tibco.com>
References: <mailman.25.1343901607.15222.r-devel@r-project.org>
	<501A7C12.90407@mayo.edu>
	<E66794E69CFDE04D9A70842786030B932E063C@PA-MBX01.na.tibco.com>
Message-ID: <501AB830.5000909@mayo.edu>

Clearly, I got it wrong.
Thanks to others for the clearer and correct message.
Terry T

On 08/02/2012 11:59 AM, William Dunlap wrote:
> 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-bounces at r-project.org [mailto:r-devel-bounces at r-project.org] On Behalf
>> Of Terry Therneau
>> Sent: Thursday, August 02, 2012 6:10 AM
>> To: r-devel at r-project.org; Nathaniel Smith
>> Subject: Re: [Rd] Rd] Numerics behind splineDesign
>>
>>
>>
>> On 08/02/2012 05:00 AM, r-devel-request at 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 at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Rd] Numerics behind splineDesign
Terry Therneau