rggplot2survival-analysis

Flipping X and Y axis in RMS Predict plot


Sample code provided:

#creating data columns
x2 <- c(0,0,0,0,0,0.02,1,0,0,1.5,0,0,0,0.06,0.09,0,0,3,0.05,0,9,0,0,0,1.2,0,3.2,0,4,0,2.4,0,0,0,0,0.09,3,0.03,0,2,
        
0,0,0,0,0,0.02,1,0,0,1.5,0,0,0,0.06,0.09,0,0,3,0.05,0,7,0,0,0,1.2,0,3.2,0,4,0,2.4,0,0,0,0,0.09,3,0.03,0,2,

0,0,0,0,0,0.02,1,0,0,1.5,0,0,0,0.06,0.09,0,0,3,0.05,0,12,0,0,0,1.2,0,3.2,0,4,0,2.4,0,0,0,0,0.09,3,0.03,0,2)

id <- c(1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,6,6,7,7,8,8,9,9,9,9,9,9,10,10,10,

11,11,11,11,11,11,11,12,12,12,13,13,13,13,13,13,13,13,14,14,14,15,15,15,15,16,16,17,
17,18,18,19,19,19,19,19,19,20,20,20,

21,21,21,21,21,21,21,22,22,22,23,23,23,23,23,23,23,23,24,24,24,25,25,25,25,26,26,27,
27,28,28,29,29,29,29,29,29,30,30,30)

entry <- c(0,1,2,3,4,5,6,0,1,2,0,1,2,3,4,5,6,7,0,1,2,0,1,2,3,0,1,0,1,0,1,0,1,2,3,4,5,0,1,2,
           
           0,1,2,3,4,5,6,0,1,2,0,1,2,3,4,5,6,7,0,1,2,0,1,2,3,0,1,0,1,0,1,0,1,2,3,4,5,0,1,2,
           
           0,1,2,3,4,5,6,0,1,2,0,1,2,3,4,5,6,7,0,1,2,0,1,2,3,0,1,0,1,0,1,0,1,2,3,4,5,0,1,2)

exit <- entry +1

event <- c(0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,
           1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,
           
           0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,
           1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,
           
           0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,
           1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1)
group <- c("SY","SY","SY","SY","SY","SY","SY","ASY","ASY","ASY","ASY","ASY","ASY","ASY","ASY","ASY",
           "ASY","ASY","SY","SY","SY","ASY","ASY","ASY","ASY","ASY","ASY","ASY","ASY","ASY","ASY","SY",
           "SY","SY","SY","SY","SY","ASY","ASY","ASY","SY","SY","SY","SY","SY","SY","SY","ASY",
           "ASY","ASY","SY","SY","SY","SY","SY","SY","SY","SY","ASY","ASY","ASY","SY","SY","SY",
           "SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY",
           "SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY",
           "SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY","SY",
           "SY","SY","SY","SY","SY","ASY","ASY","ASY")

#setting data distribution to dataframe
data <- data.frame(id, group, entry, exit, event, x2)

#rms cox model
rms.spline <- cph(Surv(entry, exit, event) ~ group + x2,
                  data = data)

#predictive graph of "group" variable
testgraphhenage <- ggplot(rms::Predict(rms.spline, group, fun = exp))

#produce graph
testgraphhenage

The graph that this code produces gives the y axis as "group" and the x axis as "hazard rate". I want the x axis to be "group" and the y axis to be "hazard rate.

I tried:

testgraphhenage+
  coord_flip() 

But this did not work. How can I switch these axes?


