【问题标题】:Appropriate censoring and truncation for customer survival analysis客户生存分析的适当审查和截断
【发布时间】:2020-01-01 09:04:30
【问题描述】:

我正在研究一个常规客户生存分析问题。在这里,我分析了在 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 日)。

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')

对于冗长的问题,我们深表歉意。 谢谢

【问题讨论】:

    标签: r survival-analysis


    【解决方案1】:

    经过一些额外的研究和咨询专家后,我可以解决这个问题。

    我的数据确实被截断了(因为客户可以在 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”原点的所有曲线的图表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 2012-04-30
      • 1970-01-01
      • 2017-08-08
      • 2020-11-14
      相关资源
      最近更新 更多