

   GGeenneerraattee aa BBaassiiss ffoorr PPoollyynnoommiiaall SSpplliinneess

        bs(x, df, knots, degree=3, intercept=FALSE, Boundary.knots)

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

          x: the predictor variable.

         df: degrees of freedom; one can specify `df' rather
             than `knots'; `bs()' then chooses `df-degree-1'
             knots at suitable quantiles of `x'.

      knots: the internal breakpoints that define the spline.
             The default is `NULL', which results in a basis
             for ordinary polynomial regression. Typical values
             are the mean or median for one knot, quantiles for
             more knots. See also `Boundary.knots'.

     degree: degree of the piecewise polynomial---default is 3
             for cubic splines.

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

   Boundary.knots: boundary points at which to 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) + 3 + intercept'.  Attributes are
        returned that  correspond to the arguments to `bs', and
        explicitly give the `knots', `Boundary.knots' etc for
        use by `predict.bs()'.

        `bs()' is based on the function `spline.des()' written
        by Douglas Bates. It generates a basis matrix for rep-
        resenting the family of piecewise polynomials with the
        specified interior knots and degree, evaluated at the
        values of `x'. A primary use is in modeling formulas to
        directly specify a piecewise polynomial 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::

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

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

        lm(y ~ bs(age, 4) + bs(income, 4)) # an additive model
        fit <- lm(y ~ bs(age, knots=c(20,30), B=c(0,100)))
        predict(fit, new.age) #safe predictions because explicit knot sequence was supplied.

