适当的审查和截断以进行客户生存分析

时间:2019-08-28 07:40:59

标签: r survival-analysis

我正在研究常规的客户生存分析问题。在这里,我分析了在2008-1-1和2018-1-1之间注册的客户。客户可以在此间隔内的任何时间进行注册,并在截止日期2018-1-1或之后的任何时间退出。

示例数据如下所示。第一列是标识符,第二列是它们截至2018-1-1的状态:“ 1表示已取消,0表示未取消”。第三栏是他们的注册日期与2008-1-1之间的星期数。最后一列是取消日期与2008-1-1之间的周数(如果在2018-1-1之前取消)或2008-1-1与2018-1-1之间的周数(如果未取消或之后取消) 2018-1-1)。

enter image description here

dput()生成上述数据集

structure(list(PrimaryConstituentSKey = c(1370591L, 1225587L, 
1264156L, 1266355L, 3080025L), Cancelled = c(1, 1, 1, 1, 0), 
startTime = c(0, 0, 0, 1, 101), stopTime = c(10, 34, 5, 9, 
123)), row.names = c(NA, -5L), class = "data.frame")

我将使用此数据创建一个“生存对象”,稍后将其用于生存模型的响应变量。

如果我的假设是正确的(数据被左截断并右检查),下面的代码是否正确以生成生存对象?

S <- Surv(time = df$startTime, time2 = df$stopTime, event = df$Cancelled)

model <- survfit(S ~ predictor1 + predictor2+.., data = df)

问题2: 我尝试绘制按供应商分组的生存曲线,以了解每个供应商的表现。出乎意料的是,有些供应商的启动时间大约是持续时间的一半,正如我所期望的那样,它们都是从零开始的。当我检查数据时,那些供应商相对较新,仅在过去几年才出现。为了正确地比较它们,所有这些对象都应具有相同的起点,这使我怀疑自己的生存对象是错误的。赞赏有人是否也可以帮助我。

model <- survfit(S ~ Vendor, data = df)

ggsurvplot(fit = model, data = df, linetype = "strata")+xlab('duration in 
months')+ylab('retention rate')

enter image description here

很长的问题很抱歉。 谢谢

1 个答案:

答案 0 :(得分:0)

经过一些额外的研究并咨询了专家,我可以解决问题。

我的数据确实被截断了(因为客户可以在10年内的任何时间进行注册)并进行了审查(某些客户在2018-1-1仍然处于活动状态,此后任何时候都可以取消)。下面的更正帮助我解决了该问题。

  1. 我需要计算“ stopTime”作为注册日期和取消日期(如果在2018-1-1之前取消)或2018-1-1(如果未取消或在2018-1-1之后取消)之间的差额)。
  2. 已取消状态应为2018-1-1的状态。
  3. 用于创建生存对象的代码应进行如下修改

      S <- Surv(time = df$stopTime, event = df$Cancelled, type = "right")
    
  4. 作为最佳实践,建议在定义模型的同时创建生存对象,如下所示

      model <- survfit(Surv(stopTime, Cancelled) ~ Vendor, df) 
    

    这为我绘制了所有原点为“ 0”的曲线图。

enter image description here