0.1 Cargar archivo

library(readxl)
library(ggpubr)
## Loading required package: ggplot2
## Loading required package: magrittr
library(ggplot2)
library(knitr)
library(e1071)
library(naivebayes)
library(caret)
## Loading required package: lattice
library(C50)
Disparos<- read_excel("Disparos listos.xlsx")
kable (head(Disparos))
TMRCLA TMA1LA TMA2LA TACCLA VEACLA VERCLA TMRCLOA TACCLOA VER TTA PAA TAaT TAaC evento
Alarma Disparo Alarma Alarma Bien Bien Bien Bien Bien Bien Alarma Baja Bien Bien EN FALLA
Bien Bien Bien Bien Bien Bien Bien Bien Bien Bien Disparo Bajo Bien Bien EN FALLA
Bien Bien Bien Bien Bien Bien Bien Bien Bien Bien Disparo Bajo Bien Bien EN FALLA
Alarma Disparo Alarma Alarma Bien Bien Bien Bien Bien Bien Alarma Baja Bien Bien EN FALLA
Bien Bien Bien Bien Bien Bien Bien Bien Bien Bien Disparo Bajo Bien Bien EN FALLA
Bien Bien Bien Bien Bien Bien Bien Bien Bien Bien Disparo Bajo Bien Bien EN FALLA
## Modifi car tabla
Tabla<- Disparos
Tabla$TMRCLABien<- ifelse(Disparos$TMRCLA == "Bien", 1, 0)
Tabla$TMRCLAAlarma<- ifelse(Disparos$TMRCLA == "Alarma", 5, 0)
Tabla$TMRCLADisparo<- ifelse(Disparos$TMRCLA == "Disparo", 10, 0)

Tabla$TMA1LABien<- ifelse(Disparos$TMA1LA == "Bien", 1, 0)
Tabla$TMA1LAAlarma<- ifelse(Disparos$TMA1LA == "Alarma", 5, 0)
Tabla$TMA1LADisparo<- ifelse(Disparos$TMA1LA == "Disparo", 10, 0)

Tabla$TMA2LABien<- ifelse(Disparos$TMA2LA == "Bien", 1, 0)
Tabla$TMA2LAAlarma<- ifelse(Disparos$TMA2LA == "Alarma", 5, 0)
Tabla$TMA2LADisparo<- ifelse(Disparos$TMA2LA == "Disparo", 10, 0)

Tabla$TACCLABien<- ifelse(Disparos$TACCLA == "Bien", 1, 0)
Tabla$TACCLAAlarma<- ifelse(Disparos$TACCLA == "Alarma", 5, 0)
Tabla$TACCLADisparo<- ifelse(Disparos$TACCLA == "Disparo", 10, 0)

Tabla$VEACLABien <- ifelse(Disparos$VEACLA == "Bien", 1, 0)
Tabla$VEACLAAlarma<- ifelse(Disparos$VEACLA == "Alarma", 5, 0)
Tabla$VEACLADisparo<- ifelse(Disparos$VEACLA == "Disparo", 10, 0)

Tabla$VERCLABien <- ifelse(Disparos$VERCLA == "Bien", 1, 0)
Tabla$VERCLAAlarma<- ifelse(Disparos$VERCLA == "Alarma", 5, 0)
Tabla$VERCLADisparo<- ifelse(Disparos$VERCLA == "Disparo", 10, 0)

Tabla$TMRCLOABien <- ifelse(Disparos$TMRCLOA == "Bien", 1, 0)
Tabla$TMRCLOAAlarma<- ifelse(Disparos$TMRCLOA == "Alarma", 5, 0)
Tabla$TMRCLOADisparo<- ifelse(Disparos$TMRCLOA == "Disparo", 10, 0)

Tabla$TACCLOABien <- ifelse(Disparos$TACCLOA == "Bien", 1, 0)
Tabla$TACCLOAAlarma<- ifelse(Disparos$TACCLOA == "Alarma", 5, 0)
Tabla$TACCLOADisparo<- ifelse(Disparos$TACCLOA == "Disparo", 10, 0)

