#Insertar la base de datos Diabetes

diabetes_m=read.csv("https://raw.githubusercontent.com/VictorGuevaraP/Mineria-de-datos-2019-2/master/diabetes_m.csv",sep = ";")
diabetes_m<-diabetes_m[,2:10]
head(diabetes_m)
##   NumeroEmbarazos Concentrac.blucosa.plama Presión.arterial.diastólica
## 1               6                      148                          72
## 2               1                       85                          66
## 3               8                      183                          64
## 4               1                       89                          NA
## 5               0                      137                          40
## 6               5                      116                          74
##   Tríceps.espesor.del.pliegue.cutáneo X2.horas.suero.insulina
## 1                                  35                       0
## 2                                  29                       0
## 3                                   0                       0
## 4                                  23                      94
## 5                                  NA                     168
## 6                                   0                       0
##   Índice.de.masa.corporal Función.pedigrí.de.la.diabetes edad resultado
## 1                    33.6                          0.627   50  Positivo
## 2                    26.6                          0.351   31  Negativo
## 3                    23.3                          0.672   32  Positivo
## 4                    28.1                          0.167   21  Negativo
## 5                    43.1                          2.288   33  Positivo
## 6                    25.6                          0.201   30  Negativo
#Observar  los datos como minimo hasta el maximo de los valores
summary(diabetes_m)
##  NumeroEmbarazos  Concentrac.blucosa.plama Presión.arterial.diastólica
##  Min.   : 0.000   Min.   :  0.0            Min.   :  0.00             
##  1st Qu.: 1.000   1st Qu.: 99.0            1st Qu.: 62.00             
##  Median : 3.000   Median :117.0            Median : 72.00             
##  Mean   : 3.845   Mean   :120.9            Mean   : 69.05             
##  3rd Qu.: 6.000   3rd Qu.:140.2            3rd Qu.: 80.00             
##  Max.   :17.000   Max.   :199.0            Max.   :122.00             
##                                            NA's   :84                 
##  Tríceps.espesor.del.pliegue.cutáneo X2.horas.suero.insulina
##  Min.   : 0.00                       Min.   :  0.00         
##  1st Qu.: 0.00                       1st Qu.:  0.00         
##  Median :23.00                       Median : 24.00         
##  Mean   :20.41                       Mean   : 78.23         
##  3rd Qu.:32.00                       3rd Qu.:127.75         
##  Max.   :99.00                       Max.   :680.00         
##  NA's   :66                          NA's   :70             
##  Índice.de.masa.corporal Función.pedigrí.de.la.diabetes      edad      
##  Min.   : 0.00           Min.   :0.0780                 Min.   :21.00  
##  1st Qu.:27.30           1st Qu.:0.2437                 1st Qu.:24.00  
##  Median :32.00           Median :0.3725                 Median :29.00  
##  Mean   :31.99           Mean   :0.4719                 Mean   :33.24  
##  3rd Qu.:36.60           3rd Qu.:0.6262                 3rd Qu.:41.00  
##  Max.   :67.10           Max.   :2.4200                 Max.   :81.00  
##                                                                        
##     resultado  
##  Negativo:500  
##  Positivo:268  
##                
##                
##                
##                
## 
#Imputamos DMwR para usar el comando KNNIMPUTATION
library(DMwR)
library(nnet)
#Imputamos por KNNIMPUTATION(borra todos los NA)
diabetes1_m=knnImputation(diabetes_m)
#Observar  los datos como minimo hasta el maximo de los valores
summary(diabetes1_m)
##  NumeroEmbarazos  Concentrac.blucosa.plama Presión.arterial.diastólica
##  Min.   : 0.000   Min.   :  0.0            Min.   :  0.00             
##  1st Qu.: 1.000   1st Qu.: 99.0            1st Qu.: 63.02             
##  Median : 3.000   Median :117.0            Median : 71.21             
##  Mean   : 3.845   Mean   :120.9            Mean   : 68.94             
##  3rd Qu.: 6.000   3rd Qu.:140.2            3rd Qu.: 79.06             
##  Max.   :17.000   Max.   :199.0            Max.   :122.00             
##  Tríceps.espesor.del.pliegue.cutáneo X2.horas.suero.insulina
##  Min.   : 0.0                        Min.   :  0.00         
##  1st Qu.: 0.0                        1st Qu.:  0.00         
##  Median :23.0                        Median : 42.39         
##  Mean   :20.5                        Mean   : 78.57         
##  3rd Qu.:32.0                        3rd Qu.:126.55         
##  Max.   :99.0                        Max.   :680.00         
##  Índice.de.masa.corporal Función.pedigrí.de.la.diabetes      edad      
##  Min.   : 0.00           Min.   :0.0780                 Min.   :21.00  
##  1st Qu.:27.30           1st Qu.:0.2437                 1st Qu.:24.00  
##  Median :32.00           Median :0.3725                 Median :29.00  
##  Mean   :31.99           Mean   :0.4719                 Mean   :33.24  
##  3rd Qu.:36.60           3rd Qu.:0.6262                 3rd Qu.:41.00  
##  Max.   :67.10           Max.   :2.4200                 Max.   :81.00  
##     resultado  
##  Negativo:500  
##  Positivo:268  
##                
##                
##                
## 
#Se obtiene la muestra de DIABETES, separando un 70% y 30% respectivamente
muestra=sample(537,231)
#La muestra me permite obtener el TRAIN y TEST
train=diabetes1_m[-muestra,]
test=diabetes1_m[muestra,]
#Con el set.seed para inicializar el generador de números aleatorios 
set.seed(111)
#Evaluamos el campo resultado y con el "as.factor" con un vector numerico
diabetes1_m$resultado=as.factor(diabetes1_m$resultado)
train$resultado=as.factor(train$resultado)
test$resultado=as.factor(test$resultado)

