【问题标题】:survival::tmerge() giving as.Date.numeric(value) error生存::tmerge() 给出 as.Date.numeric(value) 错误
【发布时间】:2019-09-13 21:08:21
【问题描述】:

我正在尝试将一些数据合并在一起进行一些生存分析,但我不断收到错误。

library(survival)
library(lubridate)

df1 <- data.frame(id = "62103",
                  hire.date = ymd("2016-05-16"),
                  end.date = ymd(Sys.Date())
)
job <- data.frame(id = c("62103", "62103"),
                  job1 = c("level 1 coder", "level 2 coder"),
                  start.date = c(ymd("2016-05-16"), ymd("2017-05-16")),
                  end.date = c(ymd("2017-05-16"), NA)
)

df2 <- tmerge(df1, df1, id = id,
              tstart = hire.date,
              tstop = end.date)
df3 <- tmerge(df2, job, id = id,
              job = tdc(start.date, job1)
)

这会引发错误:

as.Date.numeric(value) 中的错误:必须提供“原点”

以下是关于我的会话的一些信息:

> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] lubridate_1.7.4   survival_2.44-1.1

loaded via a namespace (and not attached):
 [1] compiler_3.6.1  magrittr_1.5    Matrix_1.2-17   tools_3.6.1    
 [5] Rcpp_1.0.2      stringi_1.4.3   splines_3.6.1   grid_3.6.1     
 [9] knitr_1.24      stringr_1.4.0   xfun_0.9        lattice_0.20-38

【问题讨论】:

  • 你从哪个包中使用tdc
  • survival::tdc
  • 我得到survival::tdc Error: 'tdc' is not an exported object from 'namespace:survival' 我有相同的版本survival_2.44-1.1
  • 让我们澄清一下! tdc(start.date, job) 你是说时间相关的协变量是日期类型吗?我期待它是一个数字类型...
  • 嘿@VitaliAvagyan:与时间相关的协变量应该是字符串类型——在你终止之前你有什么工作?

标签: r survival


【解决方案1】:

tdc 函数是 tmerge 函数的内部函数。这是代码顶部的定义:

 assign("tdc", function(time, value = NULL) {
        x <- list(time = time, value = value)
        class(x) <- "tdc"
        x
    }, envir = new)

它需要时间参数的名称和时变变量的名称,并且应该从旧变量创建一个新变量。它将继承调用tmerge 的搜索路径。作为第二个参数给出的是整个数据帧(并且也被分配回该数据帧的名称),因此引发错误并不奇怪,尽管我承认错误消息并不是特别有用。我想有可能只需更改列名,使其不与数据框名称混淆就足够了。让我们检查一下:不,将job 数据帧中的作业列名称更改为“job1”,并且对第二个tmerge 操作的调用仍然失败。

tmerge 帮助页面中的示例与宣传的一样:

temp <- subset(pbc, id <= 312, select=c(id:sex, stage)) # baseline data
pbc2 <- tmerge(temp, temp, id=id, endpt = event(time, status))
pbc2 <- tmerge(pbc2, pbcseq, id=id, ascites = tdc(day, ascites),
               bili = tdc(day, bili), albumin = tdc(day, albumin),
               protime = tdc(day, protime), alk.phos = tdc(day, alk.phos))

fit <- coxph(Surv(tstart, tstop, endpt==2) ~ protime + log(bili), data=pbc2)

我还怀疑除了使用列名作为tdc 的参数之外,还需要一个更大的示例来成功操作tmergedf2 示例只有一行数据,因此它应该如何随时间变化尚不清楚。我还注意到示例中似乎没有状态变量,而这是 Therneau 示例中的第一个操作:pbc2 &lt;- tmerge(temp, temp, id=id, endpt = event(time, status))

帮助页面强烈建议用户查看包含的关于时变协变量的插图。

【讨论】:

  • 这很有帮助!虽然,我认为start.date 是随时间变化的(变化一年),job1 也不同。 (我正在更改示例中的名称,谢谢)。此外,小插图中的示例显然仅适用于时间相关协变量的一个个体和两个观察值。下面的工作对我来说很好。 temp &lt;- subset(pbc, id &lt;= 1, select=c(id:sex, stage)) # baseline datapbc2 &lt;- tmerge(temp, temp, id=id, endpt = event(time, status))pbc2 &lt;- tmerge(pbc2, pbcseq[pbcseq$id == 1,], id=id, ascites = tdc(day, ascites) )
【解决方案2】:

tdc 的问题似乎是某些日期数学无法正确执行。将(来回?)转换为数字可以解决这个问题。

library(survival)
library(lubridate)
library(tidyverse)
df1 <- data.frame(id = "62103",
                  hire.date = ymd("2016-05-16"),
                  end.date = ymd(Sys.Date())
) %>% 
  mutate_if(is.Date, as.numeric)
job <- data.frame(id = c("62103", "62103"),
                  job1 = c("level 1 stacker", "level 2 stacker"),
                  start.date = c(ymd("2016-05-16"), ymd("2017-05-16")),
                  end.date = c(ymd("2017-05-16"), NA)
)%>% 
  mutate_if(is.Date, as.numeric)

df2 <- tmerge(df1, df1, id = id,
              tstart = hire.date,
              tstop = end.date)
df3 <- tmerge(df2, job, id = id,
              job = event(start.date, job1)
) %>%
  mutate_if(is.numeric, as.Date, origin = "1970-01-01")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2012-08-20
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多