library(readxl)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(stringr)
library(tidyr)
library(mice)
## 
## Adjuntando el paquete: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
library(VIM)
## Cargando paquete requerido: colorspace
## Cargando paquete requerido: grid
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
## 
## Adjuntando el paquete: 'VIM'
## The following object is masked from 'package:datasets':
## 
##     sleep
library(magrittr)
## 
## Adjuntando el paquete: 'magrittr'
## The following object is masked from 'package:tidyr':
## 
##     extract
library(Amelia)
## Cargando paquete requerido: Rcpp
## ## 
## ## Amelia II: Multiple Imputation
## ## (Version 1.8.2, built: 2024-04-10)
## ## Copyright (C) 2005-2024 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
#En los últimos años, la Inteligencia Artificial ha ganado relevancia en una amplia variedad de campos, desde la automatización de procesos hasta la toma de decisiones estratégicas en negocios. El análisis de datos juega un papel crucial en el desarrollo de algoritmos de IA efectivos. Tanto las métricas de rendimiento, como la precisión, y el tiempo de entrenamiento, son esenciales para determinar el balance entre la calidad del modelo y la eficiencia computacional, permitiendo así identificar patrones que optimizan los resultados.

#A través de un análisis exploratorio de datos, es posible identificar patrones claves que ayudan a optimizar la elección de algoritmos según el tipo de problema y los recursos disponibles. 

