

_G_e_n_e_r_a_t_e _a _B_a_s_i_s _M_a_t_r_i_x _f_o_r _N_a_t_u_r_a_l _C_u_b_i_c _S_p_l_i_n_e_s

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

_A_r_g_u_m_e_n_t_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
          natural 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_a_l_u_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
     representing the family of piecewise-cubic splines with
     the specified sequence of interior knots, and the
     natural boundary conditions.  These enforce the con-
     straint 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.predict.gam()', or else specify `knots' and
     `Boundary.knots'.

_S_e_e _A_l_s_o:

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

_E_x_a_m_p_l_e_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.

