InicioGr谩ficosGr谩fico de tallo y hojas en R

Gr谩fico de tallo y hojas en R

Aprende a crear un diagrama de tallo y hojas en R

Un gr谩fico de tallo y hojas, tambi茅n conocido como diagrama de tallo y hojas es una representaci贸n cl谩sica de la distribuci贸n de datos cuantitativos, similar a un histograma pero en texto, donde los datos se dividen en tallo (generalmente el primer o primeros d铆gitos del n煤mero) y hoja (el 煤ltimo d铆gito). El gr谩fico de tallo y hojas en R puede ser 煤til cuando se trabaja con pocas observaciones (15-150 puntos de datos). En este tutorial aprender谩s qu茅 es un diagrama de tallo y hojas y c贸mo hacerlo en R.

驴C贸mo interpretar un diagrama de tallo y hojas?

Sup贸n que tienes el siguiente vector:

\textbf{x} = (12, 15, 16, 21, 24, 29, 30, 31, 32, 33, \\ \phantom{\textbf{x} = (} 45, 46, 49, 50, 52, 58, 60, 63, 64, 65).

Para crear manualmente un diagrama de tallo y hojas, debes dividir los datos en tallos (en este caso, el primer d铆gito del n煤mero) y hojas (el segundo d铆gito). Por tanto, el gr谩fico resultante ser谩 el siguiente:

TalloHojas
1|256
2|149
3|0123
4|569
5|058
6|0345

En consecuencia, en este ejemplo se puede leer 1|256 como 12, 15 y 16; 2|149 como 21, 24 y 29 y as铆 con los dem谩s.

El tallo no siempre es un solo d铆gito o el primer d铆gito del n煤mero. Como ejemplo, si est谩s trabajando con un n煤mero con 4 d铆gitos decimales, el tallo podr铆a estar formado por los primeros tres d铆gitos decimales y la correspondiente hoja por el cuarto, siempre que indiques qu茅 tan lejos est谩 el punto decimal a la derecha del separador.

La funci贸n stem en R

La funci贸n stem permite crear gr谩ficos de tallo y hojas en R, cuya sintaxis es la siguiente:

stem(x,            # Vector num茅rico
     scale = 1,    # Altura del gr谩fico
     width = 80,   # Ancho del gr谩fico
     atom = 1e-08) # Par谩metro de tolerancia

Cabe se帽alar que si el argumento de entrada contiene valores no finitos o faltantes, no se tienen en cuenta. Considera, por ejemplo, el siguiente vector:

datos <- c(12, 15, 16, 21, 24, 29, 30, 31, 32, 33, 
           45, 46, 49, 50, 52, 58, 60, 63, 64, 65)

Puedes crear el gr谩fico simplemente escribiendo:

stem(datos)

La salida es el texto que se muestra en el siguiente bloque de c贸digo. Ten en cuenta que, a modo aclaratorio, en los comentarios se especifican los valores correspondientes a cada tallo.

 The decimal point is 1 digit(s) to the right of the |

  0 | 256                 # <-- 12, 15, 16
  2 | 1490123             # <-- 21, 24, 29, 30, 31, 32, 33
  4 | 569028              # <-- 45, 46, 49, 50, 52, 58
  6 | 0345                # <-- 60, 63, 64, 65

Sin embargo, es posible que hayas notado que la salida no es igual al ejemplo que revisamos en la primera secci贸n. Esto se debe a que los tallos est谩n agrupados (el primer tallo es para 0 y 1, el segundo para 2 y 3, etc.). Para resolver este problema, puedes cambiar la altura del diagrama con el argumento scale de la siguiente manera:

stem(datos, scale = 2)
The decimal point is 1 digit(s) to the right of the |

  1 | 256                 # <-- 12, 15, 16
  2 | 149                 # <-- 21, 24, 29
  3 | 0123                # <-- 30, 31, 32, 33
  4 | 569                 # <-- 45, 46, 49
  5 | 028                 # <-- 50, 52, 58
  6 | 0345                # <-- 60, 63, 64, 65

Ten en cuenta que si estableces scale = 3, cada tallo se duplicar谩. En este ejemplo, el primero de los tallos duplicados muestra las hojas correspondientes a valores inferiores a 5 y el segundo las hojas correspondientes a valores iguales o superiores a 5.

stem(datos, scale = 3)
 The decimal point is 1 digit(s) to the right of the |

  1 | 2                   # <-- 12
  1 | 56                  # <-- 15, 16
  2 | 14
  2 | 9
  3 | 0123
  3 | 
  4 | 
  4 | 569
  5 | 02
  5 | 8
  6 | 034
  6 | 5

La funci贸n stem.leaf

La funci贸n stem.leaf del paquete aplpack es una alternativa a la funci贸n stem de base R, que permite configuraciones adicionales. Hay varios argumentos que se pueden personalizar, por lo tanto, recuerda consultar la documentaci贸n de la funci贸n con help(stem.leaf) o ?stem.leaf para obtener m谩s detalles. Para crear el diagrama de tallo y hoja con argumentos predeterminados, puedes escribir:

# install.packages("aplpack")
library(aplpack)

stem.leaf(datos)
1 | 2: represents 12
 leaf unit: 1
            n: 20
   1    1* | 2
   3    1. | 56
   5    2* | 14
   6    2. | 9
  (4)   3* | 0123
        3. | 
        4* | 
  (3)   4. | 569
   7    5* | 02
   5    5. | 8
   4    6* | 034
   1    6. | 5

Es posible que hayas notado que la salida es similar a la de stem(datos, scale = 3). En este caso, si quieres personalizar el n煤mero de partes en las que se divide el tallo, puedes usar el argumento m.

stem.leaf(datos, m = 1)
1 | 2: represents 12
 leaf unit: 1
            n: 20
   3    1 | 256
   6    2 | 149
  (4)   3 | 0123
  (3)   4 | 569
   7    5 | 028
   4    6 | 0345

Diagrama de tallo y hoja comparativo (back to back) en R

Otra funci贸n interesante del paquete aplpack es que permite comparar dos gr谩ficos de tallo y hoja con la funci贸n stem.leaf.backback, que por defecto dibuja un gr谩fico back to back:

# install.packages("aplpack")
library(aplpack)

set.seed(1)
datos2 <- sample(datos, replace = TRUE)

stem.leaf.backback(datos, datos2)
________________________________
  1 | 2: represents 12, leaf unit: 1 
         datos      datos2    
________________________________
   1        2| 1* |22       2   
   3       65| 1. |5        3   
   5       41| 2* |1444     7   
   6        9| 2. |             
  (4)    3210| 3* |002233  (6)  
             | 3. |             
             | 4* |             
  (3)     965| 4. |5        7   
   7       20| 5* |0002     6   
   5        8| 5. |             
   4      430| 6* |34       2   
   1        5| 6. |             
             | 7* |             
________________________________
n:         20      20       
________________________________

Adem谩s, si configuras el argumento back.to.back como FALSE, los gr谩ficos se mostrar谩n uno al lado del otro, en la forma habitual de representaci贸n.

stem.leaf.backback(datos, datos2, back.to.back = FALSE)
________________________________
  1 | 2: represents 12, leaf unit: 1 
      datos         datos        
________________________________
  1* |2        1  |22       2   
  1. |56       3  |5        3   
  2* |14       5  |1444     7   
  2. |9        6  |             
  3* |0123    (4) |002233  (6)  
  3. |            |             
  4* |            |             
  4. |569     (3) |5        7   
  5* |02       7  |0002     6   
  5. |8        5  |             
  6* |034      4  |34       2   
  6. |5        1  |             
  7* |            |             
________________________________
n:    20           20           
________________________________

Guardar gr谩fico de tallo y hojas en R como imagen

Los gr谩ficos de tallo son gr谩ficos de texto, por lo que se imprimen en la consola. Sin embargo, en algunas situaciones es interesante guardar el gr谩fico como cualquier otro. En lugar de crear una captura de pantalla de baja calidad, puedes utilizar la funci贸n capture.output para guardar la salida como car谩cter y pegarla en un gr谩fico vac铆o con la funci贸n text:

# El alto y ancho puede depender de tus datos
windows(width = 4, height = 5)

plot.new()

out <- capture.output(stem(datos, scale = 2))
text(0, 1, paste(out, collapse = "\n"), adj = c(0, 1))
Guardar gr谩fico de tallo y hojas en R como imagen

Una alternativa es usar la funci贸n slider.stem.leaf, provista por los paquetes tcltk y aplpack. Esta funci贸n abrir谩 una ventana para personalizar en tiempo real el diagrama de tallo y hoja resultante y guardarlo:

# install.packages("tcltk")
library(tcltk)

# install.packages("aplpack")
library(aplpack)

slider.stem.leaf(datos)
Slider para configurar diagrama de tallo y hojas
Diagrama de tallo y hojas como imagen con el paquete aplpack