

   GGeenneerraattee aa BBaassiiss MMaattrriixx ffoorr NNaattuurraall CCuubbiicc SSpplliinneess

        ns(x, df, knots, intercept=F, Boundary.knots)

   AArrgguummeennttss::

          x: the predictor variable.

         df: degrees of freedom. One can supply `df' rather
             than knots; `ns()' then chooses `df-1-intercept'
             knots at suitably chosen quantiles of `x'.

      knots: breakpoints that define the spline. The default is
             no knots; together with the natural boundary con-
             ditions this results in a basis for linear regres-
             sion on `x'.  Typical values are the mean or
             median for one knot, quantiles for more knots. See
             also `Boundary.knots'.

   intercept: if `TRUE', an intercept is included in the basis;
             default is `FALSE'.

   Boundary.knots: boundary points at which to impose the natu-
             ral boundary conditions and anchor the B-spline
             basis (default the range of the data).  If both
             `knots' and `Boundary.knots' are supplied, the
             basis parameters do not depend on `x'. Data can
             extend beyond `Boundary.knots'

   VVaalluuee::

        a matrix of dimension `length(x) * df' where either
        `df' was supplied or if `knots' were supplied, `df =
        length(knots) + 1 + intercept'.  Attributes are
        returned that correspond to the arguments to `ns', and
        explicitly give the `knots', `Boundary.knots' etc for
        use by `predict.ns()'.

        `ns()' is based on the function `spline.des()' written
        by Douglas Bates.  It generates a basis matrix for rep-
        resenting the family of piecewise-cubic splines with
        the specified sequence of interior knots, and the natu-
        ral boundary conditions.  These enforce the constraint
        that the function is linear beyond the boundary knots,
        which can either be supplied, else default to the
        extremes of the data.  A primary use is in modeling
        formula to directly specify a natural spline term in a
        model.

        Beware of making predictions with new `x' values when
        `df' is used as an argument. Either use `safe.pre-
        dict.gam()', or else specify `knots' and `Bound-
        ary.knots'.

   SSeeee AAllssoo::

        `bs', `poly', `lo', `s', `predict.ns'

   EExxaammpplleess::

        lsfit(ns(x,5),y)
        lm(y ~ ns(age, 4) + ns(income, 4)) # an additive model
        fit <- lm(y ~ ns(age, knots=c(20,30), B=c(10,60)))
        predict(fit, new.age) #safe predictions because explicit knot sequence was supplied.

