R语言在BRFSS数据中可视化分析探索糖尿病的影响因素
原文链接:http://tecdat.cn/?p=9227
数据集:行为危险因素监视系统数据 摘要:该数据集是来自全美约40万份与健康相关主题的问卷调查。BRFSS始于1980年代,并已通过问卷调查在美国用于监测普遍的疾病。该研究是追溯性的,而不是设计性的实验,因此尽管可以推断出相关性,但不能因果关系。
数据集中的特征既是连续的又是分类的。 目标:探索性别,体重和年龄之间的相关性
第0部分:设置
library(ggplot2)library(dplyr)library(Rgraphviz)library(knitr)library(grid)library(gridExtra)
load("brfss2013.RData")
# group and count a feature with discrete valuesfeature_vcounts <- function(df, f) { df %>% group_by_at(f) %>% count()}# method for binning valuesbin_min_sample <- function(p) { n = 10 a = 10/p b = 10/(1-p) max(c(a,b))}# create a new df for simulating binom probability distributionbinom_prob_df <- function(df, f, target) { new_df <- feature_vcounts(df,f) new_df$n[new_df[f] == target]/sum(new_df$n)}# filtering df with subgroup valuesubgroup_df <- function(df,f, group) { filter(df,df[f]==group)}# calc the vector probabilitybinom_prob_vec <- function(v, target) { sum(v == target)/length(v)}# sample from dfbinom_sample <- function(s,v) sample(v, size=s, replace=TRUE)# create the binomial sample distributionbinom_sample_dist <- function(df,f,target) { sample_dist <- c() for (i in 1:10001) { prob <- binom_prob_vec(binom_sample(100,df[,f]),target) sample_dist <- append(sample_dist,prob)} return(sample_dist)}# convert decimal to percentto_percent <- function(pvalue) { paste(round(pvalue*100,digits= 2),"%",sep="")}
第1部分:数据
导入和过滤数据以仅包括与糖尿病,性别,体重和年龄有关的重要特征。
# Import original file:orig_dim <- dim(brfss2013)# Select only relevant features:weight_diabetes <- brfss2013 %>% select(sex, X_ageg5yr, weight2,diabete3)# ------------------Cleaning data------------------# 1.Weight strings -> numericweight_diabetes$weight2 <- as.numeric(as.character(weight_diabetes$weight2))new_dim <- dim(weight_diabetes)# 2. Remove Null Weights and Weights over 400weight_diabetes <- na.omit(weight_diabetes)weight_diabetes <- filter(weight_diabetes, weight2 <= 400)# 3. Remove Diabetes Responsestarget <- c("Yes", "No")weight_diabetes <- filter(weight_diabetes, diabete3 %in% target)# 4. Add index and reorderweight_diabetes$index <- seq.int(nrow(weight_diabetes))weight_diabetes <- weight_diabetes[c(4,3,1,2)]clean_dim <- dim(weight_diabetes)# Show data:kable(head(weight_diabetes,n=5), caption="Diabetes Data Set",padding=0, format = "markdown",align="l")
糖尿病 |
重量 |
性别 |
X_ageg5yr |
---|---|---|---|
没有 |
250 |
女 |
60至64岁 |
没有 |
127 |
女 |
50至54岁 |
没有 |
160 |
女 |
55至59岁 |
没有 |
128 |
女 |
60至64岁 |
没有 |
265 |
男 |
65至69岁 |
数据看起来很简单,仅包含该项目所需的功能。因为数据需要匿名,所以年龄范围是特定年龄的安全替代方案。年龄范围将用作此数据集的分类信息。
第2部分:研究问题
研究问题1:
性别,体重和年龄之间有相关性吗?(变量:性别,weight2,X_ageg5yr)
由于性别是生物识别技术中的关键变量,因此探讨性别是否可能与其他变量相关很重要。在这种情况下,我们正在研究性别是否与体重相关。
研究问题2:
性别或年龄与糖尿病相关吗?怎么样?(变量:性别,X_ageg5yr,weight2,diabete3)
该探索性项目的目标是检查体重/性别/年龄是否与糖尿病相关。了解任何相关性可能有助于根据患者的性别和体重告知患者患糖尿病的可能性。
研究问题3:
年龄,体重和糖尿病之间有关系吗?(变量:性别,X_ageg5yr,weight2,diabete3)
为了进一步探讨与糖尿病的可能相关性,我们还将研究四个变量之间的关系。
第3部分:探索性数据分析
研究问题1:
性别,体重和年龄之间有相关性吗?(变量:性别,weight2,X_ageg5yr)
首先检查数据的分布很重要。性别是二元分类的,因此我们将用条形图形象化它的分布。
centered <- theme(plot.title = element_text(hjust = 0.5))hist_weight <- ggplot(data=weight_diabetes,aes(weight2, fill=weight2))+ geom_histogram(fill='salmon',color='white') + ggtitle("Histogram [Weight]") + centeredweight_diabetes$log_weight <- log(weight_diabetes$weight2)hist_log_weight <- ggplot(data=weight_diabetes,aes(log_weight, fill=log_weight))+ geom_histogram(fill='mediumturquoise',color='white') + ggtitle("Histogram [Log_Weight]") + centeredgrid.arrange(hist_weight, hist_log_weight, ncol = 2)
对于Weight2,分布右偏,而Weight2的对数接近正态。由于数据的对数规范版本几乎是正常的单峰数据,因此可以将权重用于推断统计中的后续分析。
女性参加者比男性参加者更多,其幅度大大超过美国的总人口。这可能表明抽样方法在性别抽样方面并非完全随机。但是,数据样本足够大,可以继续评估健康风险因素。
年龄范围似乎在两端都偏向极端。
在比较年龄和体重时,性别的体重分布似乎确实存在明显差异。男性似乎比女性重。 还应注意,似乎还有一些成年患者体重不足50磅,许多患者体重约400磅。数据收集过程的未来分析应探索这些高低异常值是否是错误,或者它们是否反映出患有严重健康问题的患者。
研究问题2:
体重,年龄和/或性别与糖尿病相关吗?怎么样?(变量:性别,X_ageg5yr,weight2,diabete3)
当观察样本中的女性和男性参与者时,报告的糖尿病比率非常相似。
随着年龄的增长,直到80岁及更高年龄,糖尿病的报告比例也似乎会增加。年龄可能与糖尿病有某种程度的相关性。
随着体重增加,所报告的糖尿病比例也增加。体重似乎与报告的糖尿病有很强的相关性,应进一步探讨。
研究问题3:
年龄,体重和糖尿病之间有关系吗?(变量:性别,X_ageg5yr,weight2,diabete3)
报告患有糖尿病的男性和女性的体重分布均较高。男性的体重分布比女性重。
这些箱线图描绘了一个更清晰的故事。报告患有糖尿病的患者似乎在每个年龄段都较重。报告患有糖尿病的年轻患者似乎比老年患者具有更大的体重范围。虽然尚不清楚年龄与糖尿病和体重之间的关系,但应进一步探讨这种关系。
第4部分:结论
从数据的初步探索中可以明显看出,某些功能具有比其他功能更强的相关性。体重与性别有关。性别似乎与体重无关。但是,糖尿病似乎与年龄有关,而与体重密切相关。
- dedecms建的网站如何去掉/index.html
- WPF ContextMenu的使用
- Json的序列化与反序列化以及乱入的k_BackingField
- 亚马逊面试题
- VisualStudio 怎么使用Visual Leak Detector
- Cannot find module 'socket.io'
- 【学术】独热编码如何在Python中排列数据?
- 比特币的私钥【区块链生存训练】
- Unity3D学习笔记第一课
- Extjs4处理后台json数据中日期和时间的方法
- 机器学习:Python测试线性可分性的方法
- Java 机器学习库Smile实战(一)SVM
- 交易Transaction【区块链生存训练】
- 马尔可夫链文本生成的简单应用:不足20行的Python代码生成鸡汤文
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- dotnet OpenXML 元素 cNvPr NonVisual Drawing Properties 的属性作用
- Java 对象相关面试题
- 【每日一题】【vue2源码学习】VUE中模版编译原理
- 【每日一题】【vue2源码学习】对VUE响应式数据的理解
- ApacheCN 深度学习译文集 2020.9
- 当Docker遇到Intellij IDEA,再次解放了生产力~
- 基于NPOI的Excel导入导出类库
- 在tinycolinux32上装tinycolinux64 kernel和toolchain
- 通过链下签名授权实现更少 Gas 的 ERC20代币
- 在dbcolinux上安装cozy-light
- 在群晖docker上装elmlang可视调试编码器ellie
- Elasticsearch:inverted index,doc_values及source
- 在群晖docker上构建私有云IDE和devops构建链
- 小白学PyTorch | 14 tensorboardX可视化教程
- Apache Solr 漏洞复现