Re-state Restricted Cubic Spline Function
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).
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'))
knots |
vector of knots used in the regression fit |
coef |
vector of coefficients from the fit. If the length of |
type |
The default is to represent the cubic spline function corresponding
to the coefficients and knots. Set |
x |
a character string to use as the variable name in the LaTeX expression for the formula. |
lx |
length of |
norm |
normalization that was used in deriving the original nonlinear terms
used in the fit. See |
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 |
digits |
number of significant digits to write for coefficients and knots |
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.
Frank Harrell
Department of Biostatistics, Vanderbilt University
fh@fharrell.com
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
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.