modelo_diabe=nnet(resultado~.,data=train,size=50)
## # weights:  501
## initial  value 1024.337408 
## iter  10 value 323.055792
## iter  20 value 300.409765
## iter  30 value 287.354368
## iter  40 value 273.491587
## iter  50 value 258.518835
## iter  60 value 243.306240
## iter  70 value 230.276473
## iter  80 value 215.872276
## iter  90 value 212.515875
## iter 100 value 207.516118
## final  value 207.516118 
## stopped after 100 iterations
predichos_diabe=predict(modelo_diabe,test,type = "class")
predichos_diabe
##   [1] "Negativo" "Positivo" "Positivo" "Negativo" "Positivo" "Negativo"
##   [7] "Negativo" "Positivo" "Positivo" "Negativo" "Negativo" "Negativo"
##  [13] "Positivo" "Negativo" "Negativo" "Negativo" "Negativo" "Negativo"
##  [19] "Negativo" "Negativo" "Negativo" "Negativo" "Negativo" "Negativo"
##  [25] "Negativo" "Negativo" "Negativo" "Negativo" "Negativo" "Negativo"
##  [31] "Negativo" "Negativo" "Negativo" "Positivo" "Negativo" "Positivo"
##  [37] "Negativo" "Positivo" "Negativo" "Negativo" "Negativo" "Negativo"
##  [43] "Negativo" "Negativo" "Positivo" "Positivo" "Positivo" "Negativo"
##  [49] "Positivo" "Negativo" "Negativo" "Positivo" "Positivo" "Positivo"
##  [55] "Negativo" "Negativo" "Negativo" "Negativo" "Negativo" "Negativo"
##  [61] "Negativo" "Negativo" "Negativo" "Positivo" "Negativo" "Negativo"
##  [67] "Negativo" "Negativo" "Negativo" "Positivo" "Positivo" "Positivo"
##  [73] "Positivo" "Positivo" "Negativo" "Negativo" "Positivo" "Negativo"
##  [79] "Negativo" "Negativo" "Positivo" "Positivo" "Negativo" "Positivo"
##  [85] "Negativo" "Negativo" "Negativo" "Negativo" "Positivo" "Negativo"
##  [91] "Negativo" "Positivo" "Negativo" "Positivo" "Positivo" "Negativo"
##  [97] "Positivo" "Negativo" "Negativo" "Negativo" "Negativo" "Negativo"
## [103] "Negativo" "Positivo" "Positivo" "Positivo" "Positivo" "Negativo"
## [109] "Negativo" "Negativo" "Positivo" "Negativo" "Positivo" "Negativo"
## [115] "Negativo" "Positivo" "Positivo" "Positivo" "Negativo" "Negativo"
## [121] "Negativo" "Negativo" "Negativo" "Negativo" "Positivo" "Positivo"
## [127] "Negativo" "Negativo" "Negativo" "Negativo" "Negativo" "Positivo"
## [133] "Positivo" "Negativo" "Negativo" "Negativo" "Negativo" "Negativo"
## [139] "Positivo" "Positivo" "Negativo" "Negativo" "Positivo" "Negativo"
## [145] "Negativo" "Negativo" "Positivo" "Negativo" "Negativo" "Negativo"
## [151] "Positivo" "Positivo" "Negativo" "Negativo" "Negativo" "Negativo"
## [157] "Negativo" "Negativo" "Negativo" "Positivo" "Negativo" "Negativo"
## [163] "Negativo" "Negativo" "Positivo" "Negativo" "Positivo" "Positivo"
## [169] "Negativo" "Negativo" "Negativo" "Negativo" "Positivo" "Positivo"
## [175] "Negativo" "Negativo" "Negativo" "Negativo" "Negativo" "Negativo"
## [181] "Negativo" "Negativo" "Positivo" "Negativo" "Negativo" "Negativo"
## [187] "Negativo" "Negativo" "Positivo" "Negativo" "Negativo" "Negativo"
## [193] "Negativo" "Negativo" "Negativo" "Negativo" "Negativo" "Negativo"
## [199] "Negativo" "Negativo" "Negativo" "Positivo" "Negativo" "Negativo"
## [205] "Negativo" "Negativo" "Positivo" "Negativo" "Negativo" "Negativo"
## [211] "Negativo" "Negativo" "Negativo" "Negativo" "Positivo" "Negativo"
## [217] "Negativo" "Negativo" "Negativo" "Negativo" "Negativo" "Negativo"
## [223] "Negativo" "Negativo" "Negativo" "Negativo" "Negativo" "Negativo"
## [229] "Negativo" "Negativo" "Negativo"
comparando=as.data.frame(cbind(test$resultado, predichos_diabe))
fix(comparando)
table(test$resultado, predichos_diabe)
##           predichos_diabe
##            Negativo Positivo
##   Negativo      117       30
##   Positivo       53       31

