rggplot2plotregressionrms

Why does ggplot (.predict) not plot in R /rms package?


Please find My Data of w and w1 at the bottom of this page. I have a Predictor (w$test and w1$test) which is the quantity of positive lymph nodes per total lymph node yield, i.e. ranging between 0 and 1.

I have produced two models - each representing two different disease stages. I wish to plot them together but I all I get is this:

enter image description here

The plot is produced with this code:

library(ggplot2)
library(rms)
library(ggsci)

d <- datadist(w)
j <- options(datadist="d")

d1 <- datadist(w1)
j1 <- options(datadist="d1")

model <- cph(Surv(os.neck,mors)~rcs(test),data=w)
model1 <- cph(Surv(os.neck,mors)~rcs(test),data=w1)

ggplot(Predict(model1, fun=exp)) + scale_x_continuous(limits = c(0,0.80))

out <- bind_rows(fortify(Predict(model, fun=exp)), fortify(Predict(model1, fun=exp)), .id = "model")


ggplot(as.data.frame(out), aes(x = test)) +
  geom_ribbon(aes(fill = model, ymin = lower, ymax = upper), alpha = .05) +
  geom_line(aes(y = yhat, col = model)) + 
  scale_color_jco(name="", labels = c("A", "B")) + 
  scale_fill_jco(name="", labels = c("A", "B")) +
  geom_segment(aes(x = 0, y = 1, xend = 0.55, yend = 1), lty="dashed", size=0.1, alpha=0.75)

As you can see, the plot is cut around 0.35 on the x-axis. I don't get why and I want the plot to continue as there are several w$test and w1$test values greater than 0.35. Please note that this code is produced from a dput() of 30 samples and not the entire cohort.

When I look at View(out), I realize that there is only 400 entities - 200 from each model and model1. It seem that each entity number 200 equal to the test-value-cut-off of 0.35. Please see here:

Data structure

The first model

And

The second model

How can I make the plot complete according to all test-values?

My data w and w1




w1 <- structure(list(sex = c(1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 
                             0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 
                             1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L), mors = c(1L, 0L, 1L, 1L, 
                                                                           1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                                           1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L), 
                     os = c(26.01, 138.68, 8.41, 29.63, 10, 19.59, 22.17, 63.52, 
                            21.44, 27.87, 40.81, 64.15, 43.24, 8.14, 17.01, 23.16, 24.38, 
                            25.61, 29.59, 29.9, 44.7, 44.52, 64.65, 93.06, 102.88, 140.79, 
                            157.07, 34.1, 81.15, 133.42, 24.57, 2.35, 3.44, 3.98, 4.8
                     ), os.beh = c(20.9, 138.68, NA, 20.24, 4.7, 13.01, 16.1, 
                                   45.17, 15.56, 20.24, NA, 45.47, 42.32, 2.49, 12.26, 19, 17.02, 
                                   18.6, NA, 20.83, 31.28, 39.86, 45.34, 67.02, 96.45, NA, NA, 
                                   32.99, 77.73, 131.98, 17.38, 0.79, 0.5, 2.23, 2.33), os.neck = c(18.2, 
                                                                                                    138.68, 5.42, 19.55, 6.6, 13.01, 16.1, 45.17, 14.29, 20.24, 
                                                                                                    28.85, 45.47, 42.32, 4.99, 11.73, 16.36, 17.02, 18.6, 20.53, 
                                                                                                    20.83, 31.28, 31.51, 45.31, 67.02, 73.07, 99.98, 112.03, 
                                                                                                    32.99, 80.46, 131.98, 17.38, 0.79, 2.04, 2.23, 2.3), rfs.neck = c(11.07, 
                                                                                                                                                                      10.32, 4.44, 17.25, 5.39, 5.49, 7.03, 33.61, 12.71, 5.49, 
                                                                                                                                                                      16.92, 14.52, 13.37, 4.14, 9.36, 11.53, 8.8, 9.59, 16.53, 
                                                                                                                                                                      8.34, 8.28, 18.17, 29.6, 10.32, 7.13, 22.51, 43.93, 24.74, 
                                                                                                                                                                      12.85, 28.94, NA, NA, NA, NA, NA), rfs.neck.tsite = c(11.07, 
                                                                                                                                                                                                                            10.32, NA, NA, NA, NA, 7.03, 33.61, NA, NA, NA, NA, NA, 4.14, 
                                                                                                                                                                                                                            9.36, 11.53, 8.8, 9.59, 16.53, 8.34, 8.28, 18.17, 29.6, 10.32, 
                                                                                                                                                                                                                            7.13, 22.51, 43.93, 24.74, 12.85, 28.94, NA, NA, NA, NA, 
                                                                                                                                                                                                                            NA), rfs.neck.nsite = c(11.07, 10.32, 4.44, 17.25, NA, NA, 
                                                                                                                                                                                                                                                    7.03, 33.61, 12.71, 5.49, 16.92, 14.52, 13.37, NA, NA, NA, 
                                                                                                                                                                                                                                                    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
                                                                                                                                                                                                                                                    NA, NA, NA, NA), rfs.neck.msite = c(11.07, 10.32, 4.44, 17.25, 
                                                                                                                                                                                                                                                                                        5.39, 5.49, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
                                                                                                                                                                                                                                                                                        NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
                                                                                                                                                                                                                                                                                        NA, NA), recidiv.tsite = c(1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 
                                                                                                                                                                                                                                                                                                                   0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                                                                                                                                                                                                                                                                                   1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L), recidiv.nsite = c(1L, 
                                                                                                                                                                                                                                                                                                                                                                                      1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 
                                                                                                                                                                                                                                                                                                                                                                                      0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
                                                                                                                                                                                                                                                                                                                                                                                      0L, 0L, 0L, 0L), n.fjernet = c(19L, 7L, 28L, 2L, 15L, 12L, 
                                                                                                                                                                                                                                                                                                                                                                                                                     19L, 17L, 9L, 5L, 6L, 33L, 10L, 27L, 34L, 28L, 14L, NA, 8L, 
                                                                                                                                                                                                                                                                                                                                                                                                                     11L, 14L, 19L, 5L, 38L, 5L, 8L, 10L, 55L, 22L, 8L, 16L, 18L, 
                                                                                                                                                                                                                                                                                                                                                                                                                     6L, 23L, 5L), n.sygdom = c(2L, 0L, 2L, 0L, 9L, 1L, 1L, 1L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                0L, 1L, 0L, 4L, 0L, 4L, 0L, 0L, 0L, NA, 2L, 1L, 0L, 0L, 0L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                0L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 2L, 1L), stadie = c(1L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2L, 2L, 1L, 1L), test = c(0.105263157894737, 0, 0.0714285714285714, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      0, 0.6, 0.0833333333333333, 0.0526315789473684, 0.0588235294117647, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      0, 0.2, 0, 0.121212121212121, 0, 0.148148148148148, 0, 0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      0, NA, 0.25, 0.0909090909090909, 0, 0, 0, 0, 0.4, 0, 0, 0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      0, 0, 0, 0, 0.333333333333333, 0.0869565217391304, 0.2)), .Names = c("sex", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           "mors", "os", "os.beh", "os.neck", "rfs.neck", "rfs.neck.tsite", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           "rfs.neck.nsite", "rfs.neck.msite", "recidiv.tsite", "recidiv.nsite", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           "n.fjernet", "n.sygdom", "stadie", "test"), row.names = c(3L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     4L, 5L, 12L, 29L, 40L, 59L, 61L, 69L, 74L, 78L, 82L, 86L, 95L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     101L, 108L, 109L, 113L, 115L, 116L, 120L, 121L, 128L, 130L, 134L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     139L, 141L, 144L, 150L, 153L, 156L, 159L, 164L, 165L, 166L), class = "data.frame")



