R語言在BRFSS數(shù)據(jù)中可視化分析探索糖尿病的影響因素
原文鏈接:http://tecdat.cn/?p=9227
?
數(shù)據(jù)集:行為危險(xiǎn)因素監(jiān)視系統(tǒng)數(shù)據(jù)
摘要:該數(shù)據(jù)集是來自全美約40萬份與健康相關(guān)主題的問卷調(diào)查。BRFSS始于1980年代,并已通過問卷調(diào)查在美國用于監(jiān)測普遍的疾病。該研究是追溯性的,而不是設(shè)計(jì)性的實(shí)驗(yàn),因此盡管可以推斷出相關(guān)性,但不能因果關(guān)系。
數(shù)據(jù)集中的特征既是連續(xù)的又是分類的。
目標(biāo):探索性別,體重和年齡之間的相關(guān)性
?
第0部分:設(shè)置
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部分:數(shù)據(jù)
導(dǎo)入和過濾數(shù)據(jù)以僅包括與糖尿病,性別,體重和年齡有關(guān)的重要特征。
# 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歲
數(shù)據(jù)看起來很簡單,僅包含該項(xiàng)目所需的功能。因?yàn)閿?shù)據(jù)需要匿名,所以年齡范圍是特定年齡的安全替代方案。年齡范圍將用作此數(shù)據(jù)集的分類信息。
?
?
第2部分:研究問題
研究問題1:
性別,體重和年齡之間有相關(guān)性嗎?(變量:性別,weight2,X_ageg5yr)
由于性別是生物識(shí)別技術(shù)中的關(guān)鍵變量,因此探討性別是否可能與其他變量相關(guān)很重要。在這種情況下,我們正在研究性別是否與體重相關(guān)。
研究問題2:
性別或年齡與糖尿病相關(guān)嗎?怎么樣?(變量:性別,X_ageg5yr,weight2,diabete3)
該探索性項(xiàng)目的目標(biāo)是檢查體重/性別/年齡是否與糖尿病相關(guān)。了解任何相關(guān)性可能有助于根據(jù)患者的性別和體重告知患者患糖尿病的可能性。
研究問題3:
年齡,體重和糖尿病之間有關(guān)系嗎?(變量:性別,X_ageg5yr,weight2,diabete3)
為了進(jìn)一步探討與糖尿病的可能相關(guān)性,我們還將研究四個(gè)變量之間的關(guān)系。
?
第3部分:探索性數(shù)據(jù)分析
研究問題1:
性別,體重和年齡之間有相關(guān)性嗎?(變量:性別,weight2,X_ageg5yr)
首先檢查數(shù)據(jù)的分布很重要。性別是二元分類的,因此我們將用條形圖形象化它的分布。
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)

對(duì)于Weight2,分布右偏,而Weight2的對(duì)數(shù)接近正態(tài)。由于數(shù)據(jù)的對(duì)數(shù)規(guī)范版本幾乎是正常的單峰數(shù)據(jù),因此可以將權(quán)重用于推斷統(tǒng)計(jì)中的后續(xù)分析。

?
女性參加者比男性參加者更多,其幅度大大超過美國的總?cè)丝?。這可能表明抽樣方法在性別抽樣方面并非完全隨機(jī)。但是,數(shù)據(jù)樣本足夠大,可以繼續(xù)評(píng)估健康風(fēng)險(xiǎn)因素。
?

年齡范圍似乎在兩端都偏向極端。

在比較年齡和體重時(shí),性別的體重分布似乎確實(shí)存在明顯差異。男性似乎比女性重。
還應(yīng)注意,似乎還有一些成年患者體重不足50磅,許多患者體重約400磅。數(shù)據(jù)收集過程的未來分析應(yīng)探索這些高低異常值是否是錯(cuò)誤,或者它們是否反映出患有嚴(yán)重健康問題的患者。
研究問題2:
體重,年齡和/或性別與糖尿病相關(guān)嗎?怎么樣?(變量:性別,X_ageg5yr,weight2,diabete3)

?
當(dāng)觀察樣本中的女性和男性參與者時(shí),報(bào)告的糖尿病比率非常相似。

隨著年齡的增長,直到80歲及更高年齡,糖尿病的報(bào)告比例也似乎會(huì)增加。年齡可能與糖尿病有某種程度的相關(guān)性。

隨著體重增加,所報(bào)告的糖尿病比例也增加。體重似乎與報(bào)告的糖尿病有很強(qiáng)的相關(guān)性,應(yīng)進(jìn)一步探討。
研究問題3:
年齡,體重和糖尿病之間有關(guān)系嗎?(變量:性別,X_ageg5yr,weight2,diabete3)

?
報(bào)告患有糖尿病的男性和女性的體重分布均較高。男性的體重分布比女性重。

這些箱線圖描繪了一個(gè)更清晰的故事。報(bào)告患有糖尿病的患者似乎在每個(gè)年齡段都較重。報(bào)告患有糖尿病的年輕患者似乎比老年患者具有更大的體重范圍。雖然尚不清楚年齡與糖尿病和體重之間的關(guān)系,但應(yīng)進(jìn)一步探討這種關(guān)系。
第4部分:結(jié)論
從數(shù)據(jù)的初步探索中可以明顯看出,某些功能具有比其他功能更強(qiáng)的相關(guān)性。體重與性別有關(guān)。性別似乎與體重?zé)o關(guān)。但是,糖尿病似乎與年齡有關(guān),而與體重密切相關(guān)。