在survdiff调用中使用幸存对象的公式

时间:2012-12-11 23:49:58

标签: r survival-analysis

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

目前我正在进行数据分析的几个步骤:

  1. 制作一个Surv对象(时间变量,指示每个观察是否被审查);
  2. 根据分类预测器拟合此Surv对象,用于绘制/估计中位生存时间过程;和
  3. 计算一个对数秩检验,询问是否有证据表明各组之间存活率存在“显着”差异。
  4. 作为一个例子,这里是一个使用来自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对象的公式中的信息来计算生存曲线的差异:即在通话中幸存者而这正是我笨拙的[原文如此]的编程技巧碰壁的地方。以下是我目前的尝试:我很感激你能给予的任何帮助!一旦我能够解决这个问题,我应该能够在一个函数中包含一个解决方案。

    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
    

1 个答案:

答案 0 :(得分:8)

正如我上面评论的那样,我在写完这个问题后不久就解决了这个问题。

因此,上面的步骤3可以替换为:

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

但正如本·巴恩斯在评论中指出的那样,来自幸存物体的公式可以更直接地用

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

这正是我想要的,希望可以使用 - 感谢Ben!