【python因果库实战15】因果生存分析4

这里写目录标题

      • 加权标准化生存分析
      • 总结
        • 个体层面的生存曲线

在这里插入图片描述

加权标准化生存分析

我们还可以将加权与标准化结合起来,使用 WeightedStandardizedSurvival 模块。在这里,我们将逆倾向得分加权模型(根据基线协变量重新加权人群)与加权回归以及标准化模型相结合:

from causallib.survival.weighted_standardized_survival import WeightedStandardizedSurvivalipw = IPW(learner=LogisticRegression(max_iter=2000))
poly_transform_pipeline = Pipeline([("transform", PolynomialFeatures(degree=2)), ("LR", LogisticRegression(max_iter=8000, C=1.5))]
)
weighted_standardized_survival = WeightedStandardizedSurvival(survival_model=poly_transform_pipeline, weight_model=ipw
)
weighted_standardized_survival.fit(X, a, t, y)population_averaged_survival_curves = weighted_standardized_survival.estimate_population_outcome(X, a, t
)plot_survival_curves(population_averaged_survival_curves,labels=["non-quitters", "quitters"],title="Weighted standardized survival of smoke quitters vs. non-quitters in a 10 years observation period",
)

在这里插入图片描述

或者,我们也可以使用 lifelines 包中的 RegressionFitter 类,例如 Cox 比例风险拟合器。这是一种加权的 Cox 分析。

ipw = IPW(learner=LogisticRegression(max_iter=1000))
weighted_standardized_survival = WeightedStandardizedSurvival(survival_model=lifelines.CoxPHFitter(), weight_model=ipw)# Note the fit_kwargs (passed to CoxPHFitter.fit() method)
weighted_standardized_survival.fit(X, a, t, y, fit_kwargs={'robust': True})# Without setting 'robust=True', we'll get the following warning:
"""StatisticalWarning: It appears your weights are not integers, possibly propensity or sampling scores then?
It's important to know that the naive variance estimates of the coefficients are biased. Instead a) set `robust=True` in the call to `fit`, or b) use Monte Carlo to
estimate the variances."""population_averaged_survival_curves = weighted_standardized_survival.estimate_population_outcome(X, a, t)plot_survival_curves(population_averaged_survival_curves, labels=['non-quitters', 'quitters'], title='Weighted standardized survival of smoke quitters vs. non-quitters in a 10 years observation period')

在这里插入图片描述

总结

不同模型的并列比较。

import itertoolsdef plot_multiple_models(models_dict):grid_dims = (int(np.round(np.sqrt(len(models_dict)))), int(np.ceil(np.sqrt(len(models_dict)))))grid_indices = itertools.product(range(grid_dims[0]), range(grid_dims[1]))fig, ax = plt.subplots(*grid_dims)models_names = list(models_dict.keys())for model_name, plot_idx in zip(models_names, grid_indices):model = models_dict[model_name]model.fit(X, a, t, y)curves = model.estimate_population_outcome(X, a, t, y)ax[plot_idx].plot(curves[0])ax[plot_idx].plot(curves[1])ax[plot_idx].set_title(model_name)ax[plot_idx].set_ylim(0.7, 1.02)ax[plot_idx].grid()plt.tight_layout()plt.show()
MODELS_DICT = {"MarginalSurvival Kaplan-Meier": MarginalSurvival(survival_model=None),"MarginalSurvival LogisticRegression": MarginalSurvival(survival_model=LogisticRegression(max_iter=2000)),"MarginalSurvival PiecewiseExponential": MarginalSurvival(survival_model=lifelines.PiecewiseExponentialFitter(breakpoints=range(1, 120, 10))),"WeightedSurvival Kaplan-Meier": WeightedSurvival(weight_model=IPW(LogisticRegression(max_iter=2000)), survival_model=None),"WeightedSurvival LogisticRegression": WeightedSurvival(weight_model=IPW(LogisticRegression(max_iter=2000)),survival_model=LogisticRegression(max_iter=2000),),"WeightedSurvival WeibullFitter": WeightedSurvival(weight_model=IPW(LogisticRegression(max_iter=2000)),survival_model=lifelines.WeibullFitter(),),"StandardizedSurvival LogisticRegression": StandardizedSurvival(survival_model=LogisticRegression(max_iter=2000)),"StandardizedSurvival Cox": StandardizedSurvival(survival_model=lifelines.CoxPHFitter()),"WeightedStandardizedSurvival": WeightedStandardizedSurvival(weight_model=IPW(LogisticRegression(max_iter=2000)),survival_model=LogisticRegression(max_iter=2000),),
}plot_multiple_models(MODELS_DICT)

