R语言数据探索和分析22-使用随机森林和聚类算法探索和预测健康状况

news2024/11/30 20:34:43

一、研究背景

在两个实验中,使用了一组综合性的生物统计数据来探索和预测健康状况(特别是疾病的发生)。实验的核心在于应用高级数据分析技术,具体包括随机森林分类和聚类分析,来洞察和预测个体的健康状况。首先,对数据进行了精细的预处理,确保了分析的准确性和有效性。接下来,通过一系列的数据可视化手段,包括生成相关系数热力图,成功地揭示了数据中的关键模式和趋势。

随后,采用随机森林模型,这是一种强大的机器学习技术,对疾病(即响应变量“illness”)的发生进行了预测。通过这种方法,不仅能够评估各种健康指标与疾病发生之间的关系,还能够预测个体的健康风险。模型的性能通过一系列的评估指标得到了验证,包括混淆矩阵和接收者操作特征曲线(ROC),这些都是评估分类模型性能的重要工具。

最后,进行了聚类分析,这进一步加深了对数据集中潜在群体特征的理解。这一步骤不仅揭示了不同健康参数之间的关联性,还可能揭示了特定健康状况的潜在风险因素。

二、实证分析

首先读取数据,因为数据很乱,要进行预处理:

最后,格式整理好的数据如下:

# 去除第一行的列名,并用分号分割数据
data <- data[-1]
data <- strsplit(data, ";")

# 将数据转换为数据框
df <- as.data.frame(do.call(rbind, data))
# 设置列名
colnames(df) <- column_names

# 将字符型数据转换为数值型(如果需要)
df[] <- lapply(df, as.numeric)

# 显示数据框的前几行
head(df)

str(df)
head(df,5)

查看其属性:

 数据预处理,创建一个指示缺失值的数据框

###数据预处理
# 创建一个指示缺失值的数据框
missing_df <- df %>% 
  mutate(row_id = row_number()) %>%  # 添加行索引
  pivot_longer(cols = -row_id, names_to = "variable", values_to = "value") %>%
  mutate(value = ifelse(is.na(value), "Missing", "Not Missing"))
# 绘制热图
ggplot(missing_df, aes(x = row_id, y = variable, fill = value)) +
  geom_tile() +
  scale_fill_manual(values = c("Missing" = "red", "Not Missing" = "gray")) +
  theme_minimal() +
  labs(x = "Row Number", y = "Variable", fill = "Status", title = "Heatmap of Missing Values")



# Checking for missing values
cat("Missing Values:\n")
print(sum(is.na(df)))

可以发现无缺失数据,接下来,可以对数据进行统计性分析:

其中包含了最小值、第一四分位数、中位数、平均数、第三四分位数和最大值。这样的摘要为深入分析提供了基础,它揭示了各项指标的分布情况,包括血压、脉搏、饮食、睡眠、身高、体重和腰围等关键健康指标。

接下来对部分数据可视化

# Histograms for numerical features
hist_plots <- df %>%
  pivot_longer(cols = -illness, names_to = "variables", values_to = "values") %>%
  ggplot(aes(x = values, fill = variables)) +
  geom_histogram(bins = 30, color = "black") +
  facet_wrap(~variables, scales = 'free_x') +
  theme_minimal() +
  scale_fill_viridis_d() # 使用 Viridis 颜色方案
print(hist_plots)

年龄(Age): 年龄的分布集中在较低的值区域,这表明样本群体可能偏向年轻人。

舒张压(Diastolic pressure): 舒张压的分布显示了一个相对集中的范围,大多数值在70到90毫米汞柱之间。

饮食(Food): 饮食的分布图显示数据似乎是分类变量,大部分数据集中在两个值上。....

图像展示的是一系列箱形图,这些图表反映了不同变量在两个疾病状态(用“as.factor(illness)”标记,红色表示1,蓝色表示2)之间的分布差异。箱形图显示了数据的中位数(箱子中的横线)、四分位数范围(箱子的大小)、异常值(图中的小圆点)以及整体分布的偏态。例如年龄在两个疾病状态下的分布相似,中位数和四分位数范围较为接近。

