Cox模型中的时变系数

机器算法验证 r 回归 生存 回归系数 cox模型
2022-04-04 06:49:51

我有一个受伤后的生存模型,该模型通过 Schoenfeld 检验的比例风险假设(cox.zph()在 R 中)处于临界值。

然而,怀疑第一个月内死亡率会增加,我拟合了一个 Aalen 加性回归模型,该模型也暗示了一个变化的系数,因为累积系数在前 4 天内急剧下降,然后逐渐继续下降,然后稳定在接近我感兴趣的变量一年后保持不变。

现在 - 我如何在 R 中容纳这样的模型?

  • 引入一个随时间变化的交互项[对于我感兴趣的变量]?
  • 为时间 0-4、4-365 和 365 创建不同的变量,然后将数据集扩展为每位患者三行?
1个回答

刚刚用同样的问题回答了我自己的问题。基本上,您需要按照您的描述进行时间分割,然后为时间添加一个交互项。正如您所建议的,在开始时将时间划分得更细,然后增加间隔,这听起来是个好主意。使用我的Greg包,您可以将按时间设置为单个间隔或向量,例如,如果我们创建一个包含四个主题的数据集:

test_data <- data.frame(
  id = 1:4,
  time = c(4, 3.5, 1, 5),
  event = c("censored", "dead", "alive", "dead"),
  age = c(62.2, 55.3, 73.7, 46.3),
  date = as.Date(
    c("2003-01-01", 
      "2010-04-01", 
      "2013-09-20",
      "2002-02-23")))

看起来像这样:

| id| time|event    |  age|date       |
|--:|----:|:--------|----:|:----------|
|  1|  4.0|censored | 62.2|2003-01-01 |
|  2|  3.5|dead     | 55.3|2010-04-01 |
|  3|  1.0|alive    | 73.7|2013-09-20 |
|  4|  5.0|dead     | 46.3|2002-02-23 |

我们通过以下方式将每个主题分成几个:

library(Greg)
library(dplyr)
split_data <- 
  test_data %>% 
  select(id, event, time, age, date) %>% 
  timeSplitter(by = c(.1, .5, 2), # The time that we want to split by
               event_var = "event",
               time_var = "time",
               event_start_status = "alive",
               time_related_vars = c("age", "date"))

knitr::kable(split_data)

给出:

| id|event    |  age|     date| Start_time| Stop_time|
|--:|:--------|----:|--------:|----------:|---------:|
|  1|alive    | 62.2| 2002.999|        0.0|       0.1|
|  1|alive    | 62.3| 2003.099|        0.1|       0.5|
|  1|alive    | 62.7| 2003.499|        0.5|       2.0|
|  1|censored | 64.2| 2004.999|        2.0|       4.0|
|  2|alive    | 55.3| 2010.246|        0.0|       0.1|
|  2|alive    | 55.4| 2010.346|        0.1|       0.5|
|  2|alive    | 55.8| 2010.746|        0.5|       2.0|
|  2|dead     | 57.3| 2012.246|        2.0|       3.5|
|  3|alive    | 73.7| 2013.718|        0.0|       0.1|
|  3|alive    | 73.8| 2013.818|        0.1|       0.5|
|  3|alive    | 74.2| 2014.218|        0.5|       1.0|
|  4|alive    | 46.3| 2002.145|        0.0|       0.1|
|  4|alive    | 46.4| 2002.245|        0.1|       0.5|
|  4|alive    | 46.8| 2002.645|        0.5|       2.0|
|  4|dead     | 48.3| 2004.145|        2.0|       5.0|

正如我之前的回答中所描述的,您现在只需要对变量使用Surv(Start_time, End_time, event)附加:交互项进行建模(请注意,您还应该在模型中没有交互的变量)。