Skip to content

How to generate natural cubic spline in R?

7 messages · minben, David Winsemius, Stephan Kolassa +2 more

#
Suppose I have two var x and y,now I want to fits a natural cubic
spline in x to y,at the same time create new var containing the
smoothed values of y. How can I get it?
#
If one enters:

??"spline"

... You get quite a few matches. The one in the stats functions that  
probably answers your specific questions is:

"splinefun {stats}                  R Documentation
Interpolating Splines               Description
Perform cubic (or Hermite) spline interpolation of given data points,  
returning either a list of points obtained by the interpolation or a  
function performing the interpolation."

"splinefun returns a function with formal arguments x and deriv, the  
latter defaulting to zero. This function can be used to evaluate the  
interpolating cubic spline (deriv=0), or its derivatives (deriv=1,2,3)  
at the points x, where the spline function interpolates the data  
points originally specified. This is often more useful than spline."

Perhaps you need to review from you basic intro material regarding
help.search("text")     # or
??"text"    # possibilities.
#
Hi,

if you are looking for *natural* cubic splines (linear beyond the outer 
knots), you could use rcs() in Frank Harrell's Design package.

HTH,
Stephan


David Winsemius schrieb:
#
Hello: 


      If B-splines will suffice, there are many capabilities in R for 
that.  My favorite is the 'fda' package, but 'splines' and other 
packages are also good. 


      The "splinefun" function in the "base" package returns a function 
to compute spline interpolations optionally using a natural spline.  
However, that is an interpolation spline and therefore does no smoothing. 

      To find other options for natural splines, I suggest you try the 
CRAN packages splines, mboost, pspline, Design, and mgcv.  I found them 
using the "RSiteSearch" packages available from R-Forge via 
'install.packages("RSiteSearch", repos="http://r-forge.r-project.org")', 
which also identified the "siggenes" package (which is not on CRAN).  I 
don't know if any of these actually use natural splines, but this gives 
you a reasonably short list to consider. 

      Hope this helps. 
      Spencer Graves
p.s.  The following are the commands I used with the "RSiteSearch" 
package:    

library(RSiteSearch)
natSpl <- RSiteSearch.function('natural spline')
str(natSpl)
summary(natSpl)

natSpl[1:23, c(1, 4, 5, 7)]
minben wrote:
#
The splinefun documentation indicates that "natural" is one of the  
types of cubic spline options available.

Does rcs actually do fitting? Such would not be my expectation on  
reading the documentation and I do not see any examples of such  
functionality in the help pages.
#
Hi David,

David Winsemius schrieb:
That sounds good, didn't know that... rcs() has the advantage of coming 
with a book (Harrell's "Regression Modeling Strategies").
Nope, but you can include rcs() within fitting functions, 
lm(foo~rcs(bar,3)), which makes more sense to me than having a spline 
function fit... Looks like better encapsulation to me.

Best,
Stephan
#
David Winsemius wrote:
It expands a predictor into the truncated power basis functions for the 
natural cubic spline.  This is an easier basis to use than the B-spline 
basis.  rcs calls the Hmisc function rcspline.eval which you may want to 
look at first.

Frank