如何将审查数据输入R的生存模型?

时间:2013-09-23 11:56:24

标签: r survival-analysis

我正试图在订阅上模拟客户生命周期。随着数据被审查,我将使用R的生存包来创建生存曲线。

原始订阅数据集看起来像这样..

id  start_date  end_date
1   2013-06-01  2013-08-25
2   2013-06-01  NA
3   2013-08-01  2013-09-12

我操纵它看起来像这样......

id  tenure_in_months status(1=cancelled, 0=active)
1   2                1
2   ?                0
3   1                1

..为了养活生存模式:

obj <- with(subscriptions, Surv(time=tenure_in_months, event=status, type="right"))
fit <- survfit(obj~1, data=subscriptions)
plot(fit)

我应该在tenure_in_months变量中为被处理的案件提出什么,即今天订阅仍然有效的情况 - 它应该是到今天为止的任期还是NA?

3 个答案:

答案 0 :(得分:9)

首先,我要说我不赞同以前的答案。对于今天仍然有效的订阅,它不应被视为直到今天的任期,也不应被视为NA。我们对这些订阅有何确切了解?我们知道它们一直持续到今天,这相当于对这些观察结果说tenure_in_months,虽然我们不确切地知道它们有多长,它们的持续时间比它们的使用期长。

这是生存分析中称为右检验者的情况。请参阅:http://en.wikipedia.org/wiki/Censoring_%28statistics%29

所以你的数据需要翻译

id  start_date  end_date
1   2013-06-01  2013-08-25
2   2013-06-01  NA
3   2013-08-01  2013-09-12

为:

id  t1   t2    status(3=interval_censored)
1   2    2           3
2   3    NA          3
3   1    1           3

然后您需要更改您的R surv对象:

Surv(time=tenure_in_months, event=status, type="right")

为:

Surv(t1, t2, event=status, type="interval2")

有关更多语法详细信息,请参阅http://stat.ethz.ch/R-manual/R-devel/library/survival/html/Surv.html。可以找到计算详细信息的非常好的摘要:http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#statug_lifereg_sect018.htm

  

区间删失数据可以用两种方式表示。对于第一次使用type = interval和上面显示的代码。在该用法中,除非event = 3,否则将忽略time2参数的值。第二种方法是将每个观察视为一个时间间隔,其中(-infinity,t)用于左删失,(t,无穷大)用于右删失,(t,t)用于精确和(t1,t2)用于间隔。这是用于type = interval2的方法,NA代替无穷大。事实证明它更有用。

答案 1 :(得分:1)

如果缺少结束日期表示订阅仍处于活动状态,则您需要将当前日期的时间作为审查日期。

NA不会与生存对象一起工作。我认为这些案例将被省略。那不是你想要的!因为这些案例包含有关生存的重要信息。

获取事件时间的SQL代码(在SELECT部分​​查询中使用)

DATEDIFF(M,start_date,ISNULL(end_date,GETDATE()) AS tenure_in_months

顺便说一句: 对于我的分析,我会在几天内使用差异。把时间缩短到几个月是没有意义的。

答案 2 :(得分:0)

您需要知道收集数据的日期tenure_in_months 2的id应为此日期减去2013-06-01。

否则我相信您的数据编码是正确的。 status 2的id为0表示它被右删失(意味着我们的生命周期有一个下限,但不是上限)。