En esta sesión veremos la exploración de variables cuantitativas utilizando tablas de frecuencias y gráficos para estas variables.
Contenido:
Comenzamos creando un nuevo script en R que llamaremos exploracion_cuanti en donde iremos añadiendo los códigos que describimos más adelante.
Los datos que utilizaremos son datos sobre abulones negros del estrecho de Bass que separa Tasmania de Australia continental. Estos datos se publicaron originalmente como parte del siguiente estudio:
“WJ Nash, TL Sellers, SR Talbot, AJ Cawthorn and WB Ford (1994). The Population Biology of Abalone (Haliotis species) in Tasmania. I. Blacklip Abalone (H. rubra) from the North Coast and Islands of Bass Strait. Sea Fisheries Division, Technical Report No. 48 (ISSN 1034-3288)”
Para leer los datos desde un enlace en la web, utilizamos el siguiente enlace:
# Datos Abulones
datos <- read.table("https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data", sep=",")
names(datos) <- c("sex","length","Diameter","Height","WholeHeight","ShuckedWeight","VisceraWeight","ShellWeight","Rings")
## Mas informacion en: https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.names
Realizamos una transformación en las columnas para obtener las medidas en milimetros y en gramos.
datos$length <- datos$length*200
datos$Diameter <- datos$Diameter*200
datos$Height <- datos$Height*200
datos$WholeHeight <- datos$WholeHeight*200
datos$ShuckedWeight <- datos$ShuckedWeight*200
datos$VisceraWeight <- datos$VisceraWeight*200
datos$ShellWeight <- datos$ShellWeight*200
Para explorarl los datos, el comando head nos mostrará los primeros 6 registros:
head(datos) # primeros 6
## sex length Diameter Height WholeHeight 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
Tambien, realizamos una exploración de las 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 ...
## $ WholeHeight : 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 ...
En este dataframe, todas las columnas son numéricas excepto sex que es de tipo texto.
Instalamos utilizando:
install.packages("janitor")
Exploramos la unica variables cualitativa sex.
library(janitor)
tabyl(datos$sex, sort = TRUE)# Tabla de frecuencias para sex
## datos$sex n percent
## F 1307 0.3129040
## I 1342 0.3212832
## M 1528 0.3658128
Note que F: Femenino, M: masculino, y I: Bebé (infante)
Como ejercicio, interpretar los resultados. ¿Qué categoría es la más frecuente? ¿y la categoría menos frecuente, cuál es? ¿Cuál es la moda? ¿Podemos calcular la mediana?
Ahora, comenzamos a explorar las variables cuantativas continuas.
Iniciamos explorando la variable length: el largo de los abulones.
Se utiliza para gráficar la distribución de variables cuantitativas discretas con pocos valores únicos.
En nuestro caso, lo utilizaremos para la variable Rings como ejemplo. Ejecutar el siguiente código:
plot(table(datos$Rings)) # Realiza el gráfico de bastones
Como vemos, se muestras demasiados bastones. Esto no es conveniente ya que puede dificultar su lectura. Recomendamos utilizar, en el caso de variables cuantitativas discretas con muchos valores, un histograma.
A modo de ejemplo, utilizaremos el dataset ToothGrowth de la librería datasets en donde encontramos la variable cuantitativa discreta dose: niveles de dosis de vitamina C utilizada en experimentos para el crecimiento de odontoblastos, células responsables del crecimiento de los dientes de cuyes.
library(datasets) # La librería datasets contiene muchas bases de datos para explorar y analizar.
head(ToothGrowth) # Vemos las 6 primeras filas de los datos ToothGrowth.
## len supp dose
## 1 4.2 VC 0.5
## 2 11.5 VC 0.5
## 3 7.3 VC 0.5
## 4 5.8 VC 0.5
## 5 6.4 VC 0.5
## 6 10.0 VC 0.5
# Finalmente, graficamos la variable dose (Dosis) utilizada en los experimentos.
plot(table(ToothGrowth$dose),
main="Gráfico de bastones para la dosis",
xlab="Dosis de vitamina C (mg/día)")
Observemos que las barras tienen la misma altura (20). Esto se debe a que estos son los datos de un experimento en donde se ha realizado 20 repeticiones con cada uno de los niveles de dosis: 0.5, 1 y 2 miligramos por día.
El histograma nos servirá para graficar la distribución de una variable cuantitativa continua o una variable cuantitativa discreta con muchos valores únicos.
Iniciamos, utilizando el histograma en la variable length con el siguiente código:
hist(datos$length)
Como se puede observar, este gráfico tiene los títulos en inglés. Podemos personalizarlo añadiendo unas líneas adicionales de código:
hist(datos$length,
main="Histograma del largo de los abulones",
xlab="Largo de los abulones (mm)",
ylab="Proporción",
probability = TRUE)
Tambien podemos añadir colores con un par de lineas adicionales:
hist(datos$length,
main="Histograma del largo de los abulones",
xlab="Largo de los abulones (mm)",
ylab="Frecuencia",
col="orange",
border="blue")
Las tablas de frecuencia se construirán tomando como base los cortes realizados en el histograma. A partir de estos cortes, se crea una nueva variable y se muestra con una tabla. Utilizaremos el paquete summarytools para obtener una visualización completa de la tabla de frecuencias.
Instalamos utilizando:
install.packages("summarytools")
library(summarytools)
histo <- hist(datos$length) # Crea el histograma
cortes <- histo$breaks # Obtiene los cortes para la variable a partir del histograma
variable_categorizada <- cut(datos$length,cortes) #Crea la variable categorizada
freq(variable_categorizada) # Muestra la tabla de frecuencias
## Frequencies
## variable_categorizada
## Type: Factor
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## --------------- ------ --------- -------------- --------- --------------
## (10,20] 1 0.024 0.024 0.024 0.024
## (20,30] 7 0.168 0.192 0.168 0.192
## (30,40] 41 0.982 1.173 0.982 1.173
## (40,50] 57 1.365 2.538 1.365 2.538
## (50,60] 122 2.921 5.458 2.921 5.458
## (60,70] 180 4.309 9.768 4.309 9.768
## (70,80] 287 6.871 16.639 6.871 16.639
## (80,90] 372 8.906 25.545 8.906 25.545
## (90,100] 524 12.545 38.090 12.545 38.090
## (100,110] 543 13.000 51.089 13.000 51.089
## (110,120] 827 19.799 70.888 19.799 70.888
## (120,130] 728 17.429 88.317 17.429 88.317
## (130,140] 336 8.044 96.361 8.044 96.361
## (140,150] 136 3.256 99.617 3.256 99.617
## (150,160] 15 0.359 99.976 0.359 99.976
## (160,170] 1 0.024 100.000 0.024 100.000
## <NA> 0 0.000 100.000
## Total 4177 100.000 100.000 100.000 100.000
Por ejemplo, para la variable Diameter utilizaremos el siguiente código.
library(summarytools)
# Primero, crea el histograma con el siguiente código:
histo <- hist(datos$Diameter,
main="Histograma del diámetro",
xlab="Diametro (mm) ")
# Luego, crear la tabla de frecuencia con las líneas siguientes:
cortes <- histo$breaks # Obtiene los cortes para la variable a partir del histograma
variable_categorizada <- cut(datos$Diameter, cortes) #Crea la variable categorizada
freq(variable_categorizada) # Muestra la tabla de frecuencias
## Frequencies
## variable_categorizada
## Type: Factor
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## --------------- ------ --------- -------------- --------- --------------
## (10,20] 5 0.12 0.12 0.12 0.12
## (20,30] 54 1.29 1.41 1.29 1.41
## (30,40] 91 2.18 3.59 2.18 3.59
## (40,50] 187 4.48 8.07 4.48 8.07
## (50,60] 332 7.95 16.02 7.95 16.02
## (60,70] 447 10.70 26.72 10.70 26.72
## (70,80] 678 16.23 42.95 16.23 42.95
## (80,90] 791 18.94 61.89 18.94 61.89
## (90,100] 913 21.86 83.74 21.86 83.74
## (100,110] 473 11.32 95.07 11.32 95.07
## (110,120] 195 4.67 99.74 4.67 99.74
## (120,130] 11 0.26 100.00 0.26 100.00
## <NA> 0 0.00 100.00
## Total 4177 100.00 100.00 100.00 100.00
En su reporte escribir sus conclusiones:
Ejemplo:
Se observa que el diámetro de los abulones estudiados se encuentra entre 10mm y 130mm. Además, los abulones más frecuentes tienen entre 90mm y 100mm de diámetro mientras que los abulones menos frecuentes son aquellos que tienen diámetros menores o iguales a 50mm y mayores a 110mm.