Search code examples
rplotggplot2non-linear-regression

How to plot ols with r.c. splines


I'd like to plot the predicted line of the regression that contains a restricted cubic spline due to non-linearity in the model and the standard error bands. I can get the predicted points, but am not sure to to just plot the lines and error bands. ggplot is preferred, or base graphics is fine also. Thanks.

Here is an example from the documentation:

library(rms)

# Fit a complex model and approximate it with a simple one
x1 <- runif(200)
x2 <- runif(200)
x3 <- runif(200)
x4 <- runif(200)
y <- x1 + x2 + rnorm(200)
f <- ols(y ~ rcs(x1,4) + x2 + x3 + x4)
pred <- fitted(f) # or predict(f) or f$linear.predictors
f2 <- ols(pred ~ rcs(x1,4) + x2 + x3 + x4, sigma=1)
fastbw(f2, aics=100000)
options(datadist=NULL)

And a plot of the predicted values of the model:

plot(predict(f2))

enter image description here


Solution

  • The rms package has a number of helpful functions for this purpose. It is worth looking at http://biostat.mc.vanderbilt.edu/wiki/Main/RmS

    In this instance, you can simple set datadist (which set up distribution summaries for predictor variables) appropriately and then use plot(Predict(f) or ggplot(Predict(f))

    set.seed(5)
    # Fit a complex model and approximate it with a simple one
    x1 <- runif(200)
    x2 <- runif(200)
    x3 <- runif(200)
    x4 <- runif(200)
    y <- x1 + x2 + rnorm(200)
    f <- ols(y ~ rcs(x1,4) + x2 + x3 + x4)
    ddist <- datadist(x1,x2,x3,x4)
    options(datadist='ddist')
    
    
    
    plot(Predict(f))
    

    enter image description here

    ggplot(Predict(f))
    

    enter image description here