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

相关推荐
cch89186 小时前
汇编与Java:底层与高层的编程对决
java·开发语言·汇编
荒川之神7 小时前
拉链表概念与基本设计
java·开发语言·数据库
chushiyunen7 小时前
python中的@Property和@Setter
java·开发语言·python
小樱花的樱花7 小时前
C++ new和delete用法详解
linux·开发语言·c++
froginwe117 小时前
C 运算符
开发语言
fengfuyao9858 小时前
低数据极限下模型预测控制的非线性动力学的稀疏识别 MATLAB实现
开发语言·matlab
摇滚侠8 小时前
搭建前端开发环境 安装 nodejs 设置淘宝镜像 最简化最标准版本 不使用 NVM NVM 高版本无法安装低版本 nodejs
java·开发语言·node.js
t198751288 小时前
MATLAB十字路口车辆通行情况模拟系统
开发语言·matlab
yyk的萌9 小时前
AI 应用开发工程师基础学习计划
开发语言·python·学习·ai·lua
Amumu121389 小时前
Js:正则表达式(一)
开发语言·javascript·正则表达式