#Es fundamental realizar este análisis para de esta forma lograr entender las características claves de los datos, identificar posibles sesgos y encontrar una respuesta para esa pregunta formulada apartir de los datos suministrados; ¿Qué algoritmo de IA ofrece una mejor precisión al momento de utilizar datos de Imagen en el entrenamiento del modelo?.
BaseIA <- read_excel("Dataset_IA_corte_II.xlsx")
View(BaseIA)
BaseIA2 <- BaseIA %>% separate(col = Date, into = c("Fecha", "Hora"), sep = " ")
View(BaseIA2)
dim(BaseIA2) #dimensiones de la base
## [1] 560  11
names(BaseIA2) #nombres de las columnas (variables)
##  [1] "Algorithm"     "Framework"     "Problem_Type"  "Dataset_Type" 
##  [5] "Accuracy"      "Precision"     "Recall"        "F1_Score"     
##  [9] "Training_Time" "Fecha"         "Hora"
head(BaseIA2) #visualizamos los primeros datos de la base para comprender como se distribuyen
## # A tibble: 6 × 11
##   Algorithm      Framework   Problem_Type Dataset_Type Accuracy Precision Recall
##   <chr>          <chr>       <chr>        <chr>           <dbl>     <dbl>  <dbl>
## 1 SVM            Scikit-lea… Regression   Time Series     0.662     0.693 NA    
## 2 K-Means        Keras       Clustering   Time Series     0.744     0.490  0.877
## 3 Neural Network Keras       Clustering   Image           0.885     0.595  0.969
## 4 SVM            Keras       Clustering   Text            0.842     0.842  0.875
## 5 SVM            Scikit-lea… Regression   Tabular         0.723     0.686  0.301
## 6 K-Means        PyTorch     Regression   Image           0.637     0.626  7.45 
## # ℹ 4 more variables: F1_Score <dbl>, Training_Time <dbl>, Fecha <chr>,
## #   Hora <chr>
tail(BaseIA2) #visualizamos los últimos datos de la base para comprender como se distribuyen
## # A tibble: 6 × 11
##   Algorithm      Framework  Problem_Type  Dataset_Type Accuracy Precision Recall
##   <chr>          <chr>      <chr>         <chr>           <dbl>     <dbl>  <dbl>
## 1 Neural Network Keras      Classificati… Image           0.744     0.637  0.443
## 2 K-Means        Keras      Regression    Time Series     0.555     0.653  0.714
## 3 K-Means        Keras      Regression    Tabular         0.774     0.647  0.430
## 4 Random Forest  TensorFlow Clustering    Image           0.727    NA      0.532
## 5 K-Means        TensorFlow Regression    Tabular         0.922     0.828  0.899
## 6 Random Forest  PyTorch    Clustering    Image           0.549     0.765  0.445
## # ℹ 4 more variables: F1_Score <dbl>, Training_Time <dbl>, Fecha <chr>,
## #   Hora <chr>
str(BaseIA2) #conocemos los tipos de datos en cada variable
## tibble [560 × 11] (S3: tbl_df/tbl/data.frame)
##  $ Algorithm    : chr [1:560] "SVM" "K-Means" "Neural Network" "SVM" ...
##  $ Framework    : chr [1:560] "Scikit-learn" "Keras" "Keras" "Keras" ...
##  $ Problem_Type : chr [1:560] "Regression" "Clustering" "Clustering" "Clustering" ...
##  $ Dataset_Type : chr [1:560] "Time Series" "Time Series" "Image" "Text" ...
##  $ Accuracy     : num [1:560] 0.662 0.744 0.885 0.842 0.723 ...
##  $ Precision    : num [1:560] 0.693 0.49 0.595 0.842 0.686 ...
##  $ Recall       : num [1:560] NA 0.877 0.969 0.875 0.301 ...
##  $ F1_Score     : num [1:560] 0.443 0.441 0.964 0.704 0.646 ...
##  $ Training_Time: num [1:560] 4.98 NA 3.28 4.04 3.6 ...
##  $ Fecha        : chr [1:560] "2023-03-08" "2023-03-09" "2023-03-10" "2023-03-11" ...
##  $ Hora         : chr [1:560] "11:26:21.08" "11:26:21.08" "11:26:21.08" "11:26:21.08" ...
#variables_cuantitativas= (Accuracy, Precision, Recall, F1_Score, Training_Time, Fecha, Hora)
#variables_cualitativas= (Algorithm, Framework, Problem_Type, Dataset_Type)
str_view(BaseIA2$Framework, "ar")
##  [1] │ Scikit-le<ar>n
##  [5] │ Scikit-le<ar>n
##  [8] │ Scikit-le<ar>n
## [23] │ Scikit-le<ar>n
## [29] │ Scikit-le<ar>n
## [32] │ Scikit-le<ar>n
## [34] │ Scikit-le<ar>n
## [35] │ Scikit-le<ar>n
## [36] │ Scikit-le<ar>n
## [39] │ Scikit-le<ar>n
## [42] │ Scikit-le<ar>n
## [43] │ Scikit-le<ar>n
## [48] │ Scikit-le<ar>n
## [49] │ Scikit-le<ar>n
## [50] │ Scikit-le<ar>n
## [53] │ Scikit-le<ar>n
## [58] │ Scikit-le<ar>n
## [61] │ Scikit-le<ar>n
## [72] │ Scikit-le<ar>n
## [80] │ Scikit-le<ar>n
## ... and 114 more
str_detect(BaseIA2$Dataset_Type, "T")
##   [1]  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE
##  [13]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
##  [25]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE
##  [37] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
##  [49] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE
##  [61] FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [73]  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
##  [85]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [97]  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [109]  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE
## [121] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
## [133]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
## [145]  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE
## [157]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE
## [169]  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
## [181]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
## [193]  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
## [205]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
## [217]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
## [229]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE
## [241]  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [253]  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [265]  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE
## [277]  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE
## [289]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
## [301] FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
## [313]  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [325]  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
## [337]  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE
## [349] FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE
## [361]  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
## [373]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE
## [385]  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
## [397] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
## [409]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
## [421]  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE
## [433] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE
## [445]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE
## [457]  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
## [469]  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
## [481]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
## [493]  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
## [505]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
## [517]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
## [529]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
## [541]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
## [553]  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE
#Realizamos diagramas de normalidad para realizar el respectivo resumen de cada variable cuantitativa
hist(BaseIA$Accuracy, xlab = "Datos Accuracy", ylab = "Frecuencia", col = "blue")

