En esta sesión veremos la exploración de variables cuantitativas utilizando medidas de resumen y gráficos de caja.

Comenzamos creando un nuevo script en R y lo guardamos como medidas_boxplot. En este script iremos añadiendo los códigos que describimos más adelante.

1. Lectura de datos.

Utilizaremos el conjunto de datos de abalones disponible gratuitamente online. La documentación se encuentra en el siguiente enlace: https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.names

# Datos Abulones
enlace <- "https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data"
datos <- read.table(enlace, sep=",")
names(datos) <- c("sex","length","Diameter","Height","WholeWeight",
                  "ShuckedWeight","VisceraWeight","ShellWeight","Rings")

Luego, realizamos una transformación en las columnas para obtener las variables en milimetros y en gramos.

datos$length <- datos$length*200
datos$Diameter <- datos$Diameter*200
datos$Height <- datos$Height*200
datos$WholeWeight <- datos$WholeWeight*200
datos$ShuckedWeight <- datos$ShuckedWeight*200
datos$VisceraWeight <- datos$VisceraWeight*200
datos$ShellWeight <- datos$ShellWeight*200

2. Exploración básica

Vemos los primeros 6 registros:

head(datos) # primeros 6 
##   sex length Diameter Height WholeWeight ShuckedWeight VisceraWeight
## 1   M     91       73     19       102.8          44.9          20.2
## 2   M     70       53     18        45.1          19.9           9.7
## 3   F    106       84     27       135.4          51.3          28.3
## 4   M     88       73     25       103.2          43.1          22.8
## 5   I     66       51     16        41.0          17.9           7.9
## 6   I     85       60     19        70.3          28.2          15.5
##   ShellWeight Rings
## 1          30    15
## 2          14     7
## 3          42     9
## 4          31    10
## 5          11     7
## 6          24     8

Realizamos una exploración del tipo de columnas que tiene este dataset.

str(datos)
## 'data.frame':    4177 obs. of  9 variables:
##  $ sex          : chr  "M" "M" "F" "M" ...
##  $ length       : num  91 70 106 88 66 85 106 109 95 110 ...
##  $ Diameter     : num  73 53 84 73 51 60 83 85 74 88 ...
##  $ Height       : num  19 18 27 25 16 19 30 25 25 30 ...
##  $ WholeWeight  : num  102.8 45.1 135.4 103.2 41 ...
##  $ ShuckedWeight: num  44.9 19.9 51.3 43.1 17.9 28.2 47.4 58.8 43.3 62.9 ...
##  $ VisceraWeight: num  20.2 9.7 28.3 22.8 7.9 15.5 28.3 29.9 22.5 30.2 ...
##  $ ShellWeight  : num  30 14 42 31 11 24 66 52 33 64 ...
##  $ Rings        : int  15 7 9 10 7 8 20 16 9 19 ...

Observamos que en este dataframe todas las columnas son cuantitativas excepto sex. La variable sex es de tipo cualitativa y escala nominal.

3. Exploración de datos: Medidas de Resumen

Ahora, exploramos las medidas de tendencia central, de dispersión y de posición. Además, en aquellos casos pertinentes, crearemos también gráficos de cajas.

3.1. Variables cualitativas

Primero, vemos que la primera variable (sex) es una variable cualitativa nominal. En este caso, no podemos calcular más indicadores que la frecuencia y la moda. Lo realizamos creando una tabla de frecuencias:

library(summarytools)
freq(datos$sex)
## Frequencies  
## datos$sex  
## Type: Character  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##           F   1307     31.29          31.29     31.29          31.29
##           I   1342     32.13          63.42     32.13          63.42
##           M   1528     36.58         100.00     36.58         100.00
##        <NA>      0                               0.00         100.00
##       Total   4177    100.00         100.00    100.00         100.00

De esta tabla, observamos la frecuencia de cada una de las clases (F, M e I) y podemos determinar la moda: M con una proporción de 36.58%.

  • Reflexión: ¿Es posible obtener la media y mediana para esta variable (sex)?

3.2. Variables cuantitativas

Analizamos la variable length ya que es de tipo cuantitativa y de escala de razón. Por ello, podemos calcular todos los indicadores: medidas de posición, tendencia central y dispersión.

Utilizamos el comando summary para observar algunas medida de resumen:

summary(datos$length)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    15.0    90.0   109.0   104.8   123.0   163.0

Observemos que con este comando podemos obtener las medidas de tendencia central (media, mediana) y algunas medidas de posición (percentiles).

Para otras métricas, se debe utilizar comandos adicionales. Por ejemplo, para las medidas más comunes: media, varianza, desviación estandard, y coeficiente de variación, utilizaremos lo siguiente:

# Primero, asignamos la columna length a una variable llamada "x"
x <-  datos$length  

# Utilizamos los comandos correspondientes para obtener media, varianza y desv. estandard.
mean(x, na.rm = FALSE)    # Media aritmetica
## [1] 104.7984
var(x)                    # Varianza de una muestra
## [1] 576.8923
sd(x)                     # Desviación standard de una muestra
## [1] 24.01858
CV = sd(x)/mean(x)        # Coeficiente de variación
CV   # 22.91%
## [1] 0.2291884

Otros indicadores que se pueden obtener, son los siguientes:

median(x)                 # Mediana
## [1] 109
quantile(x, probs=c(0.5)) # Cuantil; probs: vector de probabilidades
## 50% 
## 109
min(x)                    # Valor mínimo de X
## [1] 15
max(x)                    # Valor máximo de X
## [1] 163
range(x)                  # Rango: Min y Max
## [1]  15 163

4. Gráficos de caja

Las variable cuantitativas ordinales, intervalo o de razon, pueden ser analizadas usando gráficos de caja.

Utilizaremos el siguiente comando simple para obtener un gráfico de cajas básico de la variable length:

boxplot(datos$length)

Con algunas líneas de código adicionales podemos personalizarlo:

4.1. Añadir un título:

boxplot(datos$length, 
        main="Boxplot para el largo de los abulones"
        )

4.2. Cambiar la orientación del gráfico.

boxplot(datos$length, 
        main="Boxplot para el largo de los abulones", 
        horizontal=TRUE,
        notch = TRUE
        )

Algunos ejemplos de boxplots para otras variables se ven a continuación:

boxplot(datos$Height, 
        horizontal=TRUE,
        notch = TRUE
        )

boxplot(datos$Rings, 
        horizontal=TRUE,
        notch = TRUE
        )

4.3. Cambiar el color de la caja.

# Gráfico de cajas de color celeste.
boxplot(datos$length, 
        main="Boxplot para el largo de los abulones",
        col="skyblue"
        )
        
# Punto que representa el promedio de los datos.
points(mean(datos$length), 
        col="red")

4.4. Comparar grupos.

Utilizamos gráficos de cajas para comparar la distribución de una variable entre diferentes grupos.

# Gráfico de cajas de color celeste.
boxplot(length~sex,datos,
        main="Boxplot para el largo de los abulones"
        )

boxplot(Rings~sex,datos,
        main="Boxplot para el peso total de los abulones"
        )

# Gráfico de cajas de color celeste.
boxplot(length~sex,datos,
        main="Boxplot para el largo de los abulones por sexo",
        col=(c("green","pink","orange"))
        )

5. Ejercicio

6. Materiales adicionales: