Как извлечь summary () во фрейм данных, применимый для визуализации данных в ggplot ()? - PullRequest
0 голосов
/ 30 марта 2020

Я делаю анализ выживания с присутствием competing risks. Я использую prodlim-package, что я считаю весьма полезным. Однако мне не нравится встроенная графика, и я хотел бы вместо нее применить ggplot.

Вопрос: как мне извлечь выход prodlim summary() и загрузить его во фрейм данных, доступный для ggplot2?

Возможно, для этого можно написать функцию? Ранее я получил справку в StackOverflow с точки зрения загрузки summary() -выхода в dataframe, но с пакетом, отличным от prodlim.

library(prodlim)
library(riskRegression)

# Build-in data
data(Melanoma)

# Simple competing risk analysis
fit.aj <- prodlim(Hist(time,status)~age+sex,data=Melanoma)

# Defining the event of interest as cause=1
summary(fit.aj,conf.int=FALSE,newdata=data.frame(age=50,sex="Male"),cause=1)

Что дает

> summary(fit.aj,conf.int=FALSE,newdata=data.frame(age=50,sex="Male"),cause=1)

----------> Cause:  1 

age=50, sex=Male :
  time n.risk n.event n.lost cuminc se.cuminc lower upper
1   10     33       0      0  0.000    0.0000 0.000 0.000
2 1513     22       0      0  0.282    0.0795 0.126 0.437
3 2006     15       0      0  0.282    0.0795 0.126 0.437
4 3042     10       0      0  0.396    0.0998 0.201 0.592
5 5565      0       0      0     NA        NA    NA    NA

Резюме может быть легко построено; однако графика не в моем стиле.

plot(fit.aj,conf.int=FALSE,newdata=data.frame(age=50,sex="Male"),cause=1)

enter image description here

Я хотел бы преобразовать summary() в dataframe (давайте вызовем это df), который можно включить в ggplot().

Исходя из names в summary(), я пытаюсь добиться чего-то вроде:

ggplot(df, aes(x=time)) +
geom_line(aes(y=cuminc) +
geom_ribbon(aes(ymin = lower, ymax = upper)

Спасибо за ваши предложения.

1 Ответ

2 голосов
/ 30 марта 2020

Вы можете получить доступ к результирующему списку до уровня, на котором находится таблица для графика, и сохранить его как data.frame. Вы можете проверить структуру списка, используя str.

summ_list <- summary(fit.aj,conf.int=FALSE,newdata=data.frame(age=50,sex="Male"),cause=1)
df<-as.data.frame(summ_list $table$`1`$`age=50, sex=Male`)

#The desired plot with ggplot
ggplot(df, aes(x=time)) +
  geom_line(aes(y=cuminc)) +
  geom_ribbon(aes(ymin = lower, 
                              ymax = upper))

ggplot

...