R:Tibble vs 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

またはこれが機能する:
#パート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と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

私の解決策:ベクターを作成strataする61と53の要素とtrt=1し、trt=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にあまり精通していませんが、その仕事はおそらくあなたのために同じようなことを自動的に行うことです。それがない場合は、モデル関数によって生成された構造を調査し、上記のように手動でデータを抽出する必要があります。