Solution

  • Constructing the plot from the prediction manually will make it easier to customize.

    library(rms)
    library(ggplot2)
    #rms cox model
    rms.spline <- cph(Surv(entry, exit, event) ~ group + x2,
                      data = data)
    
    options(datadist = datadist(data))
    
    pred <- rms::Predict(rms.spline, group, fun = exp) 
    
    tibble::as_tibble(pred) |>
      ggplot(aes(x = group, y = yhat, ymin = lower, ymax = upper)) +
      geom_linerange() +
      geom_point() +
      labs(y = 'hazard rate')
    

    Data

    data <- structure(list(id = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 
                                  3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 
                                  9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 
                                  13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 15, 15, 15, 15, 16, 
                                  16, 17, 17, 18, 18, 19, 19, 19, 19, 19, 19, 20, 20, 20, 21, 21, 
                                  21, 21, 21, 21, 21, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 
                                  24, 24, 24, 25, 25, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29, 
                                  29, 29, 29, 30, 30, 30), group = c("SY", "SY", "SY", "SY", "SY", 
                                                                     "SY", "SY", "ASY", "ASY", "ASY", "ASY", "ASY", "ASY", "ASY", 
                                                                     "ASY", "ASY", "ASY", "ASY", "SY", "SY", "SY", "ASY", "ASY", "ASY", 
                                                                     "ASY", "ASY", "ASY", "ASY", "ASY", "ASY", "ASY", "SY", "SY", 
                                                                     "SY", "SY", "SY", "SY", "ASY", "ASY", "ASY", "SY", "SY", "SY", 
                                                                     "SY", "SY", "SY", "SY", "ASY", "ASY", "ASY", "SY", "SY", "SY", 
                                                                     "SY", "SY", "SY", "SY", "SY", "ASY", "ASY", "ASY", "SY", "SY", 
                                                                     "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", 
                                                                     "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", 
                                                                     "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", 
                                                                     "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", 
                                                                     "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "SY", "ASY", 
                                                                     "ASY", "ASY"), entry = c(0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 0, 1, 
                                                                                              2, 3, 4, 5, 6, 7, 0, 1, 2, 0, 1, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 
                                                                                              2, 3, 4, 5, 0, 1, 2, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 0, 1, 2, 3, 
                                                                                              4, 5, 6, 7, 0, 1, 2, 0, 1, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 
                                                                                              4, 5, 0, 1, 2, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 0, 1, 2, 3, 4, 5, 
                                                                                              6, 7, 0, 1, 2, 0, 1, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 4, 5, 
                                                                                              0, 1, 2), exit = c(1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 1, 2, 3, 4, 
                                                                                                                 5, 6, 7, 8, 1, 2, 3, 1, 2, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 
                                                                                                                 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 1, 2, 3, 4, 5, 6, 
                                                                                                                 7, 8, 1, 2, 3, 1, 2, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 5, 6, 
                                                                                                                 1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 8, 
                                                                                                                 1, 2, 3, 1, 2, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 5, 6, 1, 2, 
                                                                                                                 3), event = c(0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
                                                                                                                               0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 
                                                                                                                               0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 
                                                                                                                               0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 
                                                                                                                               1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
                                                                                                                               1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1), 
                           x2 = c(0, 0, 0, 0, 0, 0.02, 1, 0, 0, 1.5, 0, 0, 0, 0.06, 
                                  0.09, 0, 0, 3, 0.05, 0, 9, 0, 0, 0, 1.2, 0, 3.2, 0, 4, 0, 
                                  2.4, 0, 0, 0, 0, 0.09, 3, 0.03, 0, 2, 0, 0, 0, 0, 0, 0.02, 
                                  1, 0, 0, 1.5, 0, 0, 0, 0.06, 0.09, 0, 0, 3, 0.05, 0, 7, 0, 
                                  0, 0, 1.2, 0, 3.2, 0, 4, 0, 2.4, 0, 0, 0, 0, 0.09, 3, 0.03, 
                                  0, 2, 0, 0, 0, 0, 0, 0.02, 1, 0, 0, 1.5, 0, 0, 0, 0.06, 0.09, 
                                  0, 0, 3, 0.05, 0, 12, 0, 0, 0, 1.2, 0, 3.2, 0, 4, 0, 2.4, 
                                  0, 0, 0, 0, 0.09, 3, 0.03, 0, 2)), class = "data.frame", row.names = c(NA, 
                                                                                                         -120L))