4 Gráficos para variables cualitativas

En este capítulo se presentan funciones para la creación de gráficos para variables cualitativas.

4.1 Función barplot

Los gráficos de barras son útiles para representar las frecuencias absolutas o relativas asociadas a los niveles de una variable cualitativa y la función barplot se usa para obtener un gráfico de barras. La estructura de la función barplot con los argumentos más comunes de uso se muestra a continuación.

barplot(height, beside, horiz)

Los argumentos de la función barplot son:

  • height: vector o matriz con la información de las frecuencias absolutas o relativas.
  • beside: valor lógico para indicar si las barras deben estar al lado cuando la información ingresada es una matriz.
  • horiz: valor lógico para indicar si el diagrama de barras debe ser horizontal, por defecto es FALSE.

La función barplot tiene otros parámetros que pueden ser consultados en la ayuda de la función por medio de la instrucción ?barplot.

Ejemplo

Suponga que queremos construir un diagrama de barras para las frecuencias relativas de la variable estrato socioeconómico del apartamento de la base de datos sobre apartamentos usados en Medellín.

A continuación se muestra el código necesario para cargar la base de datos aptos2015. Antes de construir el diagrama de barras solicitado es necesario construir la tabla de frecuencias para la variable estrato, para esto se usa la función table y los resultados se almacenan en el objeto tabla1 que contiene las frecuencias absolutas. Para obtener las frecuencias relativas se usa luego la función prop.table sobre el objeto tabla1.

url <- 'https://tinyurl.com/hwhb769'
datos <- read.table(file=url, header=T)
tabla1 <- table(datos$estrato)
tabla1 <- prop.table(tabla1)
tabla1
## 
##          2          3          4          5          6 
## 0.01152738 0.23198847 0.19884726 0.20893372 0.34870317

Una vez se tiene el objeto con la información de las frecuencias relativas se puede dibujar el diagrama de barras usando el siguiente código.

barplot(tabla1, xlab='Estrato socioeconómico',
        ylab='Frecuencia relativa', las=1)
Diagrama de barras para el estrato socioeconómico de los apartamentos usados.

Figure 4.1: Diagrama de barras para el estrato socioeconómico de los apartamentos usados.

En la Figura 4.1 se presenta el diagrama de barras solicitado. Se observa que hay pocos apartamentos (1.15%) pertenecientes al estrato dos, los estratos tres, cuatro y cinco aportan porcentajes similares a la base de datos y que el estrato 6 es el que más apartamentos aporta a la base de datos, 34.87%.

Algunas veces se acostumbra a colocar las frecuencias relativas sobre la parte superior de las barras para facilitar la lectura. A continuación se presenta el código para replicar la Figura 4.1 con las frecuencias relativas. Lo primero que se hace es dibujar el diagrama de barras y almacenar la información de él en el objeto xx para luego poder usar la ubicación de cada una de las barras. Note que se agregó también ylim=c(0, 0.45) para conseguir una ampliación del eje vertical, esto para lograr que se vea el número sobre la barra del estrato 6. Luego se usa la función text para incluir un texto en las coordenadas x=xx y y=tabla1, el parámetro pos=3 coloca el texto en la parte superior de las coordenadas y el parámetro label sirve para indicar lo que se desea escribir en las coordenadas indicadas, en este caso son las frecuencias relativas almacenadas en tabla1.

xx <- barplot(tabla1, ylim=c(0, 0.45), col=gray(0.9),
              xlab='Estrato socioeconómico',
              ylab='Frecuencia relativa', las=1)

text(x=xx, y=tabla1, pos=3, cex=0.8, col="red",
     label=round(tabla1, 4))
Diagrama de barras para el estrato socioeconómico de los apartamentos usados con las frecuencias relativas sobre las barras.

Figure 4.2: Diagrama de barras para el estrato socioeconómico de los apartamentos usados con las frecuencias relativas sobre las barras.

En la Figura 4.2 se muestra el diagrama de barras modificado. Note que si no se hubiese usado ylim=c(0, 0.45) al dibujar el diagrama, la marca sobre la última barra no se podría ver.

Ejemplo

Suponga que queremos construir un diagrama de barras para comparar la variable presencia de parqueadero con el estrato socioeconómico en la base de datos sobre apartamentos usados en Medellín.

La función barplot también puede ser usada para representar una tabla de frecuencia con dos variables. Para obtener la tabla de frecuencia para relacionar parqueadero con estrato se usa el siguiente código.

tabla2 <- table(datos$parqueadero, datos$estrato)
tabla2
##     
##        2   3   4   5   6
##   no   5  88  24   8   1
##   si   3  73 114 137 241