#Caret: Incluye una serie de funciones que facilitan el uso de decenas #de métodos complejos de clasificación y regresión.

library(caret)
str(predichos_diabe)
##  chr [1:231] "Negativo" "Positivo" "Positivo" "Negativo" "Positivo" ...
predichos_diabe=as.factor(predichos_diabe)
indicadores_diabe=confusionMatrix(predichos_diabe,test$resultado)
indicadores_diabe
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction Negativo Positivo
##   Negativo      117       53
##   Positivo       30       31
##                                           
##                Accuracy : 0.6407          
##                  95% CI : (0.5752, 0.7026)
##     No Information Rate : 0.6364          
##     P-Value [Acc > NIR] : 0.47522         
##                                           
##                   Kappa : 0.1752          
##                                           
##  Mcnemar's Test P-Value : 0.01574         
##                                           
##             Sensitivity : 0.7959          
##             Specificity : 0.3690          
##          Pos Pred Value : 0.6882          
##          Neg Pred Value : 0.5082          
##              Prevalence : 0.6364          
##          Detection Rate : 0.5065          
##    Detection Prevalence : 0.7359          
##       Balanced Accuracy : 0.5825          
##                                           
##        'Positive' Class : Negativo        
## 
fix(train)
predichos_prob=predict(modelo_diabe,test,type = "raw")
predichos_prob
##             [,1]
## 38  2.204627e-01
## 176 9.652132e-01
## 246 7.639364e-01
## 24  6.989742e-02
## 224 9.360519e-01
## 285 7.852021e-02
## 345 5.667558e-02
## 132 9.531492e-01
## 141 5.620562e-01
## 464 3.422131e-01
## 504 4.228302e-02
## 262 9.972727e-02
## 79  9.288232e-01
## 77  2.826642e-02
## 232 3.168903e-01
## 343 2.456448e-01
## 325 3.151280e-01
## 216 3.034482e-01
## 305 4.326352e-02
## 327 4.301223e-01
## 373 2.553043e-02
## 86  4.582457e-02
## 18  2.570206e-01
## 151 1.871730e-01
## 487 3.175431e-01
## 433 1.408787e-02
## 490 4.453890e-01
## 258 4.979705e-01
## 475 2.572334e-01
## 192 1.587736e-01
## 408 1.681763e-01
## 290 2.577736e-01
## 270 1.271872e-01
## 179 9.307035e-01
## 194 9.947987e-02
## 47  9.592098e-01
## 144 2.753663e-01
## 25  9.614800e-01
## 493 2.885242e-01
## 107 1.551120e-03
## 312 1.070140e-01
## 117 3.777005e-01
## 401 2.575631e-01
## 336 3.879390e-01
## 286 9.846036e-01
## 347 7.205407e-01
## 308 8.874823e-01
## 492 1.746726e-01
## 476 5.227803e-01
## 112 1.347858e-01
## 20  2.777022e-01
## 236 9.097431e-01
## 81  8.637338e-01
## 395 7.187344e-01
## 104 1.722741e-03
## 159 7.248946e-03
## 509 2.738273e-01
## 497 2.570150e-01
## 399 2.550381e-02
## 513 4.816971e-03
## 319 3.466940e-01
## 374 2.502940e-01
## 149 4.103565e-01
## 221 8.505797e-01
## 214 1.229378e-01
## 304 2.550032e-02
## 114 2.550140e-02
## 289 8.513522e-02
## 387 1.347166e-01
## 173 9.063014e-01
## 426 7.792809e-01
## 414 7.218362e-01
## 220 9.049677e-01
## 288 8.001757e-01
## 461 9.465735e-02
## 247 4.679700e-01
## 29  9.740337e-01
## 505 3.437120e-01
## 473 4.979829e-01
## 127 4.330734e-02
## 350 5.555177e-01
## 301 8.917257e-01
## 68  8.550148e-02
## 454 9.981077e-01
## 201 2.852122e-03
## 85  2.550032e-02
## 491 1.582552e-02
## 204 7.248112e-03
## 508 6.587309e-01
## 78  1.408987e-02
## 70  2.366606e-01
## 407 5.148194e-01
## 321 1.904376e-01
## 46  8.307624e-01
## 5   9.575145e-01
## 137 7.251043e-03
## 265 7.630523e-01
## 334 4.120417e-01
## 148 4.406746e-03
## 103 6.695767e-05
## 196 2.530508e-01
## 481 3.168885e-01
## 449 2.573204e-01
## 207 9.453822e-01
## 516 9.701233e-01
## 359 7.598191e-01
## 357 7.116143e-01
## 302 4.536500e-01
## 208 2.570195e-01
## 369 5.108102e-03
## 448 6.214254e-01
## 518 4.638152e-01
## 95  6.813279e-01
## 427 4.435150e-01
## 535 1.432492e-02
## 146 9.949896e-01
## 299 8.551091e-01
## 15  9.596859e-01
## 346 2.698354e-01
## 514 2.564645e-01
## 66  4.109903e-02
## 80  4.957137e-01
## 93  2.946908e-01
## 170 2.575696e-03
## 245 6.323687e-01
## 466 9.627022e-01
## 110 1.667222e-03
## 439 7.232057e-03
## 90  7.878028e-02
## 97  6.979094e-02
## 413 3.168888e-01
## 101 9.190431e-01
## 524 7.148482e-01
## 122 3.099958e-01
## 53  1.763524e-03
## 442 8.696872e-03
## 519 7.212548e-02
## 279 2.268716e-02
## 131 9.250748e-01
## 167 8.796205e-01
## 376 1.677473e-01
## 380 7.431706e-03
## 499 9.810502e-01
## 230 1.209407e-02
## 32  3.866482e-01
## 190 3.275038e-01
## 158 6.224246e-01
## 124 2.051852e-02
## 510 9.107652e-03
## 280 3.168888e-01
## 259 8.027489e-01
## 405 9.867724e-01
## 16  9.947987e-02
## 441 2.144997e-02
## 488 1.426712e-01
## 444 4.632930e-01
## 410 3.175358e-01
## 34  6.864875e-02
## 168 2.578188e-01
## 108 7.019886e-01
## 211 1.745641e-01
## 10  7.137133e-04
## 138 1.072789e-02
## 306 2.777154e-01
## 23  8.936963e-01
## 324 5.446584e-02
## 65  7.061106e-01
## 500 6.767993e-01
## 48  1.742088e-01
## 125 2.561499e-01
## 261 8.344608e-02
## 231 2.570151e-01
## 162 6.192982e-01
## 406 9.941330e-01
## 322 6.985163e-02
## 188 1.203804e-02
## 381 2.777218e-01
## 156 4.859572e-01
## 184 2.568120e-02
## 486 3.168887e-01
## 109 6.967433e-02
## 385 2.675004e-02
## 1   5.471897e-01
## 333 9.947987e-02
## 235 5.921979e-03
## 60  4.731465e-02
## 182 2.659676e-01
## 398 3.621956e-01
## 45  9.330787e-01
## 479 6.025092e-02
## 468 4.897733e-02
## 521 1.497141e-01
## 480 1.082258e-01
## 54  1.898024e-01
## 152 4.633462e-01
## 469 9.948139e-02
## 28  3.330081e-01
## 39  7.581622e-02
## 424 4.979666e-01
## 275 2.030469e-03
## 94  6.754582e-02
## 59  5.152396e-01
## 105 1.515122e-01
## 254 1.746441e-01
## 311 2.790770e-01
## 21  3.168918e-01
## 155 9.695289e-01
## 98  6.390021e-02
## 202 2.570141e-01
## 316 2.773364e-01
## 57  6.072499e-02
## 323 7.128868e-02
## 371 3.168888e-01
## 317 4.639544e-04
## 213 5.471968e-01
## 223 1.466208e-01
## 478 2.345165e-01
## 428 1.535970e-01
## 470 1.136000e-02
## 354 7.248114e-03
## 284 4.633781e-01
## 219 1.737917e-01
## 351 2.550032e-02
## 520 3.168954e-01
## 198 8.781964e-02
## 533 1.192427e-01
## 55  3.168701e-01
## 412 1.916503e-01
## 181 6.134162e-02
## 512 3.877151e-01
## 266 1.403479e-02

#Instalando libreria ROCR para visualizar el grafico y se observa una minima interseccion entra la semi curva y la linea recta

library(ROCR)
pred1=prediction(predichos_prob,test$resultado)
pred2=performance(pred1, "tpr","fpr")
plot(pred2, colorize=T)
lines(x=c(0,1), y=c(0,1))