आर: तिबल बनाम ggplot2 (आलेखन की साजिश रचने)

Nov 27 2020

मैं आर में एक ट्यूटोरियल का पालन करने की कोशिश कर रहा हूं (https://rviews.rstudio.com/2017/09/25/survival-analysis-with-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

या यह काम करने के लिए:
# 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

क्या कोई कृपया मुझे इनको ठीक करने में मदद कर सकता है?

धन्यवाद (पिछला पोस्ट: आर: प्लॉटिंग ग्राफ (ggplot बनाम ऑटोप्लॉट) )

जवाब

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 से अधिक परिचित नहीं हूं, लेकिन इसका काम संभवतः आपके लिए स्वचालित रूप से कुछ ऐसा ही करना है। इसकी अनुपस्थिति में, आपको मॉडल फ़ंक्शन द्वारा निर्मित संरचनाओं की जांच करनी होगी और डेटा को मैन्युअल रूप से निकालना होगा जैसे मैंने ऊपर किया था।