医学数据分析与AI提示语工程的实践

83 阅读7分钟

意外的接手了一个医学领域关于死亡风险的数据分析任务,在任务的初期设计阶段引用了AI的需求实现,主要是借助决策需求、分析需求和验证需求来完成模型设计的任务:

先简要介绍一下目标:通过nhanes数据,进行队列研究,探究糖尿病人群中VAI和全因死亡、cvd死亡、癌症死亡的关系

确认了数据源和目标后开始逐步考虑需求:

Step 1: 分析模型设计层次

根据目标开展调研,确定需要建立的模型属于Cox比例风险模型,并结合协变量的分析需求建立三个独立的模型,经过残差分析后进行风险分析,通过Kaplan-Meier生存曲线限制性立方样条(Restricted Cubic Spline, RCS) 进行METS-VF分组的生存差异及其与死亡率的线性剂量-反应关系验证。

Step2: 设计初步提示语——决策需求

参考目标+选项+评估标准,给出决策性需求

首先,本次建模利用的是R语言,构建需求的基础是前期已完成的数据读写,利用的是haven包,读写xpt文件采用read_xpt,需要的朋友可以参考Packages中的read_xpt使用方法。

然后,逐步迭代提示语:

我在初期设计决策需求提示语的时候踩了几个坑,第一个就是如何区分目标阶段,建模的逻辑关系梳理清晰了,但是设置目标阶段需要优化目标的最小可实现性,所以初期想的很天真,自以为把所有需求一次性抛出,然后就可以自动化辅助编码了,很显而易见的失败了(原先以为是自己代码能力不行,其实是最小化问题求解的方法问题)。然后,毫无悬念的是我进入到第二个坑,目标拆分好了,创新性也很好,但是佐证不足,目标内部的检验不能直接求得,需要设置外部检验流程,这就涉及到下一阶段的需求——分析需求,在此处先不多说了,卖个关子,希望朋友们能多提提自己的想法,看看能不能有效的规避这种坑。

然后就是逐步提示语工程,仅供参考:

1.数据准备:确保生存时间和事件状态的正确编码,处理缺失数据。

(1)生存时间(Time):从基线评估日期(1999年)到事件发生(死亡)、删失(失访)或研究截止日期(2018年)的时间(以年为单位)。

(2)事件状态(Status):全因死亡:事件=1,删失=0。特定原因死亡(CVD,癌症):事件=1,其他原因死亡或删失=0(需在竞争风险模型中处理)。

(3)变量编码(此处需要明确每种变量,我这里就不详细赘述了):

主要暴露变量:

VAI评分,按四分位数分组(Q1-Q4)。

协变量:

人口统计学变量:

实验室检查:

检查变量:

问卷变量:

2.模型构建:包括基础Cox模型、分层分析、竞争风险模型。

3.假设验证:如何具体实施Schoenfeld残差检验。

4.结果解释:如何报告风险比、置信区间和P值。

5.分层分析的具体实现:分别对每个亚组拟合模型。

6.竞争风险模型的选择:Fine-Gray模型。

7.比例风险假设的详细步骤:计算和解释Schoenfeld残差。

8.代码数据组成

数据来源于nhanes,数据年限从1999到2018,包括人口统计数据、问卷数据、实验数据、实验室数据和死亡数据,数据集和数据字段对应如下:

data_list1 = 实验数据(此处省略其他数据集)

到此为止已经完成了决策需求的构建,主要的部分是尽可能给出明确的评估标准,比如数据准备部分需要给出尽可能清晰的提示语来详细描述主要变量和协变量。

Step3: 设计进一步提示语——分析需求

下一步,开始分析需求,主要是问题+数据/信息+分析方法,这里可能会让有的朋友们有点困惑,数据信息不是之前已经提供过了吗,这里的分析需求主要是为了解决第一次提示语造成的内部逻辑检验问题,所以不会更多的详细细化数据信息,而是利用数据信息提供更多和更指令化的分析角度。以下提示语仅供参考,请大家多多提意见呀!

1.数据预处理:针对全部协变量合并预处理数据,并根据每一个协变量类型处理数据,生存时间中按照permth_exm为月度数据进行处理,并对每个协变量进行空值处理

2.基础Cox模型:需要考虑全部协变量,对协变量的变量类型和数据类型进行补充

3.分层分析:针对分类变量进行分类

4.竞争风险模型:针对CVD死亡,癌症死亡,全因死亡进行分析

5.模型分步构建:需要建立三个基础Cox比例风险模型,第一个模型仅纳入VAI;第二个模型需要调整人口统计协变量;第三个模型需要在第二个模型的协变量基础上需要补充其他协变量。

Step4: 设计最终提示语——验证需求

此处,进入验证需求环节,这里苦闷了我很久,模型是自己有验证函数的(残差检验),那么还有哪些环节需要验证呢?模型的逻辑已经建立完成,模型的主要评估对象也已经完成,那么是否要考虑三个模型之间的独立关系呢?前面的决策需求中提到了竞争风险模型,这部分其实并不准确,因为三个死亡风险之间的互相验证可以通过Kaplan-Meier生存曲线限制性立方样条(Restricted Cubic Spline, RCS) 来完成(请医学同学轻拍,我不是医学生,对于死亡风险的竞争风险主要是阅读了文献得来的,不是理解的很准确),所以考虑在竞争风险方面不做验证方面的考虑了。

以下是最后一步的提示语:

1.竞争风险模型:当存在多个互斥事件(如全因死亡、心血管死亡、癌症死亡)时,需考虑竞争风险(如心血管死亡可能阻碍癌症死亡的发生),补充全因死亡、心血管死亡和癌症死亡之间的竞争风险,并对全部协变量进行分析

2.分层分析:分层分析需要结合三个模型,对每个模型进行分层分析

3.模型逻辑:通过构建基础Cox比例风险模型对每个模型进行构建,然后对每个模型进行分层分析,并分别建立竞争风险模型,最后对三个模型进行假设检验

模型逻辑部分是重中之重,此处的逻辑之前已经进行了两轮的构建,这一轮提示语中包含模型逻辑的就是为了在建立完成后从模型逻辑的原始角度再进行一次迭代。

在数据分析这个角色的角度来说,提示语工程能够完成数据分析中的三大任务:建模设计校准,模型验证逻辑检验,以及相关的代码辅助,其实代码层面还是个比较好处理的问题,毕竟数据为主,很多时候一味追求代码的逻辑合理性也不太好。感谢看到这里的朋友们,欢迎多多提意见和建议,我看到了一定会及时回复的,并且欢迎希望聊聊数据分析这件事以及商业合作的朋友关注我的公众号:陈留的数据分析小岛。