rregressionrms

Adjust nomogram ticks with (splines) transformation, rms package [R]


I'm using a Cox regression model considering my variable trough splines transformation. All is working nice until the subsequent nomogram... as expected, the scale of my variable is also transformed but I'd like to add some custom ticks inside the region between values 0 and 2 (I guess is the transformed one). Any idea, if you please?

Here's my code...

data <- source("https://pastebin.com/raw/rGtUSTLz")$value
ddist <- datadist(data)
options(datadist = "ddist") 

fit <- cph(Surv(time, event) ~ rcs(var, 3), data = data, surv = T, x = T, y = T)
surv <- Survival(fit)

plot(nomogram(fit, 
              fun = list(function(x) surv(times = 10, lp = x), 
                         function(x) surv(times = 30, lp = x),
                         function(x) surv(times = 60, lp = x)), 
              funlabel = paste("c", 1:3), lp = T))

... and these are the real and the desired outputs.

enter image description here

Thanks in advance for your help!


Solution

  • I have had this issue too. My answer is a work around using another package, regplot. Alternatively, if you know what the point values are at the tick marks you want plotted, then you can supply those instead of using the output from regplot. Basically, you need to modify the tick marks and points that are output from the nomogram function and supplied to plot the nomogram.

    This method also provides a way to remove points / tick marks by editing the nomogram output.

    data <- source("https://pastebin.com/raw/rGtUSTLz")$value
    ddist <- datadist(data)
    options(datadist = "ddist") 
    
    fit <- cph(Surv(time, event) ~ rcs(var, 3), data = data, surv = T, x = T, y = T)
    surv <- Survival(fit)
    nom1 <- nomogram(fit, fun = list(function(x) surv(times = 10, lp = x), 
                             function(x) surv(times = 30, lp = x),
                             function(x) surv(times = 60, lp = x)), 
                  funlabel = paste("c", 1:3), lp = T)
    
    library(regplot)
    # call regplot with points = TRUE to get output 
    regplot(fit, fun = list(function(x) surv(times = 10, lp = x), 
                             function(x) surv(times = 30, lp = x),
                             function(x) surv(times = 60, lp = x)), 
                  funlabel = paste("c", 1:3), points = TRUE)
    # look at the points supplied through regplot and take those. 
    nom1_edit <- nom1
    # now we edit the ticks supplied for var and their corresponding point value
    nom1_edit[[1]][1] <- list(c(0, 0.06, 0.15, 0.3, 2,4,6,8,10,12,14,16))
    nom1_edit[[1]][2] <- list(c(0, 10, 21, 32, 42.41191, 50.63878, 58.86565, 
                           67.09252, 75.31939, 83.54626, 91.77313, 100.00000))
    
    nom1_edit$var$points <- c(0, 10, 21, 32, 42.41191, 50.63878, 58.86565, 
                           67.09252, 75.31939, 83.54626, 91.77313, 100.00000)
    # plot the edited nomogram with new points
    plot(nom1_edit)