#no presenta normalidad
subset(BaseIA, Accuracy > 1) #aquí se observan datos atípicos
## # A tibble: 10 × 10
##    Algorithm      Framework  Problem_Type Dataset_Type Accuracy Precision Recall
##    <chr>          <chr>      <chr>        <chr>           <dbl>     <dbl>  <dbl>
##  1 Random Forest  PyTorch    Regression   Text             9.72     0.782  0.548
##  2 K-Means        TensorFlow Classificat… Image            5.93    NA      0.399
##  3 Random Forest  Keras      Clustering   Text             8.53     0.837 NA    
##  4 Neural Network PyTorch    Regression   Time Series      5.26     0.506  0.829
##  5 K-Means        TensorFlow Regression   Tabular          7.13     0.521  0.441
##  6 SVM            Scikit-le… Regression   Tabular          5.20     0.489  0.680
##  7 SVM            TensorFlow Classificat… Image            8.29     0.798  0.753
##  8 Random Forest  PyTorch    Clustering   Tabular          7.90     0.521  0.363
##  9 SVM            Scikit-le… Regression   Tabular          5.98     0.928  0.799
## 10 SVM            PyTorch    Classificat… Image            9.49     0.671  0.833
## # ℹ 3 more variables: F1_Score <dbl>, Training_Time <dbl>, Date <dttm>
#Realizamos diagramas de normalidad para realizar el respectivo resumen de cada variable cuantitativa
hist(BaseIA$Precision, xlab = "Datos Accuracy", ylab = "Frecuencia", col = "blue")

#no presenta normalidad, cuenta con datos atípicos
subset(BaseIA, Precision > 1) #aquí se observan datos atípicos
## # A tibble: 10 × 10
##    Algorithm      Framework  Problem_Type Dataset_Type Accuracy Precision Recall
##    <chr>          <chr>      <chr>        <chr>           <dbl>     <dbl>  <dbl>
##  1 SVM            PyTorch    Regression   Image           0.897      9.73  0.781
##  2 SVM            Scikit-le… Classificat… Image           0.591      4.06  0.482
##  3 K-Means        TensorFlow Clustering   Time Series     0.686      6.21  0.328
##  4 K-Means        Scikit-le… Classificat… Time Series     0.603      4.15  7.74 
##  5 Neural Network Keras      Clustering   Text            0.537      9.67  0.819
##  6 SVM            TensorFlow Classificat… Image           0.824      5.43  0.976
##  7 Random Forest  TensorFlow Regression   Text            0.902      8.93  0.603
##  8 SVM            PyTorch    Clustering   Text            0.584      4.08  0.717
##  9 SVM            Keras      Regression   Text            0.506      5.76  0.707
## 10 K-Means        PyTorch    Regression   Tabular         0.768      7.04  0.926
## # ℹ 3 more variables: F1_Score <dbl>, Training_Time <dbl>, Date <dttm>
#La operacionalización de la variable Precision, la cual es centro de atención en este análisis exploratorio, será trabajada mediante un rango de medición de 0 a 1. Como pudimos ver, la Variable Precision cuenta con varios datos atípicos a los cuales se les deberá otorgar un tratamiento. De la misma manera, se le dará un tratamiento a los NA´S para tener unos datos en mejor estado y lograr un mejor estudio y análisis.
#Verificamos que existan NA´s
sapply(BaseIA2, function(x) sum(is.na(x)))
##     Algorithm     Framework  Problem_Type  Dataset_Type      Accuracy 
##             0             0             0             0            39 
##     Precision        Recall      F1_Score Training_Time         Fecha 
##            19            20            20            20             0 
##          Hora 
##             0
#Observaremos la cantidad de NA´s que tenemos en nuestra base de datos
md.pattern(BaseIA2) #aquí se observan los faltantes por cada variable