这张图是一个散点图,展示了收缩压(Systolic Pressure)与舒张压(Diastolic Pressure)之间的关系。从图中可以看出大部分数据点集中在收缩压100到120毫米汞柱和舒张压70到90毫米汞柱的区域,这通常被视为正常血压范围....

# 首先转换数据为长格式
long_df <- df %>%
  pivot_longer(cols = -illness, names_to = "variables", values_to = "values")

# 使用 ggplot2 绘制密度图
ggplot(long_df, aes(x = values, fill = variables)) +
  geom_density(alpha = 0.7) +
  theme_minimal() +
  scale_fill_viridis_d()

重叠的密度图,它展示了数据集中各个变量的分布密度。每个颜色代表一个变量,其在水平轴上的分布显示了该变量在数据集中的相对密度。例如舒张压(Diastolic Pressure): 分布较为集中,显示为一个较高、较窄的峰,这表明大部分数据落在一个相对狭窄的范围内。

library(corrplot)
cor_mat <- cor(df %>% select(-illness))
corrplot(cor_mat, method = "color")

相关系数热力图,它显示了数据集中不同变量之间的相关性。在这个热力图中,颜色的强度代表相关系数的大小,从-1到1变化。蓝色表示正相关,红色表示负相关,颜色越深表示相关性越强。

从热力图可以观察到以下几点:

存在一些变量间的显著正相关,如身高和体重、腰围和体重,这是符合预期的,因为身体尺寸较大的个体通常体重更重。

有些变量之间的相关性较弱,如食物和睡眠、脉搏和性别,这些变量之间看起来没有明显的直接联系。

index <- sample(1:nrow(df), nrow(df)*0.7)
train_data <- df[index,]
test_data <- df[-index,]

接下来随机森林模型的建立与预测

混淆矩阵为:

library(ggplot2)
# 计算混淆矩阵
# 计算混淆矩阵
confusion <- confusionMatrix(as.factor(predictions), as.factor(test_data$illness))
confusion_matrix <- confusion$table

# 将混淆矩阵转换为长格式的数据框
confusion_long <- as.data.frame(as.table(confusion_matrix))

# 确保列名是正确的
names(confusion_long) <- c("Prediction", "Actual", "Frequency")

# 可视化混淆矩阵
ggplot(confusion_long, aes(x = Prediction, y = Actual, fill = Frequency)) +
  geom_tile() +
  scale_fill_gradient(low = "white", high = "steelblue") +
  theme_minimal() +
  labs(title = "Confusion Matrix", x = "Predicted Label", y = "True Label")

随后绘制一下绘制精确度-召回率曲线

每个图表都显示了模型在特定指标上的得分,与归一化排名(可能基于预测概率)的关系。接下来查看重要性特征排序:

从图中可以看出:

食物(Food): 这个变量的重要性评分最高,表明它在模型预测疾病状态中起着关键作用。

年龄(Age): 排在第二位,也是模型中一个重要的预测变量。

接下来进行聚类分析:

针对该数据,聚类可以:

健康分析:通过聚类分析,可以将相似的健康状况的个体归为一类,例如根据血压、脉搏、体重等因素。这有助于识别特定健康风险群体或研究特定健康状况的共同特征....

# 使用肘方法确定簇的数量
wss <- map_dbl(1:10, ~kmeans(df_scaled, .x)$tot.withinss)
plot(1:10, wss, type = "b", pch = 19, frame = FALSE, xlab = "Number of clusters K", ylab = "Total within-clusters sum of squares")

# 应用k均值聚类
set.seed(123) # 为了可重复性
k <- 3 # 假设选择的簇数为3
km_result <- kmeans(df_scaled, centers = k)

运用手肘发法选择K值,它用于帮助确定在聚类分析中应选择多少个簇(即K值)。肘部方法的核心思想是增加簇的数量会导致每个簇内的总方差(或称为总内簇平方和)减少,但减少的速率会在某一点急剧下降,这一点就是“肘部”。

在图中,横轴表示簇的数量(K),纵轴表示总内簇平方和。图中显示当簇的数量从2增加到10时,总内簇平方和急剧下降并逐渐平缓,这表明随着簇数量的增加,新的簇不再显著降低总方差。

 

