Integrantes:

Introducción

En un entorno empresarial cada vez más impulsado por los datos, la capacidad de analizar y visualizar información de manera efectiva es esencial para la toma de decisiones informadas. Dos herramientas clave en el análisis de datos, especialmente en el contexto empresarial, son la “Gráfica de Tallos y Hojas” y el “Diagrama de Cajas”.

Estas técnicas ofrecen una representación visual poderosa de la distribución de datos, lo que permite identificar patrones, tendencias y valores atípicos. En este artículo, exploraremos la utilidad de las gráficas de tallos y hojas y los diagramas de cajas en el análisis de datos empresariales y cómo se pueden implementar en R Studio para obtener información valiosa.

Diagrama de Tallos y Hojas en R

El diagrama de tallos y hojas es una herramienta gráfica que se utiliza para visualizar la distribución de datos numéricos. Es especialmente útil para identificar patrones, valores atípicos y tendencias en un conjunto de datos. En R, la función stem es una herramienta poderosa para crear diagramas de tallos y hojas.

La función stem en R

La función stem en R es una forma efectiva de crear diagramas de tallos y hojas. Aquí están los detalles de los argumentos clave:

  • x: El vector de datos numéricos que deseas representar en el diagrama.

  • scale: Controla la escala de los tallos. El valor predeterminado es 1, lo que significa que un tallo representa una unidad. Puedes ajustar este valor para agrupar los datos de manera diferente.

  • width: Controla el ancho de la gráfica en el diagrama de tallos y hojas

  • atom: Permite definir una función personalizada que determine cómo se deben representar las hojas en el diagrama de tallos y hojas.

Ejemplo 1

Supongamos que tenemos un conjunto de datos que representa las calificaciones de un grupo de estudiantes en un examen. Queremos crear un diagrama de tallos y hojas para examinar la distribución de calificaciones.

# Datos de ejemplo: calificaciones de un grupo de estudiantes
calificaciones <- c(12, 7, 11, 18, 12, 5, 9, 11, 16, 14, 2, 18, 20)

# Crear un diagrama de tallos y hojas
stem(calificaciones, scale = 2, width = 15, atom = 10)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   0 | 2
##   0 | 579
##   1 | 112
##   1 | 688
##   2 | 0

Ejemplo 2

longitudes <- c(12.24, 12.45, 12.56, 13.21, 13.32, 13.45, 14.12, 14.25, 15.09, 15.21, 15.33, 15.45, 16.02, 16.13, 16.25, 16.37, 16.45, 17.01, 17.15, 17.29, 17.34, 17.45)

stem(longitudes, scale=1)
## 
##   The decimal point is at the |
## 
##   12 | 256235
##   14 | 131235
##   16 | 0134502335
stem(longitudes, scale=2)
## 
##   The decimal point is at the |
## 
##   12 | 256
##   13 | 235
##   14 | 13
##   15 | 1235
##   16 | 01345
##   17 | 02335
stem(longitudes, scale=4)
## 
##   The decimal point is at the |
## 
##   12 | 2
##   12 | 56
##   13 | 23
##   13 | 5
##   14 | 13
##   14 | 
##   15 | 123
##   15 | 5
##   16 | 0134
##   16 | 5
##   17 | 0233
##   17 | 5
stem(longitudes, scale=10)
## 
##   The decimal point is 1 digit(s) to the left of the |
## 
##   122 | 4
##   124 | 56
##   126 | 
##   128 | 
##   130 | 
##   132 | 12
##   134 | 5
##   136 | 
##   138 | 
##   140 | 2
##   142 | 5
##   144 | 
##   146 | 
##   148 | 
##   150 | 9
##   152 | 13
##   154 | 5
##   156 | 
##   158 | 
##   160 | 23
##   162 | 57
##   164 | 5
##   166 | 
##   168 | 
##   170 | 15
##   172 | 94
##   174 | 5
stem(longitudes, scale=2, width =5)#Mientras más bajo más compacto
## 
##   The decimal point is at the |
## 
##   12 | 
##   13 | 
##   14 | 
##   15 | 
##   16 | 
##   17 |
stem(longitudes, scale=2, width =15)
## 
##   The decimal point is at the |
## 
##   12 | 256
##   13 | 235
##   14 | 13
##   15 | 123
##   16 | 013
##   17 | 023
stem(longitudes, scale=20, width =15)
## 
##   The decimal point is 1 digit(s) to the left of the |
## 
##   122 | 4
##   123 | 
##   124 | 5
##   125 | 6
##   126 | 
##   127 | 
##   128 | 
##   129 | 
##   130 | 
##   131 | 
##   132 | 1
##   133 | 2
##   134 | 5
##   135 | 
##   136 | 
##   137 | 
##   138 | 
##   139 | 
##   140 | 
##   141 | 2
##   142 | 5
##   143 | 
##   144 | 
##   145 | 
##   146 | 
##   147 | 
##   148 | 
##   149 | 
##   150 | 9
##   151 | 
##   152 | 1
##   153 | 3
##   154 | 5
##   155 | 
##   156 | 
##   157 | 
##   158 | 
##   159 | 
##   160 | 2
##   161 | 3
##   162 | 5
##   163 | 7
##   164 | 5
##   165 | 
##   166 | 
##   167 | 
##   168 | 
##   169 | 
##   170 | 1
##   171 | 5
##   172 | 9
##   173 | 4
##   174 | 5
stem(longitudes, scale =2, width = 15, atom = 10)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   1 | 223
##   1 | 555
stem(longitudes, scale =2, width = 15, atom = 1)
## 
##   The decimal point is at the |
## 
##   12 | 256
##   13 | 235
##   14 | 13
##   15 | 123
##   16 | 013
##   17 | 023