El anterior resultado es la tabla de contingencia entre las variables parqueadero y estrato, de esta tabla vemos que para estratos superiores el número de apartamentos que si tienen parqueadero es mayor que los apartamentos sin parqueadero. La tabla anterior se puede representar gráficamente usando el siguiente código.

barplot(tabla2)
Diagrama I de barras la relación entre parqueadero y estrato.

Figure 4.3: Diagrama I de barras la relación entre parqueadero y estrato.

En la Figura 4.3 se muestra el gráfico de barras sin editar, el color negro representa la frecuencia de los apartamentos sin parqueadero (no) y el color gris representa los apartamentos con parqueadero (si), las barras están una encima de la otra y la comparación no es tan clara como debería. Para mejorar la comparación se usa el parámetro besides=TRUE, a continuación el código utilizado.

barplot(tabla2, beside=TRUE)
Diagrama II de barras la relación entre parqueadero y estrato.

Figure 4.4: Diagrama II de barras la relación entre parqueadero y estrato.

En la Figura 4.4 está el gráfico de barras obtenido agregando besides=TRUE para que las barras se ubiquen una junto a la otra. Este gráfico se puede mejorar aún más colocando una leyenda para identificar las barras, nombrando los ejes y usando otros colores, a continuación el código utilizado.

barplot(tabla2, beside = TRUE, las=1, 
        xlab='Estrato', ylab='Frecuencia',
        col = c("lightblue", "mistyrose"),
        ylim = c(0, 250))
legend('topleft', legend=rownames(tabla2), bty='n',
       fill=c("lightblue", "mistyrose"))
Relación entre la presencia de parqueadero y el estrato socioeconómico.

Figure 4.5: Relación entre la presencia de parqueadero y el estrato socioeconómico.

En la Figura 4.5 se observa el gráfico de barras solicitado, se observa claramente que en los estratos 4, 5 y 6 predominan los aparatamentos con parqueadero.

Es posible construir una tabla de contingencia de frecuencia relativa para ver cómo es el comportamiento de tener o no parquedadero dentro de cada estrato, el siguiente código construye la tabla3 con la información necesaria. La función prop.table permite obtener la tabla de frecuencias relativas a partir de una tabla de frecuencias absolutas, el parámetro margin sirve para indicar si las frecuencias relativas se deben obtener por fila (margin=1) o por columnas (margin=2).

tabla3 <- prop.table(tabla2, margin=2)
tabla3
##     
##                2           3           4           5           6
##   no 0.625000000 0.546583851 0.173913043 0.055172414 0.004132231
##   si 0.375000000 0.453416149 0.826086957 0.944827586 0.995867769

De la anterior tabla se ve que el porcentaje de apartamentos con parqueadero supera enormemente el los apartamentos sin parqueadero para los estratos 6, 5 y 4. El código para generar un gráfico asociado a la tabla3 se muestra a continuación.

barplot(tabla3, 
        beside = TRUE, las=1, 
        xlab='Estrato', ylab='Frecuencia relativa',
        col = c("lightblue", "mistyrose"),
        ylim = c(0, 1))
legend('topleft', legend=rownames(tabla2), bty='n',
       fill=c("lightblue", "mistyrose"))
Relación entre la presencia de parqueadero y el estrato socioeconómico.

Figure 4.6: Relación entre la presencia de parqueadero y el estrato socioeconómico.

¿Cuáles son las ventajas y/o desventajas de las figuras 4.5 y 4.6 al ser presentadas en un informe?

4.2 Función pie

En R es posible construir gráficos de pastel para representar una tabla de frecuencia relativa o absoluta, sin embargo este tipo de gráficos no es recomendable y en la ayuda de la función se hace la siguiente advertencia:

Pie charts are a very bad way of displaying information. The eye is good at judging linear measures and bad at judging relative areas. A bar chart or dot chart is a preferable way of displaying this type of data.

La estructura de la función pie con los argumentos más comunes de uso se muestra a continuación.

pie(x, labels)

Los argumentos de la función pie son:

  • x: vector con elementos no negativos que representan las frecuencias de los niveles de la variable cualitativa.
  • labels: vector con los nombres a colocar en cada parte del pastel, por defecto se usan los nombres del vector x.

Ejemplo

Dibujar un gráfico de pastel para las frecuencias relativas de la variable estrato socioeconómico del apartamento de la base de datos sobre apartamentos usados en Medellín.

La tabla1 construída en el primer ejemplo de barplot se utiliza para construir el gráfico solicitado. Abajo el código necesario para construir el gráfico.

nombres <- paste('Estrato ', 2:6)
pie(x=tabla1, labels=nombres, 
    main='Gráfico de pastel NO recomendado!!!')
Gráfico de pastel para las frecuencias relativas del estrato socioeconómico.

