《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com)
本节进入实战环节,进行糖尿病风险预测实战。
6.9.1 数据集背景
糖尿病是一种常见且严重的慢性疾病,对患者的健康有重大影响。为了帮助预测糖尿病的发生,我们可以利用机器学习算法和医疗数据进行分析。
原始数据来自美国加利福尼亚大学UGI机器学习数据库中的PimaIndianDiabetes数据集。该数据集的研究对象为亚利桑那州凤凰城附近的皮马印第安人,共包含768条数据记录,数据项包括8个医学预测变量和1个结果变量,如图6-14所示。具体属性包括:怀孕次数(Pregnancies)、血糖浓度(Glucose)、年龄(Age)、血压(BloodPressure)、肱三头肌皮脂厚度(SkinThickness)、胰岛素含量(Insulin)、身体质量指数(BMI)、糖尿病遗传系数(DiabetesPedigreeFunction)和结果(OutCome,1代表患糖尿病,0代表未患糖尿病)。在PimaIndianDiabetes数据集中,Outcome为1的有268例,即糖尿病患者人数;Outcome为0的有500例,即未患糖尿病的人数。
图6-14
本实战的目的是基于数据集中确定的诊断测量指标,来预测患者是否患有糖尿病。数据集中包含的所有患者都是年龄至少21周岁的皮马印第安女性。
首先加载必需的R包:
#加载必需的R包
library(tidyverse)
library(caret)
library(corrplot)
tidyverse包实际上是一些常用R包的集合,包括ggplot2(可视化)、dplyr(数据操作)、tidyr(数据)对齐、tibble(更现代的数据框)、stringr(字符串操作)。加载tidyverse包后,可以直接使用其余包中的函数。
R语言的caret机器学习包对于想要精通机器学习的人来说是必不可少的,它涵盖了数据预处理、数据分割、特征选择、模型训练和调参以及强大的可视化等方面。通过caret包,用户可以方便地实现机器学习的各个阶段,从而提高工作效率和模型性能。
corrplot包提供了一个用于相关矩阵的可视化探索工具。
下面首先对数据进行一些基本的探索性分析,R代码如下:
#查看数据集的前几行
head(diabetes_data)
#概览数据集的统计摘要
summary(diabetes_data)
代码运行结果如图6-15所示。在R语言中,summary()函数是一个重要的统计分析函数,用于计算一维统计特征并生成摘要。在R语言的统计分析中,summary()函数常用于数据预处理和探索性分析,以获取描述性统计量。它可以提供最小值、最大值、四分位数等信息。
图6-15
绘制特征之间相关性矩阵的R代码如下:
correlation_matrix <- cor(diabetes_data[, -9])
corrplot(correlation_matrix, method = "color")
代码的运行结果如图6-16所示。
图6-16
6.9.2 数据预处理
在建立预测模型之前,我们需要对数据进行清洗处理。通常,我们需要处理缺失值和标准化特征等。对于缺失值,有两种常见的处理方式:删除包含缺失值的行和填充缺失值。在本例中,数据集已经是干净的且没有缺失值,因此不需要处理缺失值。对于特征,我们使用factor()函数将diabetes_data$Outcome转换为因子变量。通过将糖尿病标签转换为因子变量,可以确保在逻辑回归模型中正确处理分类变量,使模型能够理解糖尿病标签作为分类变量的含义,并进行相应的预测。
接下来,我们可以将数据集分为训练集和测试集,以便在建立预测模型时进行模型评估。R代码如下:
#设置随机种子以保证结果的可重复性
set.seed(123456)
diabetes_data$Outcome <- factor(diabetes_data$Outcome)
#将数据集分为训练集和测试集(70%训练集,30%测试集)
train_index <- createDataPartition(diabetes_data$Outcome, p = 0.7, list = FALSE)
train_data <- diabetes_data[train_index, ]
test_data <- diabetes_data[-train_index, ]
6.9.3 模型建立
现在,我们可以选择适当的机器学习算法来建立糖尿病预测模型。逻辑回归的另一个重要作用是基于概率来判定类别。因此,在本例中,我们将使用逻辑回归算法。R代码如下:
#创建逻辑回归模型
logistic_model <- train(
Outcome~ .,
data = train_data,
method = "glm",
family = "binomial"
)
在这里,我们构建了逻辑回归模型,"Outcome~ ."指定了目标变量(Outcome)与所有其他变量之间的关系,其中"."表示使用除了目标变量之外的所有其他变量;"data = train_data"指定了模型使用的训练数据集;"method = "glm""指定了使用的建模方法,即逻辑回归模型;family参数指定了响应分布为binominal(二项式)。逻辑回归模型是一种广义线性模型,用于建模二分类问题。
在测试集上进行预测的R代码如下:
predictions <- predict(logistic_model, test_data)
6.9.4 模型评估
最后,我们可以评估预测模型的性能,以了解其在糖尿病预测方面的准确性。输出混淆矩阵的R代码如下:
confusion_matrix <- confusionMatrix(predictions, test_data$Outcome)
print(confusion_matrix)
代码的运行结果如图6-17所示。
图6-17
输出模型的准确率、敏感度和特异度的R代码如下:
accuracy <- confusion_matrix$overall['Accuracy']
sensitivity <- confusion_matrix$byClass['Sensitivity']
specificity <- confusion_matrix$byClass['Specificity']
print(paste("准确率:", accuracy))
print(paste("敏感度:", sensitivity))
print(paste("特异度:", specificity))
代码的运行结果如图6-18所示。
图6-18
我们对测试集进行了预测,并评估了模型的性能。通过混淆矩阵和评估指标,我们可以得到模型的准确率、敏感度和特异度等性能指标,从而对模型的预测能力有一个全面的了解。
以上是基于PimaIndians糖尿病数据集的糖尿病预测分析的源代码和步骤。通过这些步骤,我们可以利用机器学习算法对糖尿病进行预测,从而提供一定的决策支持和指导。注意,这里的代码和步骤只是一个示例,实际应用中需要根据具体情况进行调整和改进。