##     Algorithm Framework Problem_Type Dataset_Type Fecha Hora Precision Recall
## 448         1         1            1            1     1    1         1      1
## 39          1         1            1            1     1    1         1      1
## 16          1         1            1            1     1    1         1      1
## 17          1         1            1            1     1    1         1      1
## 2           1         1            1            1     1    1         1      1
## 18          1         1            1            1     1    1         1      0
## 1           1         1            1            1     1    1         1      0
## 16          1         1            1            1     1    1         0      1
## 1           1         1            1            1     1    1         0      1
## 1           1         1            1            1     1    1         0      1
## 1           1         1            1            1     1    1         0      0
##             0         0            0            0     0    0        19     20
##     F1_Score Training_Time Accuracy    
## 448        1             1        1   0
## 39         1             1        0   1
## 16         1             0        1   1
## 17         0             1        1   1
## 2          0             0        1   2
## 18         1             1        1   1
## 1          1             0        1   2
## 16         1             1        1   1
## 1          1             0        1   2
## 1          0             1        1   2
## 1          1             1        1   2
##           20            20       39 118
missmap(BaseIA2, col = c("red", "blue"), legend = TRUE) #acá observamos el porcentaje de faltantes en toda la base
## Warning: Unknown or uninitialised column: `arguments`.
## Unknown or uninitialised column: `arguments`.
## Warning: Unknown or uninitialised column: `imputations`.

# Decidimos realizar imputación por la mediana
imputacion <- with(BaseIA2, {
  for (i in 1:ncol(BaseIA2)) {
    # Verificamos si la columna es numérica
    if (is.numeric(BaseIA2[, i])) {
      if (any(is.na(BaseIA2[, i]))) {
        # Imputación por mediana para columnas numéricas
        BaseIA2[, i][is.na(BaseIA2[, i])] <- median(BaseIA2[, i], na.rm = TRUE)
      }
    }
  }
  return(BaseIA2)
})

# Verificamos la imputación
sapply(imputacion, function(x) sum(is.na(x)))
##     Algorithm     Framework  Problem_Type  Dataset_Type      Accuracy 
##             0             0             0             0            39 
##     Precision        Recall      F1_Score Training_Time         Fecha 
##            19            20            20            20             0 
##          Hora 
##             0
#cargamos la base con su respectiva imputación de NA´s
View(imputacion)
#resumen estadístico inicial
summary(BaseIA2)
##   Algorithm          Framework         Problem_Type       Dataset_Type      
##  Length:560         Length:560         Length:560         Length:560        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##     Accuracy        Precision          Recall          F1_Score     
##  Min.   :0.5038   Min.   :0.4019   Min.   :0.3001   Min.   :0.4000  
##  1st Qu.:0.6236   1st Qu.:0.5632   1st Qu.:0.4819   1st Qu.:0.5515  
##  Median :0.7578   Median :0.7195   Median :0.6493   Median :0.7086  
##  Mean   :0.8779   Mean   :0.8129   Mean   :0.7486   Mean   :0.8122  
##  3rd Qu.:0.8824   3rd Qu.:0.8596   3rd Qu.:0.8404   3rd Qu.:0.8438  
##  Max.   :9.7181   Max.   :9.7320   Max.   :9.3662   Max.   :9.3740  
##  NA's   :39       NA's   :19       NA's   :20       NA's   :20      
##  Training_Time        Fecha               Hora          
##  Min.   : 0.1032   Length:560         Length:560        
##  1st Qu.: 1.2441   Class :character   Class :character  
##  Median : 2.4347   Mode  :character   Mode  :character  
##  Mean   : 2.9910                                        
##  3rd Qu.: 3.8131                                        
##  Max.   :46.9856                                        
##  NA's   :20
#resumen estadístico post imputación de NA´s
summary(imputacion)
##   Algorithm          Framework         Problem_Type       Dataset_Type      
##  Length:560         Length:560         Length:560         Length:560        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##     Accuracy        Precision          Recall          F1_Score     
##  Min.   :0.5038   Min.   :0.4019   Min.   :0.3001   Min.   :0.4000  
##  1st Qu.:0.6236   1st Qu.:0.5632   1st Qu.:0.4819   1st Qu.:0.5515  
##  Median :0.7578   Median :0.7195   Median :0.6493   Median :0.7086  
##  Mean   :0.8779   Mean   :0.8129   Mean   :0.7486   Mean   :0.8122  
##  3rd Qu.:0.8824   3rd Qu.:0.8596   3rd Qu.:0.8404   3rd Qu.:0.8438  
##  Max.   :9.7181   Max.   :9.7320   Max.   :9.3662   Max.   :9.3740  
##  NA's   :39       NA's   :19       NA's   :20       NA's   :20      
##  Training_Time        Fecha               Hora          
##  Min.   : 0.1032   Length:560         Length:560        
##  1st Qu.: 1.2441   Class :character   Class :character  
##  Median : 2.4347   Mode  :character   Mode  :character  
##  Mean   : 2.9910                                        
##  3rd Qu.: 3.8131                                        
##  Max.   :46.9856                                        
##  NA's   :20
#Verificamos si existen datos atípicos en nuestra variable de interés (Precision)
boxplot(imputacion$Precision, xlab= "Precision", ylab= "Distribución", col = "lightgreen")

