关于数据挖掘:R语言可视化探索BRFSS数据并逻辑回归Logistic回归预测中风附代码数据

3次阅读

共计 5985 个字符,预计需要花费 15 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=9195

最近咱们被客户要求撰写对于逻辑回归的钻研报告,包含一些图形和统计输入。

行为危险因素监视系统(BRFSS)是美国的年度电话考察。BRFSS 旨在辨认成年人口中的危险因素并报告新兴趋势

加载包

library(ggplot2)

载入材料

load("brfss2013.RData")

第 1 局部:对于数据

例如,询问受访者饮食和每周的体育锻炼,艾滋病毒 / 艾滋病情况,可能的烟草应用,免疫接种,健康状况,衰弱天数 - 与衰弱相干的生存品质,取得医疗保健,睡眠不足,高血压意识,胆固醇意识,慢性健康状况,饮酒,水果和蔬菜生产,关节炎累赘和安全带应用。

数据采集:

数据收集过程在 brfss_codebook 中进行了阐明。通过进行座机电话考察和基于蜂窝电话的考察,从美国所有 50 个州,哥伦比亚特区,波多黎各,关岛和美属萨摩亚,密克罗尼西亚联邦和帕劳收集了数据。固定电话样本已应用了不成比例的分层抽样(DSS),并且随机抉择了蜂窝电话受访者,每个受访者具备雷同的抉择概率。咱们正在解决的数据集蕴含 330 个变量,2013 年共进行 491、775 次观测。缺失值用“NA”示意。

推广性:

样本数据应使咱们可能推广到感兴趣的人群。它是对 491,775 名 18 岁以上美国成年人的考察。它基于大量分层的随机样本。潜在偏见与无回应,不残缺的访谈,价值观缺失和便当偏见无关。

因果关系:

BRFSS 是一项察看钻研,只能建设变量之间的相关性 / 关联性,因而无奈建设因果关系。

第 2 局部:钻研问题

钻研问题 1:

在过来 30 天内,身心健康状况不佳的天数散布是否因性别而异?

钻研问题 2:

受访者承受采访的月份与受访者自我报告的衰弱感知之间是否存在关联?

钻研问题 3:

支出和医疗保险之间有关联吗?

钻研问题 4:

吸烟,饮酒,胆固醇,血压,体重和中风之间是否有任何关系?最终,我想看看是否能够通过上述变量预测中风。

第 3 局部:探索性数据分析

钻研问题 1:

ggplot(aes(x=physhlth, fill=sex), data = brfss2013[! is.na(brfss2013 $ sex), ])  + 
  geom_histogram(bins=30, position = position_dodge())  +  ggtitle('Number of Days Physical Health not Good in the Past 30 Days')

 


点击题目查阅往期内容

R 语言逻辑回归(Logistic Regression)、回归决策树、随机森林信用卡守约剖析信贷数据集

左右滑动查看更多

01

02

03

04

ggplot(aes(x=menthlth, fill=sex), data=brfss2013[! is.na(brfss2013 $ sex), ])  + 
  geom_histogram(bins=30, position = position_dodge())  +  ggtitle('Number of Days Mental Health not Good in the Past 30 Days')

 

ggplot(aes(x=poorhlth, fill=sex), data=brfss2013[! is.na(brfss2013 $ sex), ])  + 
  geom_histogram(bins=30, position = position_dodge())  +  ggtitle('Number of Days with Poor Physical Or Mental Health in the Past 30 Days')

 

summary(brfss2013 $ sex)
##  Male  Female   NA's 
##201313 290455      7

以上三个数字显示了过来 30 天内男性和女性对身材,精力和衰弱状况不佳的天数做出反馈的数据分布。咱们能够看到,女性受访者比男性受访者要多得多。

钻研问题 2:

 

我试图找出人们在不同月份对健康状况的反馈是否不同。例如,人们是否更有可能说本人在秋季或冬季身体健康?

钻研问题 3:  

 

一般而言,高支出受访者比低收入受访者更有可能取得医疗保健。

钻研问题 4:

为了答复这个问题,我将应用以下变量:

  • smoke100:抽至多 100 支香烟
  • avedrnk2:过来 30 天每天均匀含酒精饮料
  • bphigh4:已经血压过高
  • tellhi2:高胆固醇血症
  • weight2:报告的磅数
  • cvdstrk3:已经被诊断为中风