Tabla$VERBien <- ifelse(Disparos$VER == "Bien", 1, 0)
Tabla$VERAlarma<- ifelse(Disparos$VER == "Alarma", 5, 0)
Tabla$VERDisparo<- ifelse(Disparos$VER == "Disparo", 10, 0)

Tabla$TTABien <- ifelse(Disparos$TTA == "Bien", 1, 0)
Tabla$TTAAlarma<- ifelse(Disparos$TTA == "Alarma", 5, 0)
Tabla$TTADisparo<- ifelse(Disparos$TTA == "Disparo", 10, 0)

Tabla$PAABien <- ifelse(Disparos$PAA == "Bien", 1, 0)
Tabla$PAAAlarmaB<- ifelse(Disparos$PAA == "Alarma Baja", 5, 0)
Tabla$PAAAlarmaA<- ifelse(Disparos$PAA == "Alarma Alto", -5, 0)
Tabla$PAADisparoB<- ifelse(Disparos$PAA == "Disparo Bajo", 10, 0)
Tabla$PAADisparoA<- ifelse(Disparos$PAA == "Disparo Alto", -10, 0)

Tabla$TAaTBien <- ifelse(Disparos$TAaT == "Bien", 1, 0)
Tabla$TAaTAlarma<- ifelse(Disparos$TAaT == "Alarma", 5, 0)
Tabla$TAaTDisparo<- ifelse(Disparos$TAaT == "Disparo", 10, 0)

Tabla$TAaCBien <- ifelse(Disparos$TAaC == "Bien", 1, 0)
Tabla$TAaCAlarma<- ifelse(Disparos$TAaC == "Alarma", 5, 0)
Tabla$TAaCDisparo<- ifelse(Disparos$TAaC == "Disparo", 10, 0)

Datos_para_cluster<- Tabla[, -c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)]

kable( head(Datos_para_cluster[,c(1,2,3,4,5,6,7,8)]))
TMRCLABien TMRCLAAlarma TMRCLADisparo TMA1LABien TMA1LAAlarma TMA1LADisparo TMA2LABien TMA2LAAlarma
0 5 0 0 0 10 0 5
1 0 0 1 0 0 1 0
1 0 0 1 0 0 1 0
0 5 0 0 0 10 0 5
1 0 0 1 0 0 1 0
1 0 0 1 0 0 1 0

0.2 Crear Cluster

set.seed(80)
cluster<- kmeans(Datos_para_cluster, centers = 10, nstart = 50)
names(cluster)
## [1] "cluster"      "centers"      "totss"        "withinss"    
## [5] "tot.withinss" "betweenss"    "size"         "iter"        
## [9] "ifault"

0.3 Numero optimo de cluster

sumbt<- kmeans(Datos_para_cluster, centers = 10)$betweenss
sumbt2<- kmeans(Datos_para_cluster, centers = 10)$tot.withinss
for(i in 1:20) sumbt[i]<- kmeans(Datos_para_cluster, centers = i, nstart = 50)$betweenss
for(i in 1:20) sumbt2[i]<- kmeans(Datos_para_cluster, centers = i, nstart = 50)$tot.withinss
plot(1:20, sumbt, type = "b", xlab = "numero de cluster", ylab = "Inercia entre grupos")

plot(1:20, sumbt2, type = "b", xlab = "numero de cluster", ylab = "Inercia dentro de los grupos")

0.4 Organizar despues del Cluster

