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

相关推荐
Theodore_10221 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
----云烟----3 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024063 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic4 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it4 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康4 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神5 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海5 小时前
scala String
大数据·开发语言·scala
qq_327342735 小时前
Java实现离线身份证号码OCR识别
java·开发语言
锅包肉的九珍5 小时前
Scala的Array数组
开发语言·后端·scala