w <- structure(list(sex = c(1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 
                            0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 
                            0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L), mors = c(1L, 1L, 1L, 1L, 
                                                                          1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                                          1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), 
                    os = c(16.56, 12.03, 12.08, 18.28, 17.28, 20.86, 23.48, 38.27, 
                           58.63, 96.18, 47.84, 25.7, 27.01, 45.38, 50.04, 70.21, 7.69, 
                           13.26, 15.2, 15.79, 15.74, 15.29, 18.59, 17.24, 22.35, 26.6, 
                           31.85, 31.94, 31.62, 33.52, 34.2, 55.92, 55.92, 67.27, 80.17
                    ), os.beh = c(NA, 7.28, NA, 11.17, 4.93, 64.33, 15.77, 26.94, 
                                  40.77, 69.09, 31.7, 17.05, 15.16, 32.3, 34.46, 49.81, 4.9, 
                                  5.47, 8.73, 9.92, 10.05, 10.77, 12.48, 12.52, 14.82, 18.19, 
                                  21.45, 27.05, NA, 27.01, 24.28, 40.11, 51.39, 62.11, 76.28
                    ), os.neck = c(10.97, 8.02, 8.77, 11.66, 12.55, 13.8, 15.77, 
                                   26.94, 40.77, 69.06, 46.82, 17.05, 18.76, 32.3, 34.46, 49.81, 
                                   4.9, 8.61, 9.92, 9.92, 10.05, 10.51, 12.48, 12.52, 14.82, 
                                   15.87, 21.45, 22.14, 22.97, 23.26, 24.28, 40.11, 40.11, 47.08, 
                                   52.14), rfs.neck = c(8.21, 6.7, 5.36, 7.72, 3.71, 5.39, 8.61, 
                                                        18.46, 9.56, 19.29, 12.42, 11.01, 18.14, 26.05, 15.87, 9.46, 
                                                        3.81, 7.79, 8.34, 8.61, 8.28, 9.79, 6.21, 5.36, 7.49, 9.56, 
                                                        16.07, 4.63, 13.31, 12.68, 20.67, 21.59, 30.16, 22.21, 0), 
                    rfs.neck.tsite = c(8.21, NA, NA, NA, NA, NA, NA, NA, NA, 
                                       NA, NA, 11.01, 18.14, 26.05, 15.87, 9.46, NA, NA, NA, NA, 
                                       NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
                    ), rfs.neck.nsite = c(8.21, 6.7, 5.36, 7.72, 3.71, 5.39, 
                                          8.61, 18.46, 9.56, 19.29, 12.42, NA, NA, NA, NA, NA, NA, 
                                          NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
                                          NA, NA, NA), rfs.neck.msite = c(8.21, 6.7, 5.36, 7.72, 3.71, 
                                                                          5.39, 8.61, 18.47, 9.56, 19.29, 12.42, 11.01, 18.14, 26.06, 
                                                                          15.87, 9.46, 3.81, 7.79, 8.35, 8.61, 8.28, 9.79, 6.21, 5.36, 
                                                                          7.49, 9.56, 16.07, 4.63, 13.31, 12.68, 20.67, 21.59, 30.16, 
                                                                          22.21, 0), recidiv.tsite = c(1L, 0L, 0L, 0L, 0L, 0L, 0L, 
                                                                                                       0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
                                                                                                       0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), recidiv.nsite = c(1L, 
                                                                                                                                                                              1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 
                                                                                                                                                                              0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
                                                                                                                                                                              0L, 0L, 0L, 0L), n.fjernet = c(15L, 7L, 12L, 57L, 6L, 27L, 
                                                                                                                                                                                                             18L, 11L, 24L, 9L, 25L, 9L, 13L, 19L, 8L, 10L, 33L, 23L, 
                                                                                                                                                                                                             10L, 3L, 15L, 15L, 3L, 6L, 16L, 9L, 9L, 13L, 10L, 12L, 20L, 
                                                                                                                                                                                                             30L, 16L, 16L, NA), n.sygdom = c(2L, 1L, 6L, 6L, 0L, 0L, 
                                                                                                                                                                                                                                              9L, 0L, 0L, 0L, 0L, 2L, 3L, 0L, 0L, 0L, 2L, 1L, 0L, 2L, 1L, 
                                                                                                                                                                                                                                              4L, 1L, 2L, 4L, 3L, 2L, 0L, 0L, 2L, 0L, 0L, 1L, 0L, NA), 
                    stadie = c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 
                               3L, 4L, 4L, 3L, 4L, 3L, 3L, 3L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 
                               3L, 5L, 3L, 3L, 4L, 4L, 4L, 4L), test = c(0.133333333333333, 
                                                                         0.142857142857143, 0.5, 0.105263157894737, 0, 0, 0.5, 0, 
                                                                         0, 0, 0, 0.222222222222222, 0.230769230769231, 0, 0, 0, 0.0606060606060606, 
                                                                         0.0434782608695652, 0, 0.666666666666667, 0.0666666666666667, 
                                                                         0.266666666666667, 0.333333333333333, 0.333333333333333, 
                                                                         0.25, 0.333333333333333, 0.222222222222222, 0, 0, 0.166666666666667, 
                                                                         0, 0, 0.0625, 0, NA)), .Names = c("sex", "mors", "os", "os.beh", 
                                                                                                           "os.neck", "rfs.neck", "rfs.neck.tsite", "rfs.neck.nsite", "rfs.neck.msite", 
                                                                                                           "recidiv.tsite", "recidiv.nsite", "n.fjernet", "n.sygdom", "stadie", 
                                                                                                           "test"), row.names = c(2L, 6L, 7L, 8L, 9L, 10L, 11L, 14L, 15L, 
                                                                                                                                  17L, 18L, 22L, 23L, 24L, 25L, 26L, 28L, 31L, 34L, 35L, 36L, 37L, 
                                                                                                                                  38L, 39L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 51L
                                                                                                           ), class = "data.frame")