cluster1<- Disparos[ cluster$cluster==1,]
cluster2<- Disparos[ cluster$cluster==2,]
cluster3<- Disparos[ cluster$cluster==3,]
cluster4<- Disparos[ cluster$cluster==4,]
cluster5<- Disparos[ cluster$cluster==5,]
cluster6<- Disparos[ cluster$cluster==6,]
cluster7<- Disparos[ cluster$cluster==7,]
cluster8<- Disparos[ cluster$cluster==8,]
cluster9<- Disparos[ cluster$cluster==9,]
cluster10<- Disparos[ cluster$cluster==10,]
datos_listos<- Disparos[-c(14)]
datos_listos$Caso<- ifelse(cluster$cluster==1, "Caso 1",
                    ifelse(cluster$cluster==2, "Caso 2",
                    ifelse(cluster$cluster==3, "Caso 3",
                    ifelse(cluster$cluster==4, "Caso 4",
                    ifelse(cluster$cluster==5, "Caso 5",
                    ifelse(cluster$cluster==6, "Caso 6",
                    ifelse(cluster$cluster==7, "Caso 7",
                    ifelse(cluster$cluster==8, "Caso 8",
                    ifelse(cluster$cluster==9, "Caso 9",
                    ifelse(cluster$cluster==10, "Caso 10",NaN))))))))))
 datos_listos[c(1:5),]
## # A tibble: 5 x 14
##   TMRCLA TMA1LA TMA2LA TACCLA VEACLA VERCLA TMRCLOA TACCLOA VER   TTA  
##   <chr>  <chr>  <chr>  <chr>  <chr>  <chr>  <chr>   <chr>   <chr> <chr>
## 1 Alarma Dispa~ Alarma Alarma Bien   Bien   Bien    Bien    Bien  Bien 
## 2 Bien   Bien   Bien   Bien   Bien   Bien   Bien    Bien    Bien  Bien 
## 3 Bien   Bien   Bien   Bien   Bien   Bien   Bien    Bien    Bien  Bien 
## 4 Alarma Dispa~ Alarma Alarma Bien   Bien   Bien    Bien    Bien  Bien 
## 5 Bien   Bien   Bien   Bien   Bien   Bien   Bien    Bien    Bien  Bien 
## # ... with 4 more variables: PAA <chr>, TAaT <chr>, TAaC <chr>, Caso <chr>

0.5 Preparar set de entrenamiento para red Bayesiana

# Se crea una particion aleatoria de los datos del cluster 1
ind <- sample(2,nrow(cluster1), replace = TRUE, prob = c(0.2, 0.8) ) #80% entrenamiento y 20% test
Test_C1<- cluster1[ind==1,-14]
Test_C1$Caso<- "Caso 1"
Train_C1<- cluster1[ind==2,-14]
Train_C1$Caso<- "Caso 1"

# Se crea una particion aleatoria de los datos del cluster 2
ind <- sample(2,nrow(cluster2), replace = TRUE, prob = c(0.4, 0.6) ) #80% entrenamiento y 20% test
Test_C2<- cluster2[ind==1,-14]
Test_C2$Caso<- "Caso 2"
Train_C2<- cluster2[ind==2,-14]
Train_C2$Caso<- "Caso 2"

# Se crea una particion aleatoria de los datos del cluster 3
ind <- sample(2,nrow(cluster3), replace = TRUE, prob = c(0.2, 0.8) ) #80% entrenamiento y 20% test
Test_C3<- cluster3[ind==1,-14]
Test_C3$Caso<- "Caso 3"
Train_C3<- cluster3[ind==2,-14]
Train_C3$Caso<- "Caso 3"

# Se crea una particion aleatoria de los datos del cluster 4
ind <- sample(2,nrow(cluster4), replace = TRUE, prob = c(0.2, 0.8) ) #80% entrenamiento y 20% test
Test_C4<- cluster4[ind==1,-14]
Test_C4$Caso<- "Caso 4"
Train_C4<- cluster4[ind==2,-14]
Train_C4$Caso<- "Caso 4"

# Se crea una particion aleatoria de los datos del cluster 5
ind <- sample(2,nrow(cluster5), replace = TRUE, prob = c(0.5, 0.5) ) #80% entrenamiento y 20% test
Test_C5<- cluster5[ind==1,-14]
Test_C5$Caso<- "Caso 5"
Train_C5<- cluster5[ind==2,-14]
Train_C5$Caso<- "Caso 5"

