R : Tibble 대 ggplot2 (그래프 플로팅)

Nov 27 2020

R의 튜토리얼을 따르려고합니다 (https://rviews.rstudio.com/2017/09/25/survival-analysis-with-r/업무용으로 사용하는 컴퓨터에는 USB 포트 나 인터넷 연결이 없습니다. 라이브러리가 몇 개 설치된 R 만 있습니다. 내 업무용 컴퓨터에는 "서바이벌, 레인저, ggplot2 및 dplyr"이 있습니다. 그러나 "ggfortify"는 없습니다. 'ggfortify'없이 튜토리얼에서 그래프를 그리는 방법을 알아 내려고합니다. 아래에서 사용중인 코드는 다음과 같습니다.

  #load libraries
    library(survival)
    library(ranger)
    library(ggplot2)
    library(dplyr)
    
#load data
data(veteran)
head(veteran)

#Part 1 : works
# Kaplan Meier Survival Curve
km <- with(veteran, Surv(time, status))
km_fit <- survfit(Surv(time, status) ~ 1, data=veteran)

#plot(km_fit, xlab="Days", main = 'Kaplan Meyer Plot') #base graphics is always ready

tibble(time = km_fit$time, surv = km_fit$surv, 
       min = km_fit$lower, max = km_fit$upper) %>% 
  ggplot(aes(x = time)) +
  geom_line(aes(y = surv)) +
  geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.3)

그러나이 작업을 수행 할 수 없습니다.

#Part 2: does not work


km_trt_fit <- survfit(Surv(time, status) ~ trt, data=veteran)



tibble(time = km_trt_fit$time, surv = km_trt_fit$surv, 
       min = km_trt_fit$lower, max = km_trt_fit$upper) %>% 
    ggplot(aes(x = time, group = factor(veteran$trt), colour = factor(veteran$trt), fill = factor(veteran$trt))) +
    geom_line(aes(y = surv)) +
    geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.3)


Error: Aesthetics must be either length 1 or the same as the data (114): group, colour and fill

또는 작동하려면 :
#Part 3 : 작동하지 않음

vet <- mutate(veteran, AG = ifelse((age < 60), "LT60", "OV60"),
              AG = factor(AG),
              trt = factor(trt,labels=c("standard","test")),
              prior = factor(prior,labels=c("N0","Yes")))

aa_fit <-aareg(Surv(time, status) ~ trt + celltype +
                 karno + diagtime + age + prior , 
                 data = vet)

tibble(time = aa_fit$time, surv = aa_fit$surv, min = aa_fit$lower, max = aa_fit$upper) %>% 
  ggplot(aes(x = time)) +
  geom_line(aes(y = surv)) +
  geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.3)

Error: geom_line requires the following missing aesthetics: y

누군가이 문제를 해결하도록 도와 주시겠습니까?

감사합니다 (이전 게시물 : R : 그래프 플로팅 (ggplot vs autoplot) )

답변

1 jakub Nov 27 2020 at 21:20

탐정 작업을해야합니다!

오늘 파트 2를 할 시간이 있습니다. 따라서 계층에 대한 정보가 요소에 포함되어 있음이 밝혀졌습니다 km_trt_fit$strata. 다음과 같이 보입니다.

km_trt_fit <- survfit(Surv(time, status) ~ trt, data=veteran)

km_trt_fit$strata

#> trt=1 trt=2 
#>    61    53

이것은의 61 개의 요소 trt=1와 53 개의 요소가 있음을 의미 trt=2합니다. 왜 이것이 137 (의 행 수)까지 합산되지 않는지 모르겠지만 그것이 작동 veteran하는 survfit()방식 이라고 가정 합니다. 또한 결과 모델 데이터에를 사용하여 포함하려는 원래 데이터 프레임과 다른 수의 행이 있기 때문에 오류가 발생하는 이유이기도합니다 veteran$trt.

내 솔루션 : 벡터 만들기 strata61 개, 53 요소 trt=1trt=2각각을 :

strata = km_trt_fit$strata
strata = rep(names(strata), times = strata)

입력 데이터에 포함 :

tibble(time = km_trt_fit$time, surv = km_trt_fit$surv,
       min  = km_trt_fit$lower, max = km_trt_fit$upper,
       trt  = factor(strata)) %>%
  ggplot(aes(x = time, colour = trt, fill = trt)) +
  geom_line(aes(y = surv)) +
  geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.3)

결과는 튜토리얼의 내용과 매우 유사합니다.

나는 ggfortify에 너무 익숙하지 않지만 그 역할은 아마도 자동으로 비슷한 일을하는 것입니다. 없는 경우 모델 함수에 의해 생성 된 구조를 조사하고 위에서했던 것처럼 수동으로 데이터를 추출해야합니다.