jen*_*irf 6 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
Run Code Online (Sandbox Code Playgroud)
我操纵看起来像这样..
id tenure_in_months status(1=cancelled, 0=active)
1 2 1
2 ? 0
3 1 1
Run Code Online (Sandbox Code Playgroud)
..为了养活生存模型:
obj <- with(subscriptions, Surv(time=tenure_in_months, event=status, type="right"))
fit <- survfit(obj~1, data=subscriptions)
plot(fit)
Run Code Online (Sandbox Code Playgroud)
我应该在tenure_in_months变量中为被处理的案例提供什么,即今天订阅仍然有效的情况 - 它应该是到今天为止的任期还是应该是NA?
首先,我要说我不赞同以前的答案.对于今天仍然有效的订阅,它不应被视为直到今天的任期,也不应被视为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
Run Code Online (Sandbox Code Playgroud)
至:
id t1 t2 status(3=interval_censored)
1 2 2 3
2 3 NA 3
3 1 1 3
Run Code Online (Sandbox Code Playgroud)
然后,您将需要更改您的R surv对象:
Surv(time=tenure_in_months, event=status, type="right")
Run Code Online (Sandbox Code Playgroud)
至:
Surv(t1, t2, event=status, type="interval2")
Run Code Online (Sandbox Code Playgroud)
有关更多语法详细信息,请参阅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代替无穷大.事实证明它更有用.
如果缺少结束日期意味着订阅仍然有效,那么您需要将当前日期之前的时间作为审查日期。
NA 不适用于生存对象。我认为这些情况将被省略。那不是你想要的!因为这些案例蕴含着关于生存的重要信息。
用于获取事件发生前的时间的 SQL 代码(在查询的 SELECT 部分中使用)
DATEDIFF(M,start_date,ISNULL(end_date,GETDATE()) AS tenure_in_months
Run Code Online (Sandbox Code Playgroud)
顺便说一句:我会使用天数差异进行分析。将时间四舍五入到几个月是没有意义的。