UPDATE: 2023-05-12 17:21:43
formula
関数とsurv_fit
関数の関係をまとめる。
surv_fit
関数カプランマイヤー曲線を計算して可視化する際、一般的にはsurvival
パッケージのsurvfit
関数を利用し、survminer
パッケージのggsurvplot
関数で可視化することが多いはずで、surv_fit
関数は使うことはない。下記のようにすれば問題がなく計算できる。
library("survival")
library("survminer")
<- survfit(Surv(time, status) ~ sex, data = colon)
fit ggsurvplot(fit)
文字列で作成した式をformula
型に変換すれば、文字列から計算もできると思ったが、これはできない。Error in x$formula : object of type 'symbol' is not subsettable
と表示さてしまい可視化できない。ggsurvplot
関数に渡される場合に、symbol
で渡されるのがよろしくない模様。
# f <- as.formula('Surv(time, status) ~ sex')
# fit2 <- survfit(f, data = colon)
# ggsurvplot(fit2)
# Error in x$formula : object of type 'symbol' is not subsettable
このようなケースでsurv_fit
関数を利用する。この関数であれば問題なく可視化できる。surv_fit
関数標準のsurvfit
関数のラッパー関数で、こちらであれば機能する。おそらくドキュメントに記載されている、このあたりが関わっていると思われる。
If the formula names are not available, the variables in the formulas are extracted and used to build the name of survfit object.
ggsurvplot
関数側の細かい詳細を確認してないので、正確かどうかはわからない。
<- as.formula('Surv(time, status) ~ sex')
f <- surv_fit(f, data = colon)
fit2 ggsurvplot(fit2)
このように考えて、for-loopで複数のカプランマイヤー曲線を計算して可視化することもできる。
<- c('rx', 'sex')
treats <- vector(mode = 'list', length = length(treats))
res for (i in seq_along(treats)) {
<- treats[i]
treat <- as.formula(paste0('Surv(time, status) ~ ', treat))
survie <- surv_fit(survie, data = colon)
fit <- ggsurvplot(fit, colon)
res[[i]]
}1] res[
## [[1]]
2] res[
## [[1]]
surv_fit
関数は他にも便利な機能があり、可視化だけでなく、複数の式を一度に計算できる。これはsurvfit
関数ではできない。
<- list(
formulas sex = Surv(time, status) ~ sex,
rx = Surv(time, status) ~ rx
)
# Fit survival curves for each formula
<- surv_fit(formulas, data = colon)
fit surv_pvalue(fit)
## $`colon::sex`
## variable pval method pval.txt
## 1 sex 0.6107936 Log-rank p = 0.61
##
## $`colon::rx`
## variable pval method pval.txt
## 1 rx 4.990735e-08 Log-rank p < 0.0001
使いみちはわからないが、データ側を変えることができる。
<- surv_fit(Surv(time, status) ~ sex,
fit data = list(colon, lung))
surv_pvalue(fit)
## $`colon::sex`
## variable pval method pval.txt
## 1 sex 0.6107936 Log-rank p = 0.61
##
## $`lung::sex`
## variable pval method pval.txt
## 1 sex 0.001311165 Log-rank p = 0.0013
他にもグループ化に対応している。ここではrx
でグループ化している。
<- surv_fit(Surv(time, status) ~ sex,
fit data = colon, group.by = "rx")
ggsurvplot(fit, colon)
## $`rx.Obs::sex`
##
## $`rx.Lev::sex`
##
## $`rx.Lev+5FU::sex`
##
## attr(,"class")
## [1] "list" "ggsurvplot_list"