Learn R Programming

Hmisc (version 5.1-3)

rcspline.restate: 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'))

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.

Arguments

knots

vector of knots used in the regression fit

coef

vector of coefficients from the fit. If the length of coef is \(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

Author

Frank Harrell
Department of Biostatistics, Vanderbilt University
fh@fharrell.com

See Also

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

Examples

Run this code
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

Run the code above in your browser using DataLab