Ejemplo con Dataset

Para poder usar un Dataset tendremos que instalar paquetes como “readr” y “Rcpp”. Estos mismos te los dice rstudio cuando vas a importar la data.

Analirazaremos la media de costo por jugador de plantilla de 100 equipos Europeos de un alto nivel competitivo

a <- read.csv("C:/Users/wilde/OneDrive/Escritorio/most_valuable_teams .csv")
datos_numericos <- as.numeric(gsub("[^0-9.]", "", a$Market_value_of_players))
a$Club
##   [1] "Manchester City"               "Paris Saint-Germain"          
##   [3] "Manchester United"             "Chelsea FC"                   
##   [5] "Liverpool FC"                  "Bayern Munich"                
##   [7] "Real Madrid"                   "Atlético de Madrid"           
##   [9] "Tottenham Hotspur"             "FC Barcelona"                 
##  [11] "Juventus FC"                   "Inter Milan"                  
##  [13] "Borussia Dortmund"             "Leicester City"               
##  [15] "Arsenal FC"                    "SSC Napoli"                   
##  [17] "RB Leipzig"                    "AC Milan"                     
##  [19] "Everton FC"                    "Sevilla FC"                   
##  [21] "Atalanta BC"                   "AS Roma"                      
##  [23] "Aston Villa"                   "Wolverhampton Wanderers"      
##  [25] "Real Sociedad"                 "West Ham United"              
##  [27] "Bayer 04 Leverkusen"           "AS Monaco"                    
##  [29] "Olympique Lyon"                "Ajax Amsterdam"               
##  [31] "SS Lazio"                      "Borussia Mönchengladbach"     
##  [33] "Villarreal CF"                 "VfL Wolfsburg"                
##  [35] "SL Benfica"                    "LOSC Lille"                   
##  [37] "FC Porto"                      "Olympique Marseille"          
##  [39] "Leeds United"                  "Valencia CF"                  
##  [41] "ACF Fiorentina"                "Brighton & Hove Albion"       
##  [43] "Newcastle United"              "Southampton FC"               
##  [45] "Crystal Palace"                "Eintracht Frankfurt"          
##  [47] "Real Betis Balompié"           "OGC Nice"                     
##  [49] "US Sassuolo"                   "TSG 1899 Hoffenheim"          
##  [51] "Sporting CP"                   "Norwich City"                 
##  [53] "Athletic Bilbao"               "Stade Rennais FC"             
##  [55] "Torino FC"                     "Shakhtar Donetsk"             
##  [57] "Zenit St. Petersburg"          "VfB Stuttgart"                
##  [59] "Brentford FC"                  "Getafe CF"                    
##  [61] "PSV Eindhoven"                 "Cagliari Calcio"              
##  [63] "Red Bull Salzburg"             "Club Brugge KV"               
##  [65] "Clube de Regatas do Flamengo"  "Fulham FC"                    
##  [67] "Burnley FC"                    "Celta de Vigo"                
##  [69] "Sociedade Esportiva Palmeiras" "Bologna FC 1909"              
##  [71] "Hertha BSC"                    "Watford FC"                   
##  [73] "Dynamo Kyiv"                   "Besiktas JK"                  
##  [75] "KRC Genk"                      "Spartak Moscow"               
##  [77] "SC Freiburg"                   "UC Sampdoria"                 
##  [79] "Sheffield United"              "SC Braga"                     
##  [81] "Olympiacos Piraeus"            "Fenerbahce SK"                
##  [83] "FK Krasnodar"                  "AFC Bournemouth"              
##  [85] "Levante UD"                    "GNK Dinamo Zagreb"            
##  [87] "Hellas Verona"                 "Rangers FC"                   
##  [89] "Club Atlético River Plate"     "Galatasaray A.S."             
##  [91] "Udinese Calcio"                "Feyenoord Rotterdam"          
##  [93] "1.FSV Mainz 05"                "RCD Espanyol Barcelona"       
##  [95] "Genoa CFC"                     "Clube Atlético Mineiro"       
##  [97] "FC Augsburg"                   "Lokomotiv Moscow"             
##  [99] "Trabzonspor"                   "CA Osasuna"
datos_numericos
##   [1] 45.75 28.51 33.47 32.69 32.57 32.80 29.39 34.33 29.04 23.34 25.62 20.48
##  [13] 16.64 19.65 21.10 20.71 18.06 16.68 16.68 16.52 15.98 13.68 17.01 16.30
##  [25] 14.50 14.72 13.06 12.53 12.02 13.73  9.90 10.71 12.45  8.99  9.84 10.46
##  [37] 10.19  8.76 10.53  9.33  9.57  9.54  9.66  8.94  9.21  7.23  7.98  8.39
##  [49]  8.03  6.49  8.62  6.54  7.24  6.61  6.14  6.34  7.90  5.14  5.37  6.38
##  [61]  5.85  5.29  5.44  4.85  4.77  5.09  6.05  6.85  4.62  5.09  4.89  5.12
##  [73]  4.43  3.97  5.29  5.02  4.81  4.62  4.60  4.26  3.59  3.57  4.72  4.52
##  [85]  4.02  3.77  4.17  3.62  3.58  3.30  4.06  3.62  4.02  4.01  2.92  3.18
##  [97]  3.47  3.35  3.32  3.46

