R语言实战大作业——糖尿病预测

浏览: 2993

0.数据探索

#0.读取数据并稍加了解

data0 <-read.csv("PimaIndiansDiabetes2.csv",T)#读入数据

head(data0)#查看前几行

dim(data0)#查看数据记录数与列数

str(data0)#查看数据类型

Clipboard Image.png


#1.缺失值探索

#列表显示缺失值概览

table(is.na(data0)) #缺失值个数

table(complete.cases(data0)) #缺失值记录数

#列表显示缺失值细看

library(mice)

md.pattern(data0)#最后一行汇总数据可以明显看到缺失值最多的变量是triceps & insulin

#图形探索缺失数据

library(VIM)

aggr(data0,prop=F,numbers=T)#从左边图表很容易观察到缺失值最多的变量是triceps & insulin,从右边图表可以直观看到缺失值的分布

Clipboard Image.png


Clipboard Image.png


 2.数据完善

#多重插补

dmy <- dummyVars(~.,data0)#将分类变量处理成哑变量

dmfp <- predict(dmy,data0)

head(dmfp)

imp <- mice(dmfp,m=5)#5重插补,生成5个无缺失数据集

fit <- with(imp,lm(diabetes.neg~preg.nt+glucose+pressure+triceps+insulin+mass+pedigree+age))#插补模型

#summary(fit)

pooled <- pool(fit)

summary(pooled)

dataimput <- complete(imp,action=2)#用第二个数据集

head(dataimput)

table(is.na(dataimput[,-1]))

 Clipboard Image.png


Clipboard Image.png

#随机森林插补

library(missForest)

f <- missForest(data0)

names(f)

data0all <- f$ximp

table(is.na(data0all))

Clipboard Image.png


3.数据分区

#用随机森林插补的数据做预测

index <-createDataPartition(data0all$diabetes,p=0.2,list=FALSE)

test <- data0all[index,]

train <- data0all[-index,]

Clipboard Image.png


4.建立模型及评估

#用朴素贝叶斯

library(e1071)

naiveBayes.model <-naiveBayes(diabetes~.,data=train)

tr_predict <-predict(naiveBayes.model,newdata=train)

te_predict <-predict(naiveBayes.model,newdata=test)

tabletr <-table(actual=train$diabetes,predict=tr_predict);tabletr

tablete <- table(actual=test$diabetes,predict=te_predict);tablete

Clipboard Image.png

#计算误差率

errtr <-paste0(round((sum(tabletr)-sum(diag(tabletr)))*100/sum(tabletr),2),"%");errtr

errte <-paste0(round((sum(tablete)-sum(diag(tablete)))*100/sum(tablete),2),"%");errte

Clipboard Image.png

可以看出用朴素贝叶斯算法预测的是否患糖尿病准确率在75%左右。

推荐 1
本文由 Agua 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

非常赞
Agua

Agua 回复 梁勇

被表扬了好开心!打算再完善一下!: )

要回复文章请先登录注册