R语言医学数据分析实践-糖尿病风险预测实战

【图书推荐】《R语言医学数据分析实践》-CSDN博客

《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com)

R语言编程_夏天又到了的博客-CSDN博客

R编程环境的搭建-CSDN博客

本节进入实战环节,进行糖尿病风险预测实战。

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糖尿病数据集的糖尿病预测分析的源代码和步骤。通过这些步骤,我们可以利用机器学习算法对糖尿病进行预测,从而提供一定的决策支持和指导。注意,这里的代码和步骤只是一个示例,实际应用中需要根据具体情况进行调整和改进。

相关推荐
Wx120不知道取啥名20 分钟前
C语言之长整型有符号数与短整型有符号数转换
c语言·开发语言·单片机·mcu·算法·1024程序员节
Python私教1 小时前
Flutter颜色和主题
开发语言·javascript·flutter
代码吐槽菌1 小时前
基于SSM的汽车客运站管理系统【附源码】
java·开发语言·数据库·spring boot·后端·汽车
biomooc1 小时前
R语言 | paletteer包:拥有2100多个调色板!
r语言·数据可视化·1024程序员节
Ws_1 小时前
蓝桥杯 python day01 第一题
开发语言·python·蓝桥杯
zdkdchao1 小时前
jdk,openjdk,oraclejdk
java·开发语言
神雕大侠mu2 小时前
函数式接口与回调函数实践
开发语言·python
Y.O.U..2 小时前
STL学习-容器适配器
开发语言·c++·学习·stl·1024程序员节
小魏冬琅2 小时前
探索面向对象的高级特性与设计模式(2/5)
java·开发语言
lihao lihao2 小时前
C++stack和queue的模拟实现
开发语言·c++