R: Re-state Restricted Cubic Spline Function

rcspline.restate {Hmisc} | R Documentation

## Re-state Restricted Cubic Spline Function

### Description

This function re-states a restricted cubic spline function in the un-linearly-restricted form. Coefficients for that form are returned, along with an R functional representation of this function and a LaTeX character representation of the function. `rcsplineFunction` is a fast function that creates a function to compute a restricted cubic spline function with given coefficients and knots, without reformatting the function to be pretty (i.e., into unrestricted form).

### Usage

    rcspline.restate(knots, coef,
                     type=c("ordinary","integral"),
                     x="X", lx=nchar(x),
                     norm=2, columns=65, before="& &", after="\\",
                     begin="", nbegin=0, digits=max(8, .Options$digits))

    rcsplineFunction(knots, coef, norm=2, type=c('ordinary', 'integral'))

### Arguments

`knots` | vector of knots used in the regression fit
`coef` | vector of coefficients from the fit. If the length of `coef` is \var{k}-1, where k is equal to the `length(knots)`, the first coefficient must be for the linear term and remaining k-2 coefficients must be for the constructed terms (e.g., from `rcspline.eval`). If the length of `coef` is k, an intercept is assumed to be in the first element (or a zero is prepended to `coef` for `rcsplineFunction`).
`type` | The default is to represent the cubic spline function corresponding to the coefficients and knots. Set `type = "integral"` to instead represent its anti-derivative.
`x` | a character string to use as the variable name in the LaTeX expression for the formula.
`lx` | length of `x` to count with respect to `columns`. Default is length of character string contained by `x`. You may want to set `lx` smaller than this if it includes non-printable LaTeX commands.
`norm` | normalization that was used in deriving the original nonlinear terms used in the fit. See `rcspline.eval` for definitions.
`columns` | maximum number of symbols in the LaTeX expression to allow before inserting a newline (\\) command. Set to a very large number to keep text all on one line.
`before` | text to place before each line of LaTeX output. Use "& &" for an equation array environment in LaTeX where you want to have a left-hand prefix e.g. "f(X) & = &" or using "\lefteqn".
`after` | text to place at the end of each line of output.
`begin` | text with which to start the first line of output. Useful when adding LaTeX output to part of an existing formula
`nbegin` | number of columns of printable text in `begin`
`digits` | number of significant digits to write for coefficients and knots

### Value

`rcspline.restate` returns a vector of coefficients. The coefficients are un-normalized and two coefficients are added that are linearly dependent on the other coefficients and knots. The vector of coefficients has four attributes. `knots` is a vector of knots, `latex` is a vector of text strings with the LaTeX representation of the formula. `columns.used` is the number of columns used in the output string since the last newline command. `function` is an R function, which is also return in character string format as the `text` attribute. `rcsplineFunction` returns an R function with arguments `x` (a user-supplied numeric vector at which to evaluate the function), and some automatically-supplied other arguments.

### Author(s)

Frank Harrell
Department of Biostatistics, Vanderbilt University
f.harrell@vanderbilt.edu

### See Also

`rcspline.eval`, `ns`, `rcs`, `latex`, `Function.transcan`

### Examples

    set.seed(1)
    x <- 1:100
    y <- (x - 50)^2 + rnorm(100, 0, 50)
    plot(x, y)
    xx <- rcspline.eval(x, inclx=TRUE, nk=4)
    knots <- attr(xx, "knots")
    coef <- lsfit(xx, y)$coef
    options(digits=4)
    # rcspline.restate must ignore intercept
    w <- rcspline.restate(knots, coef[-1], x="{\\rm BP}")
    # could also have used coef instead of coef[-1], to include intercept
    cat(attr(w,"latex"), sep="\n")

    xtrans <- eval(attr(w, "function"))
    # This is an S function of a single argument
    lines(x, coef[1] + xtrans(x), type="l")
    # Plots fitted transformation

    xtrans <- rcsplineFunction(knots, coef)
    xtrans
    lines(x, xtrans(x), col='blue')

    #x <- blood.pressure
    xx.simple <- cbind(x, pmax(x-knots[1],0)^3, pmax(x-knots[2],0)^3,
                           pmax(x-knots[3],0)^3, pmax(x-knots[4],0)^3)
    pred.value <- coef[1] + xx.simple %*% w
    plot(x, pred.value, type='l')   # same as above

[Package Hmisc version 4.0-3 Index]