7

我正在 R 中进行一些生存分析,并希望整理/简化我的代码。

目前我在数据分析中做了几个步骤:

  1. 制作一个 Surv 对象(时间变量,指示每个观察是否被审查);
  2. 根据分类预测器拟合此 Surv 对象,用于绘制/估计中位生存时间过程;和
  3. 计算对数秩检验,以询问是否存在组间生存“显着”差异的证据。

作为一个例子,这里是一个使用 R 的生存包中的肺数据集的模型。所以下面的代码与我想要做的足够相似,但在预测器集方面简化了很多(这就是我想要的原因为了简化代码,所以我不会跨模型进行不一致的调用)。

library(survival)

# Step 1: Make a survival object with time-to-event and censoring indicator.
# Following works with defaults as status = 2 = dead in this dataset.
# Create survival object
lung.Surv <- with(lung, Surv(time=time, event=status))

# Step 2: Fit survival curves to object based on patient sex, plot this.
lung.survfit <- survfit(lung.Surv ~ lung$sex)
print(lung.survfit)
plot(lung.survfit)

# Step 3: Calculate log-rank test for difference in survival objects
lung.survdiff <- survdiff(lung.Surv ~ lung$sex)
print(lung.survdiff)

现在这一切都很好,花花公子,我可以忍受这个,但想做得更好。

所以我的问题是关于第 3 步。我想在这里做的是能够使用来自lung.survfit 对象的公式中的信息来计算生存曲线的差异:即在对survdiff 的调用中。这就是我驯服的 [原文如此] 编程技能碰壁的地方。以下是我目前的尝试:如果您能提供任何帮助,我将不胜感激!一旦我可以解决这个问题,我应该能够将解决方案包装在一个函数中。

lung.survdiff <- survdiff(parse(text=(lung.survfit$call$formula)))
## Which returns following:
# Error in survdiff(parse(text = (lung.survfit$call$formula))) : 
# The 'formula' argument is not a formula
4

1 回答 1

8

正如我上面评论的那样,我实际上在写完这个问题后不久就整理出了这个问题的答案。

所以上面的步骤 3 可以替换为:

lung.survdiff <- survdiff(formula(lung.survfit$call$formula))

但正如 Ben Barnes 在对问题的评论中指出的那样,可以更直接地从 survfit 对象中提取公式

lung.survdiff <- survdiff(formula(lung.survfit))

这正是我想要并希望能够提供的——谢谢本!

于 2012-12-12T20:15:57.680 回答