Solution

  • Markus is right, and the way to overcome that is to define your own range values:

        Predict(model1,test=seq(0,0.6,by=0.1))
    
      test       yhat        lower      upper
    1  0.0 -0.4295911 -0.754044179 -0.1051379
    2  0.1  0.6336235  0.027948982  1.2392981
    3  0.2  0.7307858  0.175765821  1.2858057
    4  0.3  0.6062680 -0.001284515  1.2138206
    5  0.4  0.4817503 -0.453891190  1.4173919
    6  0.5  0.3572326 -0.994418951  1.7088842
    7  0.6  0.2327149 -1.562760195  2.0281900
    

    So:

    out <- bind_rows(fortify(Predict(model,test=seq(0,0.6,by=0.01), fun=exp)), fortify(Predict(model1,test=seq(0,0.6,by=0.01), fun=exp)), .id = "model")
    ggplot(as.data.frame(out), aes(x = test)) +
      geom_ribbon(aes(fill = model, ymin = lower, ymax = upper), alpha = .05) +
      geom_line(aes(y = yhat, col = model)) + 
      scale_color_jco(name="", labels = c("A", "B")) + 
      scale_fill_jco(name="", labels = c("A", "B")) +
      geom_segment(aes(x = 0, y = 1, xend = 0.55, yend = 1), lty="dashed", size=0.1, alpha=0.75)
    

    gives

    enter image description here