首先,将上述变量转换为数字,并查看这些数字变量之间的相关性。


corr.matrix  <- cor(selected_brfss)
corrplot(corr.matrix, main="\n\nCorrelation Plot of Smoke, Alcohol, Blood pressure, Cholesterol, and Weight", method="number")

 

仿佛没有任何两个数字变量具备很强的相关性。

Logistic 回归预测中风

将答案“是,但女性仅在怀孕期间告知”和“通知临界点或高血压前”答复为“是”。

将“NA”值替换为“否”。

stroke $ bphigh4  <- replace(stroke $ bphigh4, which(is.na(stroke $ bphigh4)), "No")
stroke $ toldhi2  <- replace(stroke $ toldhi2, which(is.na(stroke $ toldhi2)), "No")
stroke $ cvdstrk3  <- replace(stroke $ cvdstrk3, which(is.na(stroke $ cvdstrk3)), "No")
stroke $ smoke100  <- replace(stroke $ smoke100, which(is.na(stroke $ smoke100)), 'No')

均匀替换“NA”值。

mean(stroke $ avedrnk2,na.rm = T)
##[1] 2.209905
stroke $ avedrnk2  <- replace(stroke $ avedrnk2, which(is.na(stroke $ avedrnk2)), 2)

看一下将用于建模的数据。

head(stroke)
summary(stroke)
##   bphigh4 toldhi2 cvdstrk3 weight2 smoke100 avedrnk2
##1     Yes     Yes       No     154      Yes        2
##2      No      No       No      30       No        2
##3      No      No       No      63      Yes        4
##4      No     Yes       No      31       No        2
##5     Yes      No       No     169      Yes        2
##6     Yes     Yes       No     128       No        2
##  bphigh4      toldhi2      cvdstrk3        weight2       smoke100    
## No :284107   Yes:183501   Yes: 20391   Min.   :  1.00   Yes:215201  
## Yes:207668   No :308274   No :471384   1st Qu.: 43.00   No :276574  
##                                        Median : 73.00               
##                                        Mean   : 80.22               
##                                        3rd Qu.:103.00               
##                                        Max.   :570.00               
##    avedrnk2     
## Min.   : 1.000  
## 1st Qu.: 2.000  
## Median : 2.000  
## Mean   : 2.099  
## 3rd Qu.: 2.000  
## Max.   :76.000

二进制后果。
在整顿和清理数据之后,当初咱们能够拟合模型。

Logistic 回归模型拟合


summary(model)
##Call:
##glm(formula = cvdstrk3 ~ ., family = binomial(link = "logit"), 
##    data = train)

##Deviance Residuals: 
##    Min       1Q   Median       3Q      Max  
##-0.5057  -0.3672  -0.2109  -0.1630   3.2363  

##Coefficients:
##              Estimate Std. Error  z value Pr(>|z|)    
##(Intercept) -3.2690106  0.0268240 -121.869  < 2e-16 ***
##bphigh4Yes   1.3051850  0.0193447   67.470  < 2e-16 ***
##toldhi2No   -0.5678048  0.0171500  -33.108  < 2e-16 ***
##weight2     -0.0009628  0.0001487   -6.476 9.41e-11 ***
##smoke100No  -0.3990598  0.0163896  -24.348  < 2e-16 ***
##avedrnk2    -0.0274511  0.0065099   -4.217 2.48e-05 ***
##---
##Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

##(Dispersion parameter for binomial family taken to be 1)

##    Null deviance: 136364  on 389999  degrees of freedom
##Residual deviance: 126648  on 389994  degrees of freedom
##AIC: 126660

##Number of Fisher Scoring iterations: 6

解释我的逻辑回归模型的后果:

所有变量均具备统计学意义。

  • 所有其余变量都相等,被告知血压升高,更可能产生中风。
  • 预测变量的负系数 -tellhi2No 示意,所有其余变量相等,没有被告知血液中胆固醇程度较高,则产生中风的可能性较小。
  • 每单位分量扭转,具备冲程(绝对于无冲程)的对数几率升高 0.00096。
  • 至多抽 100 支香烟不抽烟,中风的可能性较小。
  • 在过来 30 天内,每天均匀含酒精饮料减少 1 个单位,中风的对数几率升高 0.027。
anova(model, test="Chisq")
##Analysis of Deviance Table

##Model: binomial, link: logit

##Response: cvdstrk3

##Terms added sequentially (first to last)


