【问题标题】:Fitting Survival Models in Python From Aggregate Data从聚合数据中拟合 Python 中的生存模型
【发布时间】:2017-02-22 00:28:02
【问题描述】:

我正在尝试在 Python 中拟合一些基本的生存模型。问题的症结在于我有大量的观察结果,所以我的数据是分箱的——即每一行不是一个单一的主题,而是具有共同属性的主题的计数(即相同的协变量,相同的时间观察,相同的观察结果)。似乎lifelines 包需要每行观察才能适应 Cox 模型。同样,尝试用scipy.stats.continuous_rv.fit 拟合 Weibull 曲线也会遇到同样的问题。

我已经在 R 中毫无问题地做到了这一点,因为它们的生存回归包似乎都接受了允许此类数据的weights 向量。当原始数据中只有数千个唯一行时,将我的聚合数据分解为数百万行似乎效率极低。任何指针将不胜感激。

【问题讨论】:

  • 嗨,约翰,欢迎来到 CV。请浏览Help Section,了解这里的主题有哪些类型的问题。就目前而言,我觉得您关于在特定软件中拟合模型的问题更适合 StackOverflow。

标签: r python


【解决方案1】:

我最终使用 Python 中的 rpy2 包来实际调用 R。

importr('survival')
pandas2ri.activate()
coxph_ = r('coxph')
model = coxph_(Formula("Surv(time, outcome) ~ f1 + f2"), data=df, weights=df.num_in_group)

base = importr('base')
print(base.summary(model))

不是很好,但现在可以完成工作。我对rpy2感到惊讶。它具有非常好的 pandas data.frame 互操作性。帮助也很好(rpy2.readthedocs.io)。

【讨论】:

    【解决方案2】:

    lifelines,python 中的生存分析库,现在支持此功能。要使用它,只需在您的主题数据框中添加一个权重列,并在对fit 的调用中指定它。

    from lifelines import CoxPHFitter
    
    cph = CoxPHFitter()
    cph.fit(df, duration_col="T", event_col="E", weight_col="weights")
    

    这里还有一个例子: https://github.com/CamDavidsonPilon/lifelines/blob/8b1249ad96833c764a8ebf78d199a104ab7cb5f5/tests/test_estimation.py#L890-L899

    【讨论】:

      猜你喜欢
      • 2019-12-13
      • 1970-01-01
      • 2016-04-10
      • 2020-08-23
      • 2018-07-11
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多