zoukankan      html  css  js  c++  java
  • 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 values
    feature_vcounts <- function(df, f) {
      df %>%
        group_by_at(f) %>%
          count()}
    
    # method for binning values
    bin_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 distribution
    binom_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 value
    subgroup_df <- function(df,f, group) {
      filter(df,df[f]==group)}
    
    # calc the vector probability
    binom_prob_vec <- function(v, target) {
      sum(v == target)/length(v)}
    
    # sample from df
    binom_sample <- function(s,v)
      sample(v, size=s, replace=TRUE)
    
    # create the binomial sample distribution
    binom_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 percent
    to_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 -> numeric
    weight_diabetes$weight2 <- as.numeric(as.character(weight_diabetes$weight2))
    new_dim <- dim(weight_diabetes)
    
    # 2. Remove Null Weights and Weights over 400
    weight_diabetes <- na.omit(weight_diabetes)
    weight_diabetes <- filter(weight_diabetes, weight2 <= 400)
    
    # 3. Remove Diabetes Responses
    target <- c("Yes", "No")
    weight_diabetes <- filter(weight_diabetes, diabete3 %in% target)
    
    # 4. Add index and reorder
    weight_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]") + centered
    weight_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]") + centered
    grid.arrange(hist_weight, hist_log_weight, ncol = 2)


    对于Weight2,分布右偏,而Weight2的对数接近正态。由于数据的对数规范版本几乎是正常的单峰数据,因此可以将权重用于推断统计中的后续分析。

     

    ​ 
    女性参加者比男性参加者更多,其幅度大大超过美国的总人口。这可能表明抽样方法在性别抽样方面并非完全随机。但是,数据样本足够大,可以继续评估健康风险因素。

     

    ​年龄范围似乎在两端都偏向极端。

     

    ​在比较年龄和体重时,性别的体重分布似乎确实存在明显差异。男性似乎比女性重。

    还应注意,似乎还有一些成年患者体重不足50磅,许多患者体重约400磅。数据收集过程的未来分析应探索这些高低异常值是否是错误,或者它们是否反映出患有严重健康问题的患者。

    研究问题2:

    体重,年龄和/或性别与糖尿病相关吗?怎么样?(变量:性别,X_ageg5yr,weight2,diabete3)

     

    ​ 
    当观察样本中的女性和男性参与者时,报告的糖尿病比率非常相似。

     

    ​随着年龄的增长,直到80岁及更高年龄,糖尿病的报告比例也似乎会增加。年龄可能与糖尿病有某种程度的相关性。

     

    ​随着体重增加,所报告的糖尿病比例也增加。体重似乎与报告的糖尿病有很强的相关性,应进一步探讨。

    研究问题3:

    年龄,体重和糖尿病之间有关系吗?(变量:性别,X_ageg5yr,weight2,diabete3)

     

    ​ 
    报告患有糖尿病的男性和女性的体重分布均较高。男性的体重分布比女性重。

     

    ​这些箱线图描绘了一个更清晰的故事。报告患有糖尿病的患者似乎在每个年龄段都较重。报告患有糖尿病的年轻患者似乎比老年患者具有更大的体重范围。虽然尚不清楚年龄与糖尿病和体重之间的关系,但应进一步探讨这种关系。

    第4部分:结论

    从数据的初步探索中可以明显看出,某些功能具有比其他功能更强的相关性。体重与性别有关。性别似乎与体重无关。但是,糖尿病似乎与年龄有关,而与体重密切相关。

    如果您有任何疑问,请在下面发表评论。 

  • 相关阅读:
    Django
    python django框架学习
    Http Header里的Content-Type
    Python 头部 #!/usr/bin/python 和 #!/usr/bin/env python的区别
    关于“编译型语言”和“解释性语言”的区别
    Axure XMind整理交互思路
    异常处理
    re模块
    模块
    正则表达式**************************
  • 原文地址:https://www.cnblogs.com/tecdat/p/11988845.html
Copyright © 2011-2022 走看看