原文链接:http://tecdat.cn/?p=22596
研究大纲
- 介绍数据集和研究的目标
- 探索数据集
- 可视化
- 使用Chi-Square独立检验、Cramer's V检验和GoodmanKruskal tau值对数据集进行探索
- 预测模型,Logisitic回归和RandomForest
- step()
- 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)
这是为了获得对变量,对整个问题和数据集的理解,将通过多变量或至少双变量的可视化来实现。
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分布的。
R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析(下):https://developer.aliyun.com/article/1491744