Ahora procederemos a trabajar con el diagrama de tallos y hojas

stem(datos_numericos, scale = 2, width = 50, atom = 0.1)
## 
##   The decimal point is at the |
## 
##    2 | 9233455666668
##    4 | 000012345666788990111133449
##    6 | 11345569229
##    8 | 00468902356789
##   10 | 2557
##   12 | 055177
##   14 | 57
##   16 | 0356770
##   18 | 17
##   20 | 571
##   22 | 3
##   24 | 6
##   26 | 
##   28 | 504
##   30 | 
##   32 | 6785
##   34 | 3
##   36 | 
##   38 | 
##   40 | 
##   42 | 
##   44 | 8
stem(datos_numericos, scale = 5, width = 50, atom = 0.1)
## 
##   The decimal point is at the |
## 
##    2 | 9
##    3 | 233455666668
##    4 | 00001234566678899
##    5 | 0111133449
##    6 | 11345569
##    7 | 229
##    8 | 004689
##    9 | 02356789
##   10 | 2557
##   11 | 
##   12 | 055
##   13 | 177
##   14 | 57
##   15 | 
##   16 | 035677
##   17 | 0
##   18 | 1
##   19 | 7
##   20 | 57
##   21 | 1
##   22 | 
##   23 | 3
##   24 | 
##   25 | 6
##   26 | 
##   27 | 
##   28 | 5
##   29 | 04
##   30 | 
##   31 | 
##   32 | 678
##   33 | 5
##   34 | 3
##   35 | 
##   36 | 
##   37 | 
##   38 | 
##   39 | 
##   40 | 
##   41 | 
##   42 | 
##   43 | 
##   44 | 
##   45 | 8

Diagrama de cajas

Los diagramas de caja, también conocidos como de caja y bigotes son gráficos que muestra la distribución de una variable usando cuartiles, de modo que de manera visual podemos inferir algunas cosas sobre su dispersión, ubicación y simetría.

Ejemplo - datos

datos_edad <- c(10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60)
# diagrama de caja
boxplot(datos_edad, 
        main="Diagrama de Caja -  (edades)", 
        ylab="Edad", 
        col="lightblue", 
        border="black")

  1. Mediana : La línea en el centro de la caja representa la mediana de las edades, que es aproximadamente 35 años en este caso. Esto significa que la mitad de las personas tienen 35 años o menos, y la otra mitad tiene más de 35 años.

  2. Caja : La caja abarca desde el primer cuartil (Q1) hasta el tercer cuartil (Q3) de las edades. Q1 es aproximadamente 22.5 años, y Q3 es aproximadamente 47.5 años. Esto significa que el 50% central de las edades se encuentra en este rango. Las edades entre 22.5 y 47.5 años son las edades intercuartiles.

  3. Bigotes : Los bigotes se extienden desde los bordes de la caja. En este caso, no hay valores atípicos (outliers) representados como puntos o asteriscos fuera de los bigotes. Esto indica que no hay edades extremadamente por encima o por debajo de la norma en tu conjunto de datos. Los bigotes abarcan todo el rango de edades, desde 10 años hasta 60 años.

  4. Extremos (líneas fuera de los bigotes) : En este diagrama de caja, los extremos representan los valores máximo (60 años) y mínimo (10 años) dentro de 1,5 veces el rango intercuartil (IQR). No hay valores atípicos más allá de estos extremos.

