我正试图在订阅上模拟客户生命周期。随着数据被审查,我将使用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?
答案 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表示它被右删失(意味着我们的生命周期有一个下限,但不是上限)。