R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析

您所在的位置:网站首页 r语言线性回归模型预测 R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析

R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析

2023-05-05 00:52| 来源: 网络整理| 查看: 265

全文链接:http://tecdat.cn/?p=22596

最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。

本报告是对心脏研究的机器学习/数据科学调查分析。更具体地说,我们的目标是在心脏研究的数据集上建立一些预测模型,并建立探索性和建模方法。但什么是心脏研究?

研究大纲介绍数据集和研究的目标探索数据集可视化使用Chi-Square独立检验、Cramer's V检验和GoodmanKruskal tau值对数据集进行探索预测模型,Logisitic回归和RandomForeststep()bestglm()两个逻辑回归的实例使用5折交叉验证对模型实例进行评估变量选择改进随机森林模型用RandomForest和Logisitc回归进行预测使用可视化进行最终的模型探索结论和下一步改进1.简介

我们阅读了关于FHS的资料:

心脏研究是对社区自由生活的人群中心血管疾病病因的长期前瞻性研究。心脏研究是流行病学的一个里程碑式的研究,因为它是第一个关于心血管疾病的前瞻性研究,并确定了风险因素的概念。

该数据集是FHS数据集的一个相当小的子集,有4240个观测值和16个变量。这些变量如下:

观测值的性别。该变量在数据集中是一个名为 "男性 "的二值。年龄:体检时的年龄,单位为岁。教育 : 参与者教育程度的分类变量,有不同的级别。一些高中(1),高中/GED(2),一些大学/职业学校(3),大学(4)目前吸烟者。每天抽的烟的数量检查时使用抗高血压药物的情况流行性中风。流行性中风(0 = 无病)。流行性高血压(prevalentHyp)。流行性高血压。如果接受治疗,受试者被定义为高血压糖尿病。根据第一次检查的标准治疗的糖尿病患者总胆固醇(mg/dL)收缩压(mmHg)舒张压(mmHg)BMI: 身体质量指数,体重(公斤)/身高(米)^2心率(次/分钟)葡萄糖。血糖水平(mg/dL)

最后是因变量:冠心病(CHD)的10年风险。

这4240条记录中有3658条是完整的病例,其余的有一些缺失值。

2.了解数据的意义

在每一步之前,要加载所需的库。

require(knitr) require(dplyr) require(ggplot2) require(readr) require(gridExtra) #呈现多幅图

然后,加载心脏研究的数据集。

2.1 变量和数据集结构的检查

我们对数据集进行一次检查。

dim(dataset)kable(head(dataset))str(dataset)##检查变量的摘要 summary(dataset)2.2 数据集的单变量图

生成一个数据集的所有单变量图。

# 需要删除字符、时间和日期等变量                                                      geom_bar(data = dataset,                                                      theme_linedraw()+ #colnames(dataset)         marrangeGrob(grobs=all_plots, nrow=2, ncol=2)

这是为了获得对变量,对整个问题和数据集的理解,将通过多变量或至少双变量的可视化来实现。

01

02

03

04

2.3 数据集的双变量图:因变量和预测因素之间的关系

现在我们可以进行一些双变量的可视化,特别是为了看到因变量(TenYearCHD)和预测因素之间的关系。由于图的数量太多,不是所有的一对变量都能被调查到!我们可以在后面的步骤中继续调查。我们可以稍后再回到这一步,深入了解。

下面的代码可以生成因变量的所有双变量图。由于因变量是一个二元变量,所以当预测变量是定量的时候,我们会有boxplots,或者当预测变量是定性的时候,我们会有分段的bar图。

for (var in colnames(dataset) ){         if (class(dataset[,var]) %in% c("factor","logical") ) { ggplot(data = dataset)  +                          geom_bar( aes_string(x = var,                                                                                      } else if (class(dataset[,var]) %in% c("numeric","double","integer") ) {  ggplot(data = dataset) +                          geom_boxplot()

根据我们掌握的情况,男性与TenYearCHD直接相关,因此男性这个变量似乎是一个相对较好的预测因素。同样,年龄似乎也是一个很好的预测因素,因为TenYearCHD == TRUE的病人有较高的年龄中位数,其分布几乎相似。相反,不同类别的教育和因变量之间似乎没有关系。目前的吸烟者变量与因变量有轻微的关系,因为目前的吸烟者患TenYearCHD的风险略高。

2.4 使用Goodman&Kruskal tau检验定性变量之间的关系

然而,除了这些本质上是定性方法的图表外,人们可能希望对这种关联有一个数字值。为了有这样的数字测量,我想使用Goodman&Kruskal的tau测量,这是两个无序因子,即两个分类/名义变量之间的关联测量。在我们这个数据集中的因子变量中,只有教育是_序数变量_,即它的类别有意义。这种测量方法比Cramer's V或chi-square测量方法更具信息量。

GKtauData(cat_variables) plot(dataset)

可以看出,关于因变量的变异性,预测因素的解释力非常小。换句话说,根据Goodman和Kruskal's tau度量,我们的预测因素和因变量之间几乎没有关联。这可以从TenYearCHD一栏的数值中看出。

假设我的G&Ktau检验正确的话,这对模型来说并不是一个好消息。

为了检验这些发现,我们可以用Chi-square检验来检验分类变量与因变量的关联的显著性,然后用Phi相关系数来评估可能的关联的强度。Phi用于2x2等值表。对于更大的表格,即有更多层次的变量,可以利用Cramer's V。

chisq.test(table(dataset_cat$p.value ))        phi(matrix(table(dataset_cat_variables[,7],

奇怪的是,当Chi-square的P值如此之低时,可能的关联的显著性为零。这两个测试(Chi-square和Phi相关)在大量的观察中基本上得出相同的结果,因为一个是基于正态分布的,另一个是基于t分布的。

2.5 多重共线性的双变量分析

该模型的真正问题在于共线性现象。共线性关系发生在两个预测因子高度相关的情况下。我们需要检查这种特性,然后继续建立对数回归模型。

根据Goodman和Kruskal's tau图,我们不应该担心共线性。但是,有序变量的教育变量呢?Cramer's V检验显示,其强度不大。

#  教育与其他分类变量的Chi square独立性测试   chisq.test(table(education,variables[,x]))$p.value )#将教育变量重新定位到数据集的第一个变量上          assocstats(x = table(dataset_cat_variables[,1], dataset_$cramer ) )

没有一个变量显示与教育有很强的关联。Cramer's V的最高值是0.145,这在教育和性别之间是相当弱的。

但是诸如currentSmoker和cigsPerDay这样的变量呢?很明显,其中一个是可以预测的。有一个数字变量和一个分类变量,我们可以把数字变量分成几个类别,然后使用Goodman和Kruskal's tau。GroupNumeric()函数可以帮助将定量变量转换成定性变量,然而,基于对数据的主观理解,以及之前看到的cigsPerDay的多模态分布,在这里使用cut()函数很容易。 现在让我们检查一下GKtau的数值

class_list 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3