在此图中,可以观察到以下特点:

三个簇: 数据点被分成了三个簇,每个簇用不同的颜色标记。

簇的分布:

第一个簇(红色区域)似乎较为分散。

第二个簇(绿色区域)和第三个簇(蓝色区域)相对集中。

 三、总结

总而言之,通过随机森林和聚类分析,不仅能够预测疾病的发生,并且还能够识别数据中的自然群体。这些洞察有助于形成对数据集的全面理解,并为进一步的研究和决策提供了数据驱动的基础。尽管如此,模型评估和验证的重要性不容忽视,特别是在准备将这些模型应用于新数据或实际情境中时。

代码和数据

代码和完整报告

创作不易,希望大家多点赞关注评论!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1815169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何挑选优质的气膜建筑生产厂家—轻空间

随着气膜建筑在各个领域的应用越来越广泛&#xff0c;市场上出现了众多气膜建筑生产厂家。为了确保您选择到高质量的产品和可靠的服务&#xff0c;以下是一些在挑选气膜建筑生产厂家时需要考虑的重要因素。 1. 经验与专业知识 厂家的经验是评估其能力和信誉的重要指标。选择具有…

基于springboot实现影院订票系统项目【项目源码+论文说明】

基于springboot实现影院订票系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本影院订票系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在…

探索Chrome DevTools的高级技巧与隐藏功能

Chrome DevTools是网页开发者不可或缺的调试工具&#xff0c;它提供了丰富的功能&#xff0c;帮助开发者快速诊断和解决问题。然而&#xff0c;除了常见的功能&#xff0c;如元素检查、网络监控和JavaScript调试之外&#xff0c;DevTools还有许多不为人知的强大功能和技巧。本文…

【CS.PL】Lua 编程之道: 基础语法和数据类型 - 进度16%

2 初级阶段 —— 基础语法和数据类型 文章目录 2 初级阶段 —— 基础语法和数据类型2.0 关键字(keywords) &#x1f525;2.1 注释与标识符2.1.1 注释2.1.2 标识符 2.2 变量与赋值2.2.1 所有变量默认是全局变量 ≠ local, 有一个例外2.2.2 local变量是局部变量, 以end作为边界2.…

【网络编程】地址族与数据序列

IP是Internet Protocol简写&#xff0c;是为了收发网络数据而分配给计算机的值&#xff0c;端口号是为区分程序中创建的套接字而分配给套接字的序号。 网络地址分为两类&#xff1a;IPv4(4个字节地址族)&#xff0c;IPv6(6个字节地址族) 网络地址初始化&#xff0c;主要针对服…

俄语演讲开场白,柯桥外贸俄语培训

1、&#xff08;Разрешите мне&#xff09;от имени... 请允许我代表... 例&#xff1a; Разрешите мне от имени нашей компании поприветствовать всех членов вашей делегации…

QField测量功能

QField提供开箱即用的测量功能&#xff0c;可以灵活更改工程中测量距离和面积的单位。您可以在 "常规" 部分导航到 "工程" 菜单&#xff0c;并选择 "工程属性..." 完成此操作。 要启用测量工具&#xff0c;请打开主菜单并选择 测量工具 。 启…

ABAP调用JavaScript进行幂乘运算

ECC版本没有内置的ipow运算函数&#xff0c;所以需要进行幂乘运算的话&#xff0c;可以采用调用JavaScript的方式来实现&#xff0c;参考代码如下&#xff1a;

傻傻分不清!24下软考中项易混淆知识点合集

宝子们&#xff0c;在复习软考系统集成项目管理工程师中&#xff0c;是不是觉得有很多知识点含义比较相近&#xff0c;很多友友刚看的时候估计会像我一样迷迷糊糊的&#xff0c;作为一个软考初、中、高级通关的老鸟&#xff0c;在这里给大家整理了学习过程中易混淆的知识点&…

# 常用刀具钢材介绍

