Функция R-Surplot с индикатором достоверности работает неправильно - PullRequest
0 голосов
/ 01 февраля 2019

Я использую функцию SurvPlot из пакета survival.Графики выживания с доверительными интервалами производят хорошо, но теперь я столкнулся с проблемой при преобразовании графиков в кривые накопленной заболеваемости.Сама кривая работает правильно, но при использовании функции conf = "bars" доверительные интервалы остаются в настройках выживания.Однако "bands" и "diffbands" работают правильно.

Я приведу вам простой воспроизводимый пример:

library(survival)
library(rms)
Data <- data.frame("time" = sample(1:500), "death" = sample(c(TRUE, FALSE), 500, replace = TRUE))
Data$SurvObj <- with(Data, Surv(Data$time, Data$death == 1))
km.as.one <- npsurv(SurvObj ~ 1, data = Data, conf.type = "log-log")

Вот проблема:

survplot(km.as.one, fun=function(y) 1 - y, conf = "bars")

Однако, они работают правильно:

survplot(km.as.one, conf = "bars")
survplot(km.as.one, fun=function(y) 1 - y, conf = "bands")

Есть ли возможные варианты решения этой проблемы?Я думаю, пакет ggplot2 сделал бы это правильно, но я уже создал довольно много графиков выживания с пакетом survival, поэтому изменение пакета сейчас потребовало бы много дополнительной работы.

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Если вы устали ждать, пока моды в rms перейдут в CRAN, вы можете просто взять обратное из рассмотренных значений:

km.as.one$surv <- 1-km.as.one$surv
km.as.one$lower <- 1-km.as.one$lower
km.as.one$upper <- 1-km.as.one$upper

survplot(km.as.one, fun=function(y) y, conf = "bars")

enter image description here

Хех, только что заметил "точку" в (0,1).

Если вместо использования взлома трех векторов в объекте вместо него используется параметр fun:

survplot(km.as.one, fun=function(y) 1-y, conf = "bars")

... один обнаруживает, что линия преобразуется, но точкии ошибок нет.Если вы измените код:

 getAnywhere(survplot.npsurv)

.... и скопируете его в редактор кода, тогда примените значение fun к точкам и полосам ошибок рядом с концом тела этого довольно длинногофункция:

    surv.plot.npsurv <- <- function (fit, xlim, ylim, xlab, ylab, time.inc, state = NULL, 

    # lines 2-289 of original code  suppressed

    ss <- fun(v$surv[j])    # lines 290-292 when doing this in Rstudio's code editor.
    lower <- fun(v$lower[j])
    upper <- fun(v$upper[j])

     # rest of original code
     }

enter image description here

0 голосов
/ 04 февраля 2019

Я знаю, что вы сказали, что использование пакета ggplot2 может быть не лучшим переключателем, но он дает ответ с минимальным дополнительным кодированием:

library(survival)
library(rms)
library(broom)
library(dplyr)
set.seed(123)
Data <- data.frame("time" = sample(1:500), "death" = sample(c(FALSE, TRUE), 500, replace = TRUE))

Data$SurvObj <- with(Data, Surv(time, death == 1))
km.as.one <- npsurv(SurvObj ~ 1, data = Data, conf.type = "log-log")
survplot(km.as.one, fun=function(y) 1 - y, conf = "bars")

tidydf <- tidy(km.as.one) %>% 
          mutate(estimate = 1- estimate,
                 #invert estimates
                 conf.low = 1- conf.low,
                 conf.high = 1- conf.high,
                 #get points and CIs at specific timepoints
                 pointest = ifelse(row_number()%%50 != 0, NA,estimate),
                 confestlow = ifelse(row_number()%%50 != 0, NA,conf.high),
                 confesthigh = ifelse(row_number()%%50 != 0, NA,conf.low))

#plot
ggplot(tidydf)+
    geom_line(aes(x=time, y = estimate,group = 1))+
    geom_point(aes(x=time, y = pointest))+
    geom_errorbar(aes(x=time, ymin = confestlow, ymax = confesthigh))

Этот сюжет вы ищете?enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...