En resumen, el diagrama de caja muestra que las edades en tu conjunto de datos están distribuidas desde alrededor de 10 años hasta 60 años, con la mayoría de las edades concentradas entre aproximadamente 22,5 y 47,5 años. No hay valores atípicos en este conjunto de datos, lo que sugiere que las edades se distribuyen de manera relativamente uniforme dentro de ese rango intercuartil.

Ejemplo 2

# Datos de ejemplo: pesos de niños que no hacen deporte en kilogramos
pesos_ninos <- c(25, 28, 31, 33, 36, 38, 39, 41, 42, 45, 48, 50, 52, 55, 57)

# Creamos un diagrama de caja
boxplot(pesos_ninos, 
        main="Diagrama de Caja - Pesos de Niños que no hacen deporte",
        ylab="Peso (kg)",
        col="lightblue",
        border="black")

Mediana : La línea en el centro de la caja representa la mediana del peso de los niños que no hacen deporte. La mediana se encuentra alrededor de 41 kilogramos, lo que significa que la mitad de los niños pesa más de 41 kg y la otra mitad pesa menos de 41 kg.

Caja : La caja abarca desde el primer cuartil (Q1) hasta el tercer cuartil (Q3) de los pesos. El primer cuartil (Q1) pesa alrededor de 33 kg y el tercer cuartil (Q3) pesa alrededor de 50 kg. Esto indica que el 50% central de los niños pesa entre aproximadamente 33 y 50 kg.

Bigotes : Los bigotes se extienden desde los bordes de la caja. En este caso, no hay valores atípicos representados como puntos o asteriscos fuera de los bigotes.

Extremos (líneas fuera de los bigotes) : En este diagrama de caja, los extremos representan el valor mínimo (alrededor de 25 kg) y el valor máximo (alrededor de 57 kg) dentro de 1,5 veces el rango intercuartil.

Ejemplo con Dataset

Para este ejemplo, usaremos una data llamada “Bank Marketing Data Set”, que contiene información de personas contactadas en una campaña de marketing directo puesta en marcha por un banco de Portugal.

download.file(
  url = "https://raw.githubusercontent.com/jboscomendoza/r-principiantes-bookdown/master/datos/bank.csv", 
  destfile = "bank.csv"
)
banco <- read.csv(file = "bank.csv", sep = ";")
View(banco)
library(ggplot2)  
## Warning: package 'ggplot2' was built under R version 4.2.3
ggplot(data = banco, aes(x = education, y = age, color = education)) +
  geom_boxplot() +
  theme_bw()

Base de datos ChickWeight contiene 578 registros transversales y 4 variables de un experimento sobre el efecto de la dieta en el crecimiento de pollos.

View(ChickWeight)
boxplot(ChickWeight$weight)

summary(ChickWeight)
##      weight           Time           Chick     Diet   
##  Min.   : 35.0   Min.   : 0.00   13     : 12   1:220  
##  1st Qu.: 63.0   1st Qu.: 4.00   9      : 12   2:120  
##  Median :103.0   Median :10.00   20     : 12   3:120  
##  Mean   :121.8   Mean   :10.72   10     : 12   4:118  
##  3rd Qu.:163.8   3rd Qu.:16.00   17     : 12          
##  Max.   :373.0   Max.   :21.00   19     : 12          
##                                  (Other):506
library(ggplot2)
ggplot(ChickWeight, aes(x=Diet, y=weight, color=Diet)) +
  geom_boxplot()

Conclusión

En el mundo empresarial, el análisis de datos desempeña un papel crucial para la toma de decisiones efectivas. Las gráficas de tallos y hojas y los diagramas de cajas son herramientas esenciales para comprender la distribución de datos y evaluar el rendimiento de una empresa, la eficacia de sus estrategias y la detección de anomalías. Utilizando R Studio, es posible implementar estas representaciones gráficas de manera eficiente y personalizada.

Estas técnicas no solo permiten a las empresas entender mejor sus datos, sino que también facilitan la comunicación de resultados a través de visualizaciones claras y concisas. Al incorporar las gráficas de tallos y hojas y los diagramas de cajas en su arsenal de análisis de datos en R Studio, las empresas pueden tomar decisiones más fundamentadas y mejorar su capacidad para adaptarse y competir en un entorno empresarial en constante evolución.