#Observamos puntos fuera del diagrama de cajas, lo cual nos indica la presencia de datos atípicos
#Miramos cuales son los datos atípicos
boxplot.stats(imputacion$Precision)$out
##  [1] 9.732008 4.055990 6.207645 4.145151 9.674189 5.432777 8.932619 4.075645
##  [9] 5.760933 7.044472
#Grafico descriptivo despues de hecha la imputacion 
hist(imputacion$Precision, xlab = "Datos Precision" , ylab = "Frecuencia", col = "lightblue")

hist(imputacion$Accuracy, xlab = "Datos Accuracy" , ylab = "Frecuencia", col = "blue")

##Podemos evidenciar la asimetría en las dos graficas observando como la mayoria de los valores se encuentran en solo un lado de la grafica (de 0 a 1), tambien encontramos valores atipicos en los dos graficos 
Resultados <- imputacion[, "Accuracy"]
summary(Resultados$Accuracy)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  0.5038  0.6236  0.7578  0.8779  0.8824  9.7181      39
#En Accuracy nos referimos al porcentaje de predicciones correctas en relación con todas las predicciones realizadas este podemos observar, una media de 0.8779 y una mediana de 0.7578, lo que refleja un buen rendimiento general. El valor máximo es 9.7181. Podemos evidenciar por los datos del primer cuartil que el 25% de los valores estan por debajo de 0.6236 y en el tercer cuartil el 75% de los valores están por debajo de 0.8824.
Resultados2 <- imputacion[, "Precision"]
summary(Resultados2$Precision)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  0.4019  0.5632  0.7195  0.8129  0.8596  9.7320      19
#En la precision nos encontramos con el porcentaje de verdaderos positivos sobre todas las predicciones que fueron clasificadas como positivas este podemos observar una media de 0.8129 y una mediana de 0.7195, lo que indica un rendimiento positivo en general. El valor máximo es 9.7320. Podemos evidenciar por los datos del primer cuartil que el 25% de los valores están por debajo de 0.5632, y en el tercer cuartil, el 75% de los valores están por debajo de 0.8596.
Resultados_Recall <- imputacion[, "Recall"]
summary(Resultados_Recall)
##      Recall      
##  Min.   :0.3001  
##  1st Qu.:0.4819  
##  Median :0.6493  
##  Mean   :0.7486  
##  3rd Qu.:0.8404  
##  Max.   :9.3662  
##  NA's   :20
# En la columna Recall, que mide la capacidad del modelo para identificar correctamente los verdaderos positivos, observamos los valores estadísticos. El Recall tiene una media de 0.7486 y una mediana de 0.6493, lo que indica que los datos están ligeramente sesgados hacia la derecha. El valor máximo de 9.3662 sugiere un posible valor atípico, similar al análisis del F1_Score, ya que está muy por encima de los cuartiles superiores. También hay 20 valores faltantes (NA’s) que deberán ser tratados antes de realizar un análisis más profundo.
Resultados_F1 <- imputacion[, "F1_Score"]
summary(Resultados_F1)
##     F1_Score     
##  Min.   :0.4000  
##  1st Qu.:0.5515  
##  Median :0.7086  
##  Mean   :0.8122  
##  3rd Qu.:0.8438  
##  Max.   :9.3740  
##  NA's   :20
# El F1_Score es una métrica que equilibra la precisión y el recall. El resumen del F1_Score muestra una media de 0.8122 y una mediana de 0.7086, lo que sugiere una ligera asimetría positiva. El valor máximo es 9.3740, significativamente mayor al resto, lo que indica un posible valor atípico. La mayoría de los datos se encuentran entre 0.5515 y 0.8438 (primer y tercer cuartil). Hay 20 valores faltantes (NA’s) que deben ser manejados antes de continuar con el análisis.
table(imputacion$Algorithm)
## 
##        K-Means Neural Network  Random Forest            SVM 
##            163            135            126            136
# En la columna Algorithm, podemos presentar los nombres de loss algorimos usados en esta base de datos. 
#Grafico Bivariado
ggplot(imputacion, aes(x = Accuracy, y = Precision)) +
  geom_point(color = "blue", size = 3, alpha = 0.6) +
  labs(title = "Accuracy vs Precision",
       x = "Accuracy",
       y = "Precision") +
  theme_minimal()