# Se crea una particion aleatoria de los datos del cluster 6
ind <- sample(2,nrow(cluster6), replace = TRUE, prob = c(0.4, 0.6) ) #80% entrenamiento y 20% test
Test_C6<- cluster6[ind==1,-14]
Test_C6$Caso<- "Caso 6"
Train_C6<- cluster6[ind==2,-14]
Train_C6$Caso<- "Caso 6"

# Se crea una particion aleatoria de los datos del cluster 7
ind <- sample(2,nrow(cluster7), replace = TRUE, prob = c(0.3, 0.7) ) #80% entrenamiento y 20% test
Test_C7<- cluster7[ind==1,-14]
Test_C7$Caso<- "Caso 7"
Train_C7<- cluster7[ind==2,-14]
Train_C7$Caso<- "Caso 7"

# Se crea una particion aleatoria de los datos del cluster 8
ind <- sample(3,nrow(cluster8), replace = TRUE, prob = c(0.1, 0.1, 0.8) ) #15% entrenamiento y 5% test
Test_C8<- cluster8[ind==1,-14]
Test_C8$Caso<- "Caso 8"
Train_C8<- cluster8[ind==2,-14]
Train_C8$Caso<- "Caso 8"

# Se crea una particion aleatoria de los datos del cluster 9
ind <- sample(2,nrow(cluster9), replace = TRUE, prob = c(0.2, 0.8) ) #80% entrenamiento y 20% test
Test_C9<- cluster9[ind==1,-14]
Test_C9$Caso<- "Caso 9"
Train_C9<- cluster9[ind==2,-14]
Train_C9$Caso<- "Caso 9"

# Se crea una particion aleatoria de los datos del cluster 10
ind <- sample(3,nrow(cluster10), replace = TRUE, prob = c(0.1, 0.1, 0.8) ) #15% entrenamiento y 5% test
Test_C10<- cluster10[ind==1,-14]
Test_C10$Caso<- "Caso 10"
Train_C10<- cluster10[ind==2,-14]
Train_C10$Caso<- "Caso 10"

#se agregan las particiones creadas al dataframe Train y Test
Test<- rbind(Test_C1,Test_C2)
Test<- rbind(Test,Test_C3)
Test<- rbind(Test,Test_C4)
Test<- rbind(Test,Test_C5)
Test<- rbind(Test,Test_C6)
Test<- rbind(Test,Test_C7)
Test<- rbind(Test,Test_C8)
Test<- rbind(Test,Test_C9)
Test<- rbind(Test,Test_C10)
Train<- rbind(Train_C1,Train_C2)
Train<- rbind(Train,Train_C3)
Train<- rbind(Train,Train_C4)
Train<- rbind(Train,Train_C5)
Train<- rbind(Train,Train_C6)
Train<- rbind(Train,Train_C7)
Train<- rbind(Train,Train_C8)
Train<- rbind(Train,Train_C9)
Train<- rbind(Train,Train_C10)

0.6 Crear modelo de Naive Bayes