常用刀具钢材介绍 文章目录 常用刀具钢材介绍1、M390 钢材详细介绍1.1、关键特性1.2、应用 2、 VG10 钢材详细介绍2.1、关键特性2.2、应用 3、N690 钢材详细介绍3.1、关键特性3.2、应用 4、D2, D53, 和 7Cr13MoV 钢材对比4.1、D2 钢材4.2、D53 钢材4.3、7Cr13MoV 钢材4.4、对比…

Qt5.15.2+VS2019新加类出现无法解析的外部符号

Qt5.15.2VS2019新加类出现无法解析的外部符号&#xff1a; 原因&#xff1a;没有生成对应的moc文件&#xff0c;导致没生成对应的元对象。 解决方案&#xff1a;记事本打开工程vcxproj&#xff0c;把报错的文件ClInclude&#xff0c;改为QtMoc&#xff0c;解决问题 未修改前&…

【Java】如何根据应用场景选择合适的消息中间件?

一、问题解析 21.1 消息中间件的应用场景 消息中间件的应用场景主要有两个&#xff1a;异步解耦与削峰填谷。 我们首先通过电商平台用户注册送积分、送优惠券这个场景来理解异步解耦合。如果不使用消息中间件&#xff0c;电商平台送积分的实现也许是下图这个样子&#xff1a…

第五讲:51单片机+RA8889驱动控制彩屏 完整源码说明 【 源码v1.2 】

51单片机驱动控制彩屏系列讲座 第一讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏【 源码v1.0 】 第二讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏 代码移植介绍 第三讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏 代码的压缩&#xff08;Keil编译器&#xff09; 第…

【虚拟现实】二、主要的AR/VR硬件设备

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 2.1 微软HoloLens 微软HoloLens是一款领先的混合现实设备&#xff0c;结合了AR和VR的元素&#xff0c;允许用户…

如何安装和配置JDK?(详细步骤分享)

1、下载JDK 访问Oracle官方网站&#xff08;Oracle | Cloud Applications and Cloud Platform&#xff09;&#xff0c;选择适合您操作系统的JDK版本进行下载。建议下载最新的稳定版本。 打开Java&#xff0c;往下拉&#xff0c;找到Oracle JDK 打开后&#xff0c;选择右边的J…

论文Abstract怎么写

摘要是你要写的最后一项内容 步骤 首先先通读自己的文章&#xff0c;清楚自己写的文章是研究型还是技术型&#xff0c;适合描述性的摘要还是知识性。 描述性摘要内含研究目的、目标及方向等&#xff0c;不讲研究结果。字数大约100-200字。知识性摘要则包含研究结果&#xff0c…

日期类型的页面设计

此文章介绍一下日期类型的页面设计 目录 前言 一、设计图 1、星期周期 2、指定日期 3、日期范围 4、日期类型 二、存储逻辑 总结 前言 需求需要配置某天或者某个日期范围或者工作日等做什么事情&#xff0c;需要一个设计图&#xff0c;此文章用来记录设计图纸。 一、设计图 1…

EdgeView 4 for Mac(快速图像查看器) v4.7.5激活版

EdgeView 4是一款图片浏览和管理软件&#xff0c;它可以帮助你快速浏览、编辑和管理图片。EdgeView 4支持多种常见的图片格式&#xff0c;包括JPG、PNG、GIF、BMP、TIFF等&#xff0c;并且可以对图片进行旋转、裁剪、调整大小、添加水印等操作。此外&#xff0c;它还支持批量处…

心理咨询系统源码|心理咨询系统开发|心理咨询系统

心理咨询系统&#xff0c;作为一种集现代化科技与专业心理服务于一体的工具&#xff0c;正逐渐渗透到我们生活的各个角落。它不仅为个人提供了便捷的心理支持&#xff0c;还为企业和组织带来了全新的管理方式。下面&#xff0c;我们将深入探讨心理咨询系统的可应用范围及其带来…

【LLM之RAG】KG_RAG论文阅读笔记

研究背景 该研究集中于通过将生物医学知识图谱&#xff08;KG&#xff09;与大型语言模型&#xff08;LLMs&#xff09;集成&#xff0c;以增强LLMs在生物医学应用中的表现。研究的动机源于LLMs在生成精确内容方面面临的挑战&#xff0c;尤其是在像生物医学这样准确性至关重要…