Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2022-10-05
R Markdown
View(PimaIndiansDiabetes)
ANALISIS DESCIRPTIVO
library(data.table) #para leer y escribir datos de forma rapida
library(dplyr) #para manipulación de datos
##
## Attaching package: 'dplyr'
options(scipen=999)
GRAFICA DE CORRELACION
library(corrplot)
head(round(M,2))
Visualizando el correlograma
Como círculo
corrplot(M, method="circle")
Como pastel
corrplot(M, method="pie")
Como color
corrplot(M, method="color")
Como número
corrplot(M, method="number")
MATRIZ DE COVARIANZA
cov(M)
##
## Naive Bayes Classifier for Discrete Predictors
##
## Call:
## naiveBayes.default(x = X, y = Y, laplace = laplace)
##
## A-priori probabilities:
## Y
## neg pos
## 0.6510417 0.3489583
##
## Conditional probabilities:
## pregnant
## Y [,1] [,2]
## neg 3.298000 3.017185
## pos 4.865672 3.741239
##
## glucose
## Y [,1] [,2]
## neg 109.9800 26.14120
## pos 141.2575 31.93962
##
## pressure
## Y [,1] [,2]
## neg 68.18400 18.06308
## pos 70.82463 21.49181
##
## triceps
## Y [,1] [,2]
## neg 19.66400 14.88995
## pos 22.16418 17.67971
##
## insulin
## Y [,1] [,2]
## neg 68.7920 98.86529
## pos 100.3358 138.68912
##
## mass
## Y [,1] [,2]
## neg 30.30420 7.689855
## pos 35.14254 7.262967
##
## pedigree
## Y [,1] [,2]
## neg 0.429734 0.2990853
## pos 0.550500 0.3723545
##
## age
## Y [,1] [,2]
## neg 31.19000 11.66765
## pos 37.06716 10.96825
Summary
summary(fit)
a<-modelo<-diabetes~.
summary(a)
Resumen el ajuste
print(fit)
##
## Naive Bayes Classifier for Discrete Predictors
##
## Call:
## naiveBayes.default(x = X, y = Y, laplace = laplace)
##
## A-priori probabilities:
## Y
## neg pos
## 0.6510417 0.3489583
##
## Conditional probabilities:
## pregnant
## Y [,1] [,2]
## neg 3.298000 3.017185
## pos 4.865672 3.741239
##
## glucose
## Y [,1] [,2]
## neg 109.9800 26.14120
## pos 141.2575 31.93962
##
## pressure
## Y [,1] [,2]
## neg 68.18400 18.06308
## pos 70.82463 21.49181
##
## triceps
## Y [,1] [,2]
## neg 19.66400 14.88995
## pos 22.16418 17.67971
##
## insulin
## Y [,1] [,2]
## neg 68.7920 98.86529
## pos 100.3358 138.68912
##
## mass
## Y [,1] [,2]
## neg 30.30420 7.689855
## pos 35.14254 7.262967
##
## pedigree
## Y [,1] [,2]
## neg 0.429734 0.2990853
## pos 0.550500 0.3723545
##
## age
## Y [,1] [,2]
## neg 31.19000 11.66765
## pos 37.06716 10.96825
Predicciones
predictions <- predict(fit, PimaIndiansDiabetes[,1:8])
predictions
## [1] pos neg pos neg pos neg neg pos pos neg neg pos pos pos pos neg pos
neg
## [19] neg neg pos neg pos neg pos neg pos neg pos neg neg pos neg neg neg
neg
## [37] pos neg neg pos pos pos neg pos pos pos neg neg neg neg neg neg neg
pos
## [55] pos neg pos pos pos neg neg neg neg neg neg neg neg pos neg neg neg
neg
## [73] pos neg neg neg neg neg pos neg neg neg neg neg pos neg pos neg pos
neg
## [91] neg neg neg neg neg pos neg neg neg pos pos neg neg neg neg neg neg
neg
## [109] neg neg pos pos neg neg pos pos neg neg neg neg pos neg neg neg neg
neg
## [127] neg neg neg neg pos pos pos neg neg neg neg neg neg neg neg neg neg
neg
## [145] pos neg neg pos pos neg neg neg pos pos pos pos neg neg neg pos neg
neg
## [163] neg neg neg neg neg neg neg neg neg neg neg neg neg pos neg pos pos
pos
## [181] neg neg neg neg neg pos pos pos neg neg neg pos pos pos neg pos neg
neg
## [199] neg pos neg neg neg neg neg neg pos pos neg pos neg pos pos neg neg
pos
## [217] neg neg neg neg pos pos neg pos neg neg neg pos pos neg neg pos neg
neg
## [235] neg pos pos pos pos neg neg neg neg pos neg pos neg pos pos neg neg
neg
## [253] neg neg pos neg neg neg pos pos pos pos neg neg neg neg pos pos neg
neg
## [271] pos neg neg neg pos neg neg neg neg neg neg pos neg pos neg neg pos
pos
## [289] neg neg neg neg pos neg neg pos pos neg pos neg pos neg neg neg neg
neg
## [307] pos neg pos neg neg neg neg neg pos neg neg pos neg pos neg neg neg
pos
## [325] neg neg neg pos neg neg pos neg pos neg neg pos pos neg pos pos neg
neg
## [343] neg neg neg pos neg neg neg neg neg neg neg neg neg pos neg pos pos
pos
## [361] pos pos pos pos pos neg neg neg neg neg pos neg neg neg neg pos neg
neg
## [379] pos neg neg neg neg neg neg neg neg pos pos neg neg pos pos neg pos
pos
## [397] neg neg neg pos neg neg neg neg pos neg neg neg pos pos neg neg pos
neg
## [415] neg pos neg pos neg neg neg neg neg neg pos pos neg pos neg neg neg
neg
## [433] neg neg neg pos pos neg neg neg pos neg neg neg neg pos neg neg neg
neg
## [451] neg neg neg neg neg pos neg neg pos pos neg neg neg neg pos neg neg
neg
## [469] pos pos neg neg neg neg neg neg neg neg neg neg pos neg neg neg pos
pos
## [487] pos pos neg pos neg neg neg neg neg pos neg neg pos pos neg neg neg
neg
## [505] neg neg pos neg neg neg neg neg neg neg neg neg pos pos neg pos neg
neg
## [523] neg pos neg neg neg neg neg neg neg neg neg neg neg neg neg neg neg
pos
## [541] pos neg pos neg neg pos pos neg pos pos neg neg neg neg neg neg neg
neg
## [559] pos neg neg pos neg neg neg neg neg neg neg neg neg neg neg neg pos
neg
## [577] neg neg neg pos pos neg pos neg pos neg pos neg pos neg pos neg neg
pos
## [595] pos pos neg neg pos neg neg neg neg pos pos neg pos neg pos neg neg
pos
## [613] pos neg pos neg neg neg pos neg neg pos pos neg neg neg neg neg neg
neg
## [631] neg neg neg neg neg pos neg neg neg neg neg neg neg neg neg pos neg
pos
## [649] pos neg neg neg neg neg neg pos neg pos pos neg pos pos pos pos neg
neg
## [667] pos neg neg pos pos neg neg pos neg pos pos neg neg neg neg pos neg
neg
## [685] neg neg neg neg neg pos neg pos neg pos neg pos neg neg neg neg neg
neg
## [703] pos pos neg neg neg neg pos neg pos neg pos neg neg pos pos neg neg
neg
## [721] neg neg neg neg neg neg neg neg neg neg neg neg pos neg neg neg neg
neg
## [739] neg neg pos neg neg pos pos pos pos neg pos neg neg neg neg pos pos
pos
## [757] pos neg neg pos neg pos neg pos neg neg neg neg
## Levels: neg pos
CONVERSION DE DATOS
dataoriginal <- as.character(PimaIndiansDiabetes[,9])
datapredicha <- as.character(predictions)
##
## Attaching package: 'magrittr'
Creacion de un contador
contador <- (1:768)
Accuracy
table(predictions, PimaIndiansDiabetes$diabetes)
##
## predictions neg pos
## neg 421 104
## pos 79 164
Matriz de confusión
library(caret)
##
## Attaching package: 'caret'
layout(matrix(c(1,1,2)))
par(mar=c(2,2,2,2))
plot(c(100, 345), c(300, 450), type = "n", xlab="", ylab="", xaxt='n',
yaxt='n')
title('CONFUSION MATRIX', cex.main=2)
# crea la matriz
rect(150, 430, 240, 370, col='#3F97D0')
text(195, 435, 'Class1', cex=1.2)
rect(250, 430, 340, 370, col='#F7AD50')
text(295, 435, 'Class2', cex=1.2)
text(125, 370, 'Predicted', cex=1.3, srt=90, font=2)
text(245, 450, 'Actual', cex=1.3, font=2)
rect(150, 305, 240, 365, col='#F7AD50')
rect(250, 305, 340, 365, col='#3F97D0')
text(140, 400, 'Class1', cex=1.2, srt=90)
text(140, 335, 'Class2', cex=1.2, srt=90)
Train
set.seed(7)
trainControl <- trainControl(method="cv", number=5)
fit.nb <- train(diabetes~., data=PimaIndiansDiabetes, method="nb",
metric="Accuracy",
trControl=trainControl)
## Warning in FUN(X[[i]], ...): Numerical 0 probability for all classes with
## observation 1
Resumir el ajuste
print(fit.nb)
## Naive Bayes
##
## 768 samples
## 8 predictor
## 2 classes: 'neg', 'pos'
##
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 614, 614, 615, 614, 615
## Resampling results across tuning parameters:
##
## usekernel Accuracy Kappa
## FALSE 0.7564553 0.4510005
## TRUE 0.7564978 0.4452698
##
## Tuning parameter 'fL' was held constant at a value of 0
## Tuning
## parameter 'adjust' was held constant at a value of 1
## Accuracy was used to select the optimal model using the largest value.
## The final values used for the model were fL = 0, usekernel = TRUE and
adjust
## = 1.
Predicto
nb <- naiveBayes(diabetes~ ., data= PimaIndiansDiabetes)
Se emplea type= ‘raw’ para sacar las probabilidades de que cada sujeto sea SÍ
churn O NO churn.
nb_predict<-predict(nb, PimaIndiansDiabetes, type = 'raw')[,2]
plot(nb_predict~PimaIndiansDiabetes$diabetes)
confusion<-function(real,scoring,umbral){
conf<-table(real,scoring>=umbral)
if(ncol(conf)==2) return(conf) else return(NULL)
}
umbrales<-function(real,scoring){
umbrales<-
data.frame(umbral=rep(0,times=19),acierto=rep(0,times=19),precision=rep(0,tim
es=19),cobertura=rep(0,times=19),F1=rep(0,times=19))
cont <- 1
for (cada in seq(0.05,0.95,by = 0.05)){
datos<-metricas(confusion(real,scoring,cada))
registro<-c(cada,datos)
umbrales[cont,]<-registro
cont <- cont + 1
}
return(umbrales)
}
umb_nb<-umbrales(PimaIndiansDiabetes$diabetes,nb_predict)
umb_nb
## [1] 0.2
confusion(PimaIndiansDiabetes$diabetes,nb_predict,umbral_final_nb)
##
## real FALSE TRUE
## neg 342 158
## pos 54 214
nb_metricas<-filter(umb_nb,umbral==umbral_final_nb)
nb_metricas
auc<-function(prediction){
a<-performance(prediction,'auc')
return(a@y.values[[1]])
}
Visualizamos la ROC
roc(nb_prediction)
Particiones de training (70%) y test (30%)
Métricas definitivas
nb_metricas<-cbind(nb_metricas,AUC=round(auc(nb_prediction),2)*100)
print(t(nb_metricas))
## [,1]
## umbral 0.20000
## acierto 72.39583
## precision 57.52688
## cobertura 79.85075
## F1 66.87500
## AUC 82.00000
Referencias
https://rpubs.com/AdSan-R/Rlog_NB_ChurnBank