Figure 4.7: Gráfico de pastel para las frecuencias relativas del estrato socioeconómico.

La Figura 4.7 presenta el gráfico de pastel construído con la instrucción anterior.

4.3 Función dotchart

Los gráficos de puntos son útiles para representar tablas de frecuencia (de 1 o 2 vías) o tablas de resumen en relación a una o dos variables. La estructura de la función dotchart se muestra a continuación.

dotchart(x, labels=NULL, groups=NULL, gdata=NULL,
         pt.cex, pch, color, lcolor, ...)

Los argumentos de la función dotchart son:

  • x: vector o matriz con la información de las frecuencias o medida de resumen a representar. Si x es una matriz las columnas representarán agrupaciones.
  • labels: vector con los nombres a usar para los puntos, por defecto toma los nombres de las filas de la matriz x.
  • groups: vector con los nombres a usar para los grupos, por defecto toma los nombres de las columnas de la matriz x.
  • cex: tamaño de los nombres a mostrar en los ejes.
  • pt.cex: tamaño del punto.
  • pch: tipo de punto a usar, las diferentes opciones para pch están disponibles en la Figura 6.11.
  • color: tipo de color usar para los puntos.
  • lcolor: color para la línea asociada a cada punto.
  • ...: otros parámetros gráficos que pueden ser pasados como argumentos.

Ejemplo

Suponga que queremos explorar el rendimiento de del combustible (mpg) para los 32 autos de la base de datos mtcars usando un diagrama de puntos.

A continuación se muestra el código necesario para crear el gráfico de puntos deseado.

mtcars <- mtcars[order(mtcars$mpg), ]  # Para re-ordenar la base
dotchart(mtcars$mpg, labels=row.names(mtcars), 
         cex=0.6, xlab="mpg")
Gráfico de puntos para el rendimiento de combustible (`mpg`) en la base de datos `mtcars`.

Figure 4.8: Gráfico de puntos para el rendimiento de combustible (mpg) en la base de datos mtcars.

En la Figura 4.8 se tiene el gráfico de puntos para la variable mpg, de esta figura se observa fácilmente que el Toyota Corolla tiene el mayor rendimiento de combustible y que el Cadillac Fleetwood el menor.

Ejemplo

Suponga que se tiene una tabla de contingencia con la información del número de hombres y mujeres que sufren de una enfermedad rara en cuatro ciudades importantes del mundo, a continuación la matriz x con la información recolectada.

x <- matrix(c(4, 6, 30, 18, 7, 13, 35, 20),
            ncol=4, byrow=TRUE)
colnames(x) <- c('Madrid', 'Londres', 'Paris', 'Miami')
rownames(x) <- c('Hombre', 'Mujer')
x
##        Madrid Londres Paris Miami
## Hombre      4       6    30    18
## Mujer       7      13    35    20

En la salida anterior se presenta la matriz x, de esta matriz se observa que en Madrid hay 11 personas, 4 hombres y 7 mujeres que sufren de la enfermedad, las demás columnas se interpretan de forma similar.

Para construir un gráfico de puntos con el objetivo de presentar la información de la matriz x se utiliza el código mostrado abajo. En la Figura 4.9 se presenta el gráfico de puntos obtenido y de esta figura se nota claramente que en París es donde hay más personas que sufren de la enfermedad.

dotchart(x=x)
Gráfico de puntos para una tabla de contingencia de 2 variables.

Figure 4.9: Gráfico de puntos para una tabla de contingencia de 2 variables.

El gráfico de puntos presentado en la Figura 4.9 se puede mejorar usando los otros argumentos disponibles en la función dotchart, a continuación el código y en la Figura 4.10 el resultado.

dotchart(x=x,
         pt.cex=2, pch=c(8, 21), color=c('blue', 'red'),
         lcolor='black', 
         xlab='Número de personas')
Gráfico de puntos mejorado para una tabla de contingencia de 2 variables.

Figure 4.10: Gráfico de puntos mejorado para una tabla de contingencia de 2 variables.

EJERCICIOS

Use funciones o procedimientos (varias líneas) de R para responder cada una de las siguientes preguntas.

Todas las preguntas siguientes están relacionadas con la base de datos sobre apartamentos usados en la ciudad de Medellín.

  1. Construya un diagrama de barras para representar las frecuencias ABSOLUTAS de la variable ubicación.
  2. Vuelva a construir el mismo diagrama de barras anterior pero de forma horizontal y agregando números de color azul para indicar las frecuencias.
  3. Construya una tabla de dos vías para las variables ubicación y parqueadero.
  4. Construya una tabla de frecuencias relativas para ver cómo se comporta la variable parqueadero dentro de cada ubicación.
  5. Dibuje un diagrama de barras para la tabla de frecuencias del punto anterior.