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

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?

CT *_*Zhu 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
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代替无穷大.事实证明它更有用.


Wie*_*314 1

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

NA 不适用于生存对象。我认为这些情况将被省略。那不是你想要的!因为这些案例蕴含着关于生存的重要信息。

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

DATEDIFF(M,start_date,ISNULL(end_date,GETDATE()) AS tenure_in_months
Run Code Online (Sandbox Code Playgroud)

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