在这里插入图片描述

个体层面的生存曲线

在使用直接结果模型(StandardizedSurvivalWeightedStandardizedSurvival)时,可以在 causallib 中生成个体层面的效果估计和生存曲线。

%matplotlib inline
import matplotlib as mpl
import seaborn.objects as so
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from causallib.survival import StandardizedSurvival
from causallib.datasets import load_nhefs_survival
data = load_nhefs_survival(augment=False, onehot=False)
data.t = data.t.rename("longevity")
data.X.join(data.a).join(data.t).join(data.y)

在这里插入图片描述

现在让我们创建一个基于公式的数据转换器,以便轻松指定以下两点:

  • 使用样条灵活地建模连续变量,
  • 创建与所有变量的治疗交互项,以允许效应修正。
from formulaic import Formula
from sklearn.base import BaseEstimator, TransformerMixinclass FormulaTransformer(BaseEstimator, TransformerMixin):def __init__(self, formula):super().__init__()self.formula = formuladef fit(self, X, y=None):return selfdef transform(self, X, y=None):X_ = Formula(self.formula).get_model_matrix(X)return X_
formula = f"""~ 1 + {data.a.name}*(C(exercise) + C(active) + C(education) + sex + race + bs(age, degree=5) + bs(smokeintensity) + bs(smokeyrs) + bs(wt71)+ bs({data.t.name}, degree=5) )"""estimator = make_pipeline(FormulaTransformer(formula),LogisticRegression(penalty="none", max_iter=1000)
)model = StandardizedSurvival(estimator,stratify=False,
)
model.fit(data.X, data.a, data.t, data.y)
po = model.estimate_individual_outcome(data.X, data.a, data.t)
po

在这里插入图片描述

遵循 lifelines 的惯例,结果的维度将不同的时间点作为行,个体作为列。
列进一步按照治疗分配索引,因为这些值是潜在结果。
这种结构使我们能够像在非生存分析中那样获得个体层面的效果(生存差异):

effect = po[1] - po[0]
# effect

我们现在将结果转置,使其变为长格式,以便后续绘图:

effect = effect.reset_index(names="time").melt(id_vars="time", var_name="id", value_name="effect")
effect

在这里插入图片描述

f = mpl.figure.Figure()# Plot inidividual lines:
p = so.Plot(effect,x="time",y="effect",group="id",
).add(so.Lines(linewidth=.5, alpha=0.1, color="#919090")
).label(title="Spaghetti plot of the effect difference",
).on(f).plot()# Plot average effect:
avg_effect = effect.groupby("time")["effect"].mean().reset_index()
ax = f.axes[0]
ax.plot(avg_effect["time"], avg_effect["effect"], color="#062f80")
ax.text(0, 0, "ATE",verticalalignment="bottom",color="#062f80"
)
f

在这里插入图片描述
一旦我们得到了个体级别的生存曲线,我们可以任意聚合它们来观察效应在不同的协变量分层中是如何变化的。

f = mpl.figure.Figure()
effectX = effect.merge(data.X, left_on="id", right_index=True)
strata = "race"p_eff_strat = so.Plot(effectX,x="time",y="effect",color=strata,  # Stratify the effect curves bygroup="id",
).add(so.Lines(linewidth=.5, alpha=0.1)
).scale(color=so.Nominal(["#1f77b4", "#ff7f0e"]),
).label(title="Spaghetti plot for stratified effects",
).on(f).plot()
p_eff_stratavg_effect = effectX.groupby(["time", strata])["effect"].mean().reset_index()
ax = f.axes[0]
for s, stratum_data in avg_effect.groupby(strata):ax.plot(stratum_data["time"], stratum_data["effect"], color="black", linestyle="--",)ax.text(stratum_data["time"].iloc[-1], stratum_data["effect"].iloc[-1],f"{strata}:{s}",verticalalignment="center",)f

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/502598.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows中硬件加速gpu计划开启cpu的使用率居高不下

