背景描述
肝硬化是指疤痕组织替代健康的肝组织。这会阻止肝脏正常工作。肝硬化是长期的(慢性肝病或急性肝衰竭)。在严重的情况下,肝脏受损严重,以至于停止工作。这称为肝衰竭。
根据病理组织学特征和病情发展速度,肝衰竭被分为四类:急性肝衰竭(ALF)、亚急性肝衰竭(SALF)、慢加急性(亚急性)肝衰竭(ACLF)和慢性肝衰竭(CLF)。
目前在我国,引起肝衰竭的主要病因仍然是肝炎病毒(主要是乙型肝炎病毒,约占80-85%),其次是药物或肝毒性物质(如酒精、化学制剂等);而在欧美国家,药物是引起急性、亚急性肝衰竭的主要原因,酒精则常导致慢性肝衰竭。另外妊娠急性脂肪肝、自身免疫性肝病、寄生虫感染等也可导致肝衰竭的发生。
数据说明
数据来自Kesci。
自1990年以来,JPAC健康诊断和控制中心对印度成年人进行了全国范围的调查。该中心利用训练有素的人员,通过直接访谈、检查和血液样本收集了各种人口和健康信息。数据集包括来自 2008-2009 年和 2014-2015 年调查中 8785 名 20 岁或以上成年人的选定信息。
数据理解
理解每个字段的含义,通过基于业务的观察,对字段进行分类,好处是大致能判定该字段与最终做预测字段存在什么样的关系。至于相关性的强弱,则需要进一步的计算。
项目目的
找到相关性比较大的变量,对急性肝衰竭ALF进行预测。
评价标准
虽然项目要求中并未给出具体评价标准。但ALF作为一个二分类变量,适合使用precisio_recall_curve和ROC曲线作为评价标准。且ROC曲线不受样本不均衡的影响。
一、数据的预处理
数据缺失预览
导入数据后发现,众多字段存在缺失值。同样都是疾病诊断结果指标的肝炎、慢性疲劳、高血压、等缺失比较多。一般认为这些指标与ALF相关性值会比较大。不能一律删除,不能不处理,也不能一概填充平均值或中位数。
几个近似的,如高血压、最高血压、最低血压;体重、升高、体重指数等存在差异比较大的缺失情况。比价必须结合实际情况对字段进行特定处理。
缺失值的填充
1,查看样本数据,发现ALF为0和1的样本存在比较大的数量悬殊。为0的样本太多对模型的建立并没好处,当它的其他特征有缺失的,干脆删除。
2,填充经过线性回归后得出的值。 针对部分字段的值之间存在着某种较强相关性。例如,体重和腰围都有,但是没有身高。如果用平均值或者中位数填入,可能不具有现实意义,和真实值相差太多。通过没有缺失值的个案计算出方程,预测缺失值。
3,填充平均值或中位数。 例如体重、身高、腰围中两个及以上缺失,填充相同年龄相同性别的平均值。
4,通过二分类。 最低血压、最高血压可根据是否为高血压选取高血压段或正常血压下的平均值,是否为高血压则通过最高血压和最低血压有有无超出阈值进行分类得出。
5,对其他值,考虑到空值占比有比较大,填中位数可能会影响结果,使用随机数填充。例如视力、教育、收入、未婚等。
导入spss建立线性回归。
以体重、身高和腰围为例。一般认为这三种存在着比较大的线性关系。
导致腰围变化的原因中,体重和身高起到了82.5%的作用。体重和身高的变化导致腰围的变化显著性明显,p<0.001;腰围和体重正相关,和身高负相关。Durbin-watson值为1.983,变量之间互相独立。VIF为1.264,远小于5,多重共线性很小。残差基本符合正态分布。回归方程可建立:
腰围=102.656+0.787*体重-0.407*身高
同理:
身高=174.4+0.663*体重-0.614*腰围
体重= -118.947+0.582*身高+1.041*腰围
填充身高、体重、腰围、最高最低血压、高血压缺失值等
数据均衡处理
由于ALF为0和1的个案,数量超不多是8比1,不均衡的数据集容易造成欠拟合。处理方法之一就是重采样。
二、数据探索分析
计算所有特征与目标值ALF的相关系数。初步了解那些字对最终肝衰竭起到比较大的影响作用。
切分数据集,把ALF为缺失值的划分到最终预测集data_test。含有ALF值的划出30%做测试集。
由于ALF变量值为0或1,适用逻辑回归分析或KNN分析。
在不确定哪些特征较为关键,设多个阈值,分别是0.01,0.05,0.06,0.1,0.15,0.2;
训练模型
特征选择
虽然已经手动对特征值进行了筛选,去除了一些素质指标。但保留的特征,依然不是每个都和目标值有强相关。例如有些特征值本身的方差很小,对其引入之后对结果影响不大。
使用逻辑回归,寻找最合适的阈值
使用逻辑回归分析,从以上值来看,阈值在0.06时,特征选取 '年龄', '性别', '区域', '体重', '身高', '腰围', '最高血压', '最低血压', '好胆固醇', '坏胆固醇', '血脂异常', '体育活动', '教育', '未婚', '收入', '护理来源', '视力不佳', '饮酒', '高血压', '家庭高血压', '糖尿病', '家族糖尿病', '肝炎', '家族肝炎', '慢性疲劳' 时,模型评分最高。
使用KNN分析,寻找最合适的阈值和K值
在相同的阈值下, 对K值进行修改,选取临近1-30个目标,发现在阈值为0.05时,K值设置为2时,能达到最高的评分。错误率最低。
经过上一步的模型训练,找到了最优的参数,接下去就是进行模型评估了。
模型评估
KNN表现
阈值选择0.05,K值选择2
基于对于预测的目的的理解,医疗工作者更希望的是能在有限的诊断数据条件下,判定患者患病的可能性。也就是宁可错杀,不能有漏网之鱼。在更接近患病的可能的时候,对患者说明患病,让其做更详细的检查为上上之选。
也就是模型ALF为1的精确度更高,召回率也更高。
逻辑回归表现
阈值选择0.06
三、项目评价
对比KNN和逻辑回归。使用ROC曲线。对比两个模型预测覆盖的程度和预测错误的程度。
图中显示使用逻辑回归AUC面积比KNN的大。模型覆盖的更好,谎报的也更少。但,实际工作中,我们更希望知道的是一旦有疾病的倾向,立刻被检查出来。也就是通过其他特征的观察,能够更大概率的知道ALF为1的病人。
将测试集添加KNN的预测和逻辑回归的预测导出。导入spss做进一步计算。
当真值设定为ALF为1时,KNN的AUC面积为0.927,也就是能做到92.7%的预测正确,且P=0.000<0.05;逻辑回归有88.6%的预测正确,且P<0.05,具有统计性意义。因为两者的置信区间没有重叠,所以,KNN的确是存在比逻辑回归更适合这个预测,或者说正确率更高的可能,P<0.05。
四、预测ALF值
使用KNN。
最后将ALF缺失的data_test测试集标准化,然后筛选阈值为0.05时候的特征。得出结果。
总结:
在现有的数据中。人的年龄、高血压、最高血压、肝炎、糖尿病、腰围、PVD、饮酒、慢性疲劳对ALF的最终确诊起到了关键性的影响。每单独项都有50%以上的影响力针对ALF。ALF对年龄敏感性最高,肝炎是第二大影响因子,高血压和糖尿病影响力也相对较高。当年龄高于70.5岁,腰围大于89,同时是高血压、糖尿病、肝炎、PVD患者,平时爱喝酒,会大大增加患急性肝衰竭的可能性。
综上所述,为了避免ALF的发生,避免肝炎病毒的侵袭,养成良好的生活习惯,少喝酒、避免慢性疲劳可减少ALF的发病几率。