如何将 Surv 对象作为新列包含在 data.table 中?
How to include a Surv object as a new column in a data.table?
我正在执行生存分析,我想在 data.table
中创建一个 Surv
对象作为它自己的列。尽管 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 环境中进行生存建模,那么单独构造一个 Surv
对象是不可能的必要的。人们应该习惯于在 data.table 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
事实上,在 coxph 函数之外单独构造 Surv
-对象的做法给 rhelp 邮件列表带来了问题,因为这样的外部使得对象的环境不是提供给 coxph
而是globalenv()
。生存包的作者 Terry Therneau 警告人们不要制作单独的 Surv
-objects。这与 data.table 中有关矩阵封装的任何问题完全不同,但希望它能减少对这一障碍的失望程度。
我正在执行生存分析,我想在 data.table
中创建一个 Surv
对象作为它自己的列。尽管 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 环境中进行生存建模,那么单独构造一个 Surv
对象是不可能的必要的。人们应该习惯于在 data.table 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
事实上,在 coxph 函数之外单独构造 Surv
-对象的做法给 rhelp 邮件列表带来了问题,因为这样的外部使得对象的环境不是提供给 coxph
而是globalenv()
。生存包的作者 Terry Therneau 警告人们不要制作单独的 Surv
-objects。这与 data.table 中有关矩阵封装的任何问题完全不同,但希望它能减少对这一障碍的失望程度。