modelo <- naive_bayes(Caso ~ ., data = Test)
modelo
## ================================ Naive Bayes ================================= 
## Call: 
## naive_bayes.formula(formula = Caso ~ ., data = Test)
## 
## A priori probabilities: 
## 
##     Caso 1    Caso 10     Caso 2     Caso 3     Caso 4     Caso 5 
## 0.10769231 0.46153846 0.03076923 0.06153846 0.03076923 0.01538462 
##     Caso 6     Caso 7     Caso 8     Caso 9 
## 0.01538462 0.04615385 0.20000000 0.03076923 
## 
## Tables: 
##         
## TMRCLA   Caso 1 Caso 10 Caso 2 Caso 3 Caso 4 Caso 5 Caso 6 Caso 7 Caso 8
##   Alarma    0.0     0.0    1.0    0.5    0.0    0.0    1.0    1.0    0.0
##   Bien      1.0     1.0    0.0    0.5    1.0    1.0    0.0    0.0    1.0
##         
## TMRCLA   Caso 9
##   Alarma    0.0
##   Bien      1.0
## 
##          
## TMA1LA    Caso 1 Caso 10 Caso 2 Caso 3 Caso 4 Caso 5 Caso 6 Caso 7 Caso 8
##   Alarma     0.0     0.0    1.0    0.5    0.0    0.0    0.0    1.0    0.0
##   Bien       1.0     1.0    0.0    0.5    1.0    0.0    0.0    0.0    1.0
##   Disparo    0.0     0.0    0.0    0.0    0.0    1.0    1.0    0.0    0.0
##          
## TMA1LA    Caso 9
##   Alarma     0.0
##   Bien       1.0
##   Disparo    0.0
## 
##         
## TMA2LA      Caso 1   Caso 10    Caso 2    Caso 3    Caso 4    Caso 5
##   Alarma 0.0000000 0.0000000 1.0000000 0.5000000 0.0000000 0.0000000
##   Bien   1.0000000 1.0000000 0.0000000 0.5000000 1.0000000 1.0000000
##         
## TMA2LA      Caso 6    Caso 7    Caso 8    Caso 9
##   Alarma 1.0000000 0.6666667 0.0000000 0.0000000
##   Bien   0.0000000 0.3333333 1.0000000 1.0000000
## 
##         
## TACCLA   Caso 1 Caso 10 Caso 2 Caso 3 Caso 4 Caso 5 Caso 6 Caso 7 Caso 8
##   Alarma    0.0     0.0    1.0    0.5    0.0    0.0    1.0    1.0    0.0
##   Bien      1.0     1.0    0.0    0.5    1.0    1.0    0.0    0.0    1.0
##         
## TACCLA   Caso 9
##   Alarma    0.0
##   Bien      1.0
## 
##         
## VEACLA       Caso 1    Caso 10     Caso 2     Caso 3     Caso 4     Caso 5
##   Alarma 0.00000000 0.03333333 0.00000000 0.50000000 0.00000000 0.00000000
##   Bien   1.00000000 0.96666667 1.00000000 0.50000000 1.00000000 1.00000000
##         
## VEACLA       Caso 6     Caso 7     Caso 8     Caso 9
##   Alarma 0.00000000 0.00000000 0.00000000 0.00000000
##   Bien   1.00000000 1.00000000 1.00000000 1.00000000
## 
## # ... and 8 more tables

0.7 Prueba de identificacion de fallas

se realiza una prueba de identificacion tomando un elemento aleatorio del set de test para verificar la correcta idntificacion de fallas

prueba<- Test[sample(1:65, 1), ]
identifico<- predict(modelo, prueba)
identifico
## [1] Caso 10
## 10 Levels: Caso 1 Caso 10 Caso 2 Caso 3 Caso 4 Caso 5 Caso 6 ... Caso 9
comparador<- table(prueba$Caso, identifico, dnn = c("Actual", "Predicha"))
comparador
##          Predicha
## Actual    Caso 1 Caso 10 Caso 2 Caso 3 Caso 4 Caso 5 Caso 6 Caso 7 Caso 8
##   Caso 10      0       1      0      0      0      0      0      0      0
##          Predicha
## Actual    Caso 9
##   Caso 10      0

##Prueba completa del set de test como el sistema de identificacion de fallas funciono correctamente con una observacion del set de Test se procede a evaluar la totalidad de dicho set

