我正在执行生存分析,我想在中创建一个Surv
对象作为其自己的列data.table
。尽管Surv
对象被视为向量,但由于它们实际上是2列矩阵,因此我无法使用它们来创建新列。是否有一种优雅的方式包含Surv
对象而不将其拆分为单独的列?
这就是Surv
对象的外观。
DT[,Surv(time, status)]
#> [1] 9 13 13+ 18 23 28+ 31 34 45+ 48 161+ 5 5 8
#> [15] 8 12 16+ 23 27 30 33 43 45
这是我想做的一个例子:
library(data.table)
library(survival)
DF <- as.data.frame(survival::aml)
DT <- as.data.table(survival::aml)
# Does work
DF$survival <- Surv(DF$time, DF$status)
# Does not work
DT[,survival:=Surv(time, status)]
尚不清楚这种构造的基本计划是什么,但是如果希望在data.table环境中进行生存建模,则不需要单独构造-object Surv
。人们应该习惯于在data.table -position中放置完整的表达式j
:
> DT[ , coxph( Surv(time, status) ~ 1, data=.SD) ]
Call: coxph(formula = Surv(time, status) ~ 1, data = .SD)
Null model
log likelihood= -42.72484
n= 23
data.table函数创建一个环境,在该环境中,对列名称进行求值时不带引号:
> DT[ , summary(coxph( Surv(time, status) ~ x), data=.SD) ]
Call:
coxph(formula = Surv(time, status) ~ x)
n= 23, number of events= 18
coef exp(coef) se(coef) z Pr(>|z|)
xNonmaintained 0.9155 2.4981 0.5119 1.788 0.0737 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
exp(coef) exp(-coef) lower .95 upper .95
xNonmaintained 2.498 0.4003 0.9159 6.813
Concordance= 0.619 (se = 0.063 )
Likelihood ratio test= 3.38 on 1 df, p=0.07
Wald test = 3.2 on 1 df, p=0.07
Score (logrank) test = 3.42 on 1 df, p=0.06
实际上Surv
,在coxph函数之外单独构造-object的实践给rhelp邮件列表带来了问题,因为这样的外部使对象的环境不是所提供的数据帧coxph
而是环境globalenv()
。生存包的作者特里·特内(Terry Therneau)警告人们不要制造单独的Surv
物体。这完全与有关在data.table中封装矩阵的任何问题分开,但希望它将减少对此障碍的挫败感。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句