8

我正在尝试对订阅的客户生命周期进行建模。由于数据被审查,我将使用 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)

对于 consored 案例,即订阅今天仍然有效的案例,我应该在 tenure_in_months 变量中放入什么 - 它应该是直到今天的任期还是应该是 NA?

4

3 回答 3

10

首先我要说我不同意前面的答案。对于今天仍然有效的订阅,它不应被视为直到今天为止的任期,也不应被视为 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

然后你需要改变你的 Rsurv对象,从:

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, infinity),精确为 (t,t),间隔为 (t1, t2)。这是用于 type = interval2 的方法,用 NA 代替无穷大。事实证明它更有用。

于 2013-09-23T15:44:29.580 回答
1

如果缺少结束日期意味着订阅仍然有效,那么您需要将当前日期之前的时间作为审查日期。

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

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

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

顺便说一句:我会使用天数差异来进行分析。将时间四舍五入到几个月是没有意义的。

于 2013-09-23T12:04:39.630 回答
0

您需要知道收集数据的日期tenure_in_months那么for id2 应该是这个日期减去 2013-06-01 。

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

于 2015-07-22T10:12:00.850 回答