pred <- predict(modelo, Test)
pred
##  [1] Caso 1  Caso 1  Caso 1  Caso 1  Caso 1  Caso 1  Caso 1  Caso 2 
##  [9] Caso 2  Caso 3  Caso 3  Caso 3  Caso 3  Caso 4  Caso 4  Caso 5 
## [17] Caso 6  Caso 7  Caso 7  Caso 7  Caso 8  Caso 8  Caso 8  Caso 8 
## [25] Caso 8  Caso 8  Caso 8  Caso 8  Caso 8  Caso 8  Caso 8  Caso 8 
## [33] Caso 8  Caso 9  Caso 9  Caso 10 Caso 10 Caso 10 Caso 10 Caso 10
## [41] Caso 10 Caso 10 Caso 10 Caso 10 Caso 10 Caso 10 Caso 10 Caso 10
## [49] Caso 10 Caso 10 Caso 10 Caso 10 Caso 10 Caso 10 Caso 10 Caso 10
## [57] Caso 10 Caso 10 Caso 10 Caso 10 Caso 10 Caso 10 Caso 10 Caso 10
## [65] Caso 10
## 10 Levels: Caso 1 Caso 10 Caso 2 Caso 3 Caso 4 Caso 5 Caso 6 ... Caso 9
tab <- table(Test$Caso, pred, dnn = c("Actual", "Predicha"))
confusionMatrix(tab)
## Confusion Matrix and Statistics
## 
##          Predicha
## Actual    Caso 1 Caso 10 Caso 2 Caso 3 Caso 4 Caso 5 Caso 6 Caso 7 Caso 8
##   Caso 1       7       0      0      0      0      0      0      0      0
##   Caso 10      0      30      0      0      0      0      0      0      0
##   Caso 2       0       0      2      0      0      0      0      0      0
##   Caso 3       0       0      0      4      0      0      0      0      0
##   Caso 4       0       0      0      0      2      0      0      0      0
##   Caso 5       0       0      0      0      0      1      0      0      0
##   Caso 6       0       0      0      0      0      0      1      0      0
##   Caso 7       0       0      0      0      0      0      0      3      0
##   Caso 8       0       0      0      0      0      0      0      0     13
##   Caso 9       0       0      0      0      0      0      0      0      0
##          Predicha
## Actual    Caso 9
##   Caso 1       0
##   Caso 10      0
##   Caso 2       0
##   Caso 3       0
##   Caso 4       0
##   Caso 5       0
##   Caso 6       0
##   Caso 7       0
##   Caso 8       0
##   Caso 9       2
## 
## Overall Statistics
##                                      
##                Accuracy : 1          
##                  95% CI : (0.9448, 1)
##     No Information Rate : 0.4615     
##     P-Value [Acc > NIR] : < 2.2e-16  
##                                      
##                   Kappa : 1          
##                                      
##  Mcnemar's Test P-Value : NA         
## 
## Statistics by Class:
## 
##                      Class: Caso 1 Class: Caso 10 Class: Caso 2
## Sensitivity                 1.0000         1.0000       1.00000
## Specificity                 1.0000         1.0000       1.00000
## Pos Pred Value              1.0000         1.0000       1.00000
## Neg Pred Value              1.0000         1.0000       1.00000
## Prevalence                  0.1077         0.4615       0.03077
## Detection Rate              0.1077         0.4615       0.03077
## Detection Prevalence        0.1077         0.4615       0.03077
## Balanced Accuracy           1.0000         1.0000       1.00000
##                      Class: Caso 3 Class: Caso 4 Class: Caso 5
## Sensitivity                1.00000       1.00000       1.00000
## Specificity                1.00000       1.00000       1.00000
## Pos Pred Value             1.00000       1.00000       1.00000
## Neg Pred Value             1.00000       1.00000       1.00000
## Prevalence                 0.06154       0.03077       0.01538
## Detection Rate             0.06154       0.03077       0.01538
## Detection Prevalence       0.06154       0.03077       0.01538
## Balanced Accuracy          1.00000       1.00000       1.00000
##                      Class: Caso 6 Class: Caso 7 Class: Caso 8
## Sensitivity                1.00000       1.00000           1.0
## Specificity                1.00000       1.00000           1.0
## Pos Pred Value             1.00000       1.00000           1.0
## Neg Pred Value             1.00000       1.00000           1.0
## Prevalence                 0.01538       0.04615           0.2
## Detection Rate             0.01538       0.04615           0.2
## Detection Prevalence       0.01538       0.04615           0.2
## Balanced Accuracy          1.00000       1.00000           1.0
##                      Class: Caso 9
## Sensitivity                1.00000
## Specificity                1.00000
## Pos Pred Value             1.00000
## Neg Pred Value             1.00000
## Prevalence                 0.03077
## Detection Rate             0.03077
## Detection Prevalence       0.03077
## Balanced Accuracy          1.00000