1.加速gpu计划开启在任务管理器的gpu选项中看不到cuda选项,这给我们进行深度学习训练和推理带来很大影响。 2.开启硬件加速CPU的占用率明显增高,特别用GPU进行实时视频流解码时就不会分配给GPU解码,造成cpu占用居高不下。不利于深度学习训练…

OpenGL入门最后一章观察矩阵(照相机)

前面的一篇文章笔者向大家介绍了模型变化矩阵,投影矩阵。现在只剩下最后一个观察矩阵没有和大家讲了。此片文章就为大家介绍OpenGL入门篇的最后一个内容。 观察矩阵 前面的篇章当中,我们看到了即使没有观察矩阵,我们也能对绘制出来的模型有一…

java.lang.Error: FFmpegKit failed to start on brand:

如果你使用FFmpegKit的时候遇到了这个问题: java.lang.Error: FFmpegKit failed to start on brand: Xiaomi, model: MI 8, device: dipper, api level: 29, abis: arm64-v8a armeabi-v7a armeabi, 32bit abis: armeabi-v7a armeabi, 64bit abis: arm64-v8a.at c…

KAGGLE竞赛实战2-捷信金融违约预测竞赛-part1-数据探索及baseline建立

竞赛链接:https://www.kaggle.com/competitions/home-credit-default-risk/ 认识数据集:application的两张表是申请人信息 通过id关联bureau:过去的借款、previous_application两张表 而bureau_balance则代表对应的还款信息 表之间的关系…

【软考网工笔记】计算机基础理论与安全——网络安全

病毒 Melissa 宏病毒 1. 是一种快速传播的能够感染那些使用MS Word 97 和MS Office 2000 的计算机宏病毒。 2. 前面有**Macro** 表示这是宏病毒; 3. 宏病毒可以感染后缀为.xls的文件;Worm 蠕虫病毒 1. 通常是通过网络或者系统漏洞进行传播。 2. 利用信…

Java虚拟机(Java Virtual Machine,JVM)

一、Java 虚拟机 Java 虚拟机(Java Virtual Machine, JVM)是运行 Java 字节码的虚拟机。它是Java平台的核心组件之一,使得Java程序具有 一次编写,到处运行(Write Once, Run Anywhere) 的特性。 JVM 有针对…

ChatGPT 主流模型GPT-4/GPT-4o mini的参数规模是多大?

微软论文又把 OpenAI 的机密泄露了??在论文中明晃晃写着: o1-preview 约 300B;o1-mini 约 100BGPT-4o 约 200B;GPT-4o-mini 约 8BClaude 3.5 Sonnet 2024-10-22 版本约 175B微软自己的 Phi-3-7B,这个不用约…

GESP202406 二级【计数】题解(AC)

》》》点我查看「视频」详解》》》 [GESP202406 二级] 计数 题目描述 小杨认为自己的幸运数是正整数 k k k(注:保证 1 ≤ k ≤ 9 1 \le k\le 9 1≤k≤9)。小杨想知道,对于从 1 1 1 到 n n n 的所有正整数中, k…

SpringMVC(六)拦截器

目录 1.什么是拦截器 2.拦截器和过滤器有哪些区别 3.拦截器方法 4.单个拦截器的执行流程 5.使用拦截器实现用户登录权限验证(实例) 1.先在html目录下写一个login.html文件 2.在controller包下写一个LoginController文件 3.加拦截器 1.创建一个conf…

基于Arduino的FPV头部追踪相机系统