##         Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
##NULL                    389999     136364              
##bphigh4   1   7848.6    389998     128516 < 2.2e-16 ***
##toldhi2   1   1230.1    389997     127285 < 2.2e-16 ***
##weight2   1     33.2    389996     127252 8.453e-09 ***
##smoke100  1    584.5    389995     126668 < 2.2e-16 ***
##avedrnk2  1     19.9    389994     126648 7.958e-06 ***
##---
##Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

剖析偏差表,能够看到一次增加每个变量时偏差的降落。增加 bphigh4,tellhi2,smoke100 会大大减少残留偏差。只管其余变量 weight2 和 avedrnk2 都具备较低的 p 值,但它们仿佛对模型的改良较少。

评估模型的预测能力 “

##[1] "Accuracy 0.961296978629329

测试安装上的 0.96 精度是十分好的后果。

绘制 ROC 曲线并计算 AUC(曲线下的面积)


auc

##[1] 0.7226642

最初一点,当咱们剖析健康状况监测数据时,咱们必须意识到自我报告的患病率可能会有偏差,因为受访者可能不晓得其危险情况。因而,为了取得更准确的预计,钻研人员正在应用实验室测试以及自我报告的数据。

点击文末 “浏览原文”

获取全文残缺代码数据资料。

本文选自《R 语言可视化摸索 BRFSS 数据并逻辑回归 Logistic 回归预测中风》。

点击题目查阅往期内容

PYTHON 用户散失数据挖掘:建设逻辑回归、XGBOOST、随机森林、决策树、反对向量机、奢侈贝叶斯和 KMEANS 聚类用户画像
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析
PYTHON 集成机器学习:用 ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜寻超参数优化
R 语言集成模型:晋升树 boosting、随机森林、束缚最小二乘法加权均匀模型交融剖析工夫序列数据
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析
R 语言用主成分 PCA、逻辑回归、决策树、随机森林剖析心脏病数据并高维可视化
R 语言基于树的办法:决策树,随机森林,Bagging,加强树
R 语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
spss modeler 用决策树神经网络预测 ST 的股票
R 语言中应用线性模型、回归决策树主动组合特色因子程度
R 语言中自编基尼系数的 CART 回归决策树的实现
R 语言用 rle,svm 和 rpart 决策树进行工夫序列预测
python 在 Scikit-learn 中用决策树和随机森林预测 NBA 获胜者
python 中应用 scikit-learn 和 pandas 决策树进行 iris 鸢尾花数据分类建模和穿插验证
R 语言里的非线性模型:多项式回归、部分样条、平滑样条、狭义相加模型 GAM 剖析
R 语言用规范最小二乘 OLS,狭义相加模型 GAM,样条函数进行逻辑回归 LOGISTIC 分类
R 语言 ISLR 工资数据进行多项式回归和样条回归剖析
R 语言中的多项式回归、部分回归、核平滑和平滑样条回归模型
R 语言用泊松 Poisson 回归、GAM 样条曲线模型预测骑自行车者的数量
R 语言分位数回归、GAM 样条曲线、指数平滑和 SARIMA 对电力负荷工夫序列预测 R 语言样条曲线、决策树、Adaboost、梯度晋升 (GBM) 算法进行回归、分类和动静可视化
如何用 R 语言在机器学习中建设集成模型?
R 语言 ARMA-EGARCH 模型、集成预测算法对 SPX 理论稳定率进行预测在 python 深度学习 Keras 中计算神经网络集成模型 R 语言 ARIMA 集成模型预测工夫序列剖析 R 语言基于 Bagging 分类的逻辑回归 (Logistic Regression)、决策树、森林剖析心脏病患者
R 语言基于树的办法:决策树,随机森林,Bagging,加强树
R 语言基于 Bootstrap 的线性回归预测置信区间预计办法
R 语言应用 bootstrap 和增量法计算狭义线性模型(GLM)预测置信区间
R 语言样条曲线、决策树、Adaboost、梯度晋升(GBM) 算法进行回归、分类和动静可视化
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析
R 语言随机森林 RandomForest、逻辑回归 Logisitc 预测心脏病数据和可视化剖析
R 语言用主成分 PCA、逻辑回归、决策树、随机森林剖析心脏病数据并高维可视化
Matlab 建设 SVM,KNN 和奢侈贝叶斯模型分类绘制 ROC 曲线
matlab 应用分位数随机森林(QRF)回归树检测异样值

正文完
 0