## Warning: Removed 58 rows containing missing values or values outside the scale range
## (`geom_point()`).

#En este gráfico bivariado por un lado presenciamos la precisión y por otro lado tenemos el Accuracy presenciamos distintos valores atípicos tanto en la precisión como en Accuracy pero los valores más que todo se encuentran entre el cero y el uno que es entre los valores que se miden estos.
# 2 Grafico Bivariado
ggplot(imputacion, aes(x = Algorithm, y = Precision, fill = Algorithm)) +
  geom_bar(stat = "summary", fun = "mean", position = "dodge") +
  labs(title = "Average Precision by Algorithm",
       x = "Algorithm",
       y = "Precision") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) 
## Warning: Removed 19 rows containing non-finite outside the scale range
## (`stat_summary()`).

#El gráfico bivariado muestra la precisión de los algoritmos de machine learning: K-Means, Redes Neuronales, Bosques Aleatorios y Máquinas de Vectores de Soporte (SVM). Se observa que K-Means y SVM tienen las mayores precisiones, siendo ligeramente superiores a 0.75. Las Redes Neuronales y los Bosques Aleatorios presentan una precisión similar, alrededor de 0.70. Este análisis sugiere que K-Means y SVM podrían ser mejores opciones en términos de precisión para este conjunto de datos específico, pero se deben considerar otros factores como la naturaleza de los datos y el tiempo de procesamiento.
#Para concluir, el análisis realizado sobre la precisión de los algoritmos de machine learning aplicados a datos de imagen nos lleva a destacar a K-Means y SVM como las opciones que presentan los mejores resultados en términos de precisión, superando ligeramente el umbral de 0.75. Aunque las Redes Neuronales y los Bosques Aleatorios también muestran un rendimiento competitivo, con precisiones cercanas a 0.70, K-Means y SVM se perfilan como los algoritmos más eficientes para este conjunto de datos en particular. No obstante, es importante señalar que la elección del algoritmo óptimo no debe basarse únicamente en la precisión, sino también en otros aspectos relevantes como la naturaleza de los datos, el costo computacional y el tiempo de procesamiento. Estos factores juegan un papel crucial en la implementación exitosa de un modelo de inteligencia artificial en un entorno de producción real.