构建FPV头部追踪相机:让你置身于遥控车辆之中! 在遥控车辆和模型飞行器的世界中,第一人称视角(FPV)体验一直是爱好者们追求的目标。通过FPV头部追踪相机,你可以像坐在车辆或飞行器内部一样,自由…

jQuery get 方法内操控vue变量(异步ajax请求方法中操控双向绑定的响应式变量)实现异步请求函数内完成变量的双向响应式绑定

// 首先,创建一个Vue实例 new Vue({ el: #app, data: { message: Hello, Vue! }, mounted: function() { var self this; // 使用jQuery发起get请求 $.get(your/api/url, function(data) { // 当请求成功完成后,更新Vue实…

Spring boot接入xxl-job

Spring boot接入xxl-job 导入maven包加入配置增加配置类创建执行器类&#xff08;写job的业务逻辑&#xff09;去控制台中配置job 导入maven包 <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>…

【超详细】React SSR 服务端渲染实战

前言 这篇文章和大家一起来聊一聊 React SSR&#xff0c;本文更偏向于实战。你可以从中学到&#xff1a; 从 0 到 1 搭建 React SSR 服务端渲染需要注意什么 react 18 的流式渲染如何使用 文章如有误&#xff0c;欢迎指出&#xff0c;大家一起学习交流&#xff5e;。 &…

25年对AI产业的25点预测以及展望思考

| 2025 大宝同学对于AI 产业 25点预测&#xff0c;他自嘲道&#xff1a;“做不做 250 不重要&#xff0c;重要的是不违背自己的良知&#xff0c;以及对自身物种的坚信。”&#x1f600;ps&#xff1a;因大宝的这篇文章基文涉猎太过于广泛&#xff0c;考虑到某些原因&#xff0c…

Qt之屏幕录制设计(十六)

Qt开发 系列文章 - screencap&#xff08;十六&#xff09; 目录 前言 一、实现原理 二、实现方式 1.创建录屏窗口 2.录屏窗口类定义 3.自建容器对象定义 4.用户使用 5.效果演示 总结 前言 利用Qt实现屏幕录制设计&#xff0c;可以通过使用Qt自带的类QScreen、QPixma…

实时高保真人脸编辑方法PersonaMagic,可根据肖像无缝生成新角色、风格或场景图像。

今天给大家介绍的是一个高保真实时人脸编辑方法PersonaMagic&#xff0c;通过分阶段的文本条件调节和动态嵌入学习来优化人脸定制。该技术利用时序动态的交叉注意力机制&#xff0c;能够在不同阶段有效捕捉人脸特征&#xff0c;从而在生成个性化图像时最大程度地保留身份信息。…

我的创作纪念日——《惊变128天》

我的创作纪念日——《惊变128天》 机缘收获日常成就憧憬 机缘 时光飞逝&#xff0c;转眼间&#xff0c;我已在这条创作之路上走过了 128 天。回顾起 2024 年 8 月 29 日&#xff0c;我满怀忐忑与期待&#xff0c;撰写了第一篇技术博客《讲解LeetCode第1题&#xff1a;两数之和…

常见的框架漏洞复现

1.Thinkphp Thinkphp5x远程命令执行及getshell 搭建靶场 cd vulhub/thinkphp/5-rce docker-compose up -d 首页 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖&#xff0c;通过覆盖类的核心属性filter导致rce&#xff0c;其攻击点较为多&…

云备份项目--服务端编写

文章目录 7. 数据管理模块7.1 如何设计7.2 完整的类 8. 热点管理8.1 如何设计8.2 完整的类 9. 业务处理模块9.1 如何设计9.2 完整的类9.3 测试9.3.1 测试展示功能 完整的代码–gitee链接 7. 数据管理模块 TODO: 读写锁&#xff1f;普通锁&#xff1f; 7.1 如何设计 需要管理…

flutter在windows平台中运行报错

PS D:\F\luichun> flutter run当运行flutter项目时&#xff0c;【解决如下报错】 /C:/flutter/packages/flutter/lib/src/painting/star_border.dart:530:27: Error: The getter Matrix4 isnt defined for the class _StarGenerator.- _StarGenerator is from package:flut…