Para esta nueva sesión de ejercicios los objetivos principales son poder construir y analizar tablas de frecuencias sobre variables cuantitativas y cualitativas

Para este ejemplo se usaran los datos de la flor iris, obtenidos de https://archive.ics.uci.edu/ml/datasets/Iris

En primera instancia se construye la tabla de frecuencia de la variable “Especie” del iris, esta varible corresponde a una del tipo cualitativa

Para este trabajo se utilizaran las siguientes librerias
datos <- data.frame(iris)                     #se cargan los datos
library(ggplot2)
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library("BHH2")
fi = -as.numeric(sort(-table(datos$Species))) #frecuencia absoluta
fac= cumsum(fi)                               #frecuencia acumulada
fri= as.numeric(fi/sum(fi))*100               #frecuencia relativa
frac= cumsum(fri)                             #frecuencia relativa acumulada

clases= c("setosa", "versicolor", "virginica")

frecuencia= data.frame(clases, fi,fac,fri=round(fri, 2),frac=round(frac,2))
knitr::kable(frecuencia)
clases fi fac fri frac
setosa 50 50 33.33 33.33
versicolor 50 100 33.33 66.67
virginica 50 150 33.33 100.00

Se sigue con la construcción de la tabla de frecuencia de la variable “Largo del petalo” del iris, esta varible corresponde a una del tipo cuantitativa

fi2 = as.numeric(table(datos$Petal.Length))   #frecuencia absoluta
fac2= cumsum(fi2)                             #frecuencia acumulada
fri2= as.numeric(fi2/sum(fi2))*100            #frecuencia relativa
frac2 = cumsum(fri2)                          #frecuencia relativa acumulada
largo_petalo= sort(unique(datos$Petal.Length))
frecuencia_largo= data.frame(largo_petalo, fi2, fac2, fri2=round(fri2, 2), frac2= round(frac2, 2))
knitr::kable(head(frecuencia_largo, 100))
largo_petalo fi2 fac2 fri2 frac2
1.0 1 1 0.67 0.67
1.1 1 2 0.67 1.33
1.2 2 4 1.33 2.67
1.3 7 11 4.67 7.33
1.4 13 24 8.67 16.00
1.5 13 37 8.67 24.67
1.6 7 44 4.67 29.33
1.7 4 48 2.67 32.00
1.9 2 50 1.33 33.33
3.0 1 51 0.67 34.00
3.3 2 53 1.33 35.33
3.5 2 55 1.33 36.67
3.6 1 56 0.67 37.33
3.7 1 57 0.67 38.00
3.8 1 58 0.67 38.67
3.9 3 61 2.00 40.67
4.0 5 66 3.33 44.00
4.1 3 69 2.00 46.00
4.2 4 73 2.67 48.67
4.3 2 75 1.33 50.00
4.4 4 79 2.67 52.67
4.5 8 87 5.33 58.00
4.6 3 90 2.00 60.00
4.7 5 95 3.33 63.33
4.8 4 99 2.67 66.00
4.9 5 104 3.33 69.33
5.0 4 108 2.67 72.00
5.1 8 116 5.33 77.33
5.2 2 118 1.33 78.67
5.3 2 120 1.33 80.00
5.4 2 122 1.33 81.33
5.5 3 125 2.00 83.33
5.6 6 131 4.00 87.33
5.7 3 134 2.00 89.33
5.8 3 137 2.00 91.33
5.9 2 139 1.33 92.67
6.0 2 141 1.33 94.00
6.1 3 144 2.00 96.00
6.3 1 145 0.67 96.67
6.4 1 146 0.67 97.33
6.6 1 147 0.67 98.00
6.7 2 149 1.33 99.33
6.9 1 150 0.67 100.00

Como esta variable es cuantitativa se pueden agrupar los datos en intervalos, quedando de la siguiente manera

n = length(largo_petalo)
k = round(1+ 3.3 * log(n))
h = round((max(largo_petalo) - min(largo_petalo))/k)

intervalos = hist(datos$Petal.Length, plot = FALSE, breaks = k)$breaks
intervalos = paste("(",intervalos[1:(length(intervalos)-1)], "-", intervalos[2:(length(intervalos))], "]", sep = "")
intervalos[1] = "[4-5]"

fi3= hist(datos$Petal.Length, plot=FALSE, breaks = k)$counts     #frecuencia absoluta
fac3= cumsum(fi3)                                                #frecuencia acumulada
fri3= as.numeric(fi3/sum(fi3))*100                               #frecuencia relativa
frac3 = cumsum(fri3)                                             #frecuencia relativa acumulada

frecuencia_petalo= data.frame(largo = intervalos, fi3, fac3, fri3= round(fri3, 2), frac3= round(frac3, 2))
knitr::kable(frecuencia_petalo)
largo fi3 fac3 fri3 frac3
[4-5] 37 37 24.67 24.67
(1.5-2] 13 50 8.67 33.33
(2-2.5] 0 50 0.00 33.33
(2.5-3] 1 51 0.67 34.00
(3-3.5] 4 55 2.67 36.67
(3.5-4] 11 66 7.33 44.00
(4-4.5] 21 87 14.00 58.00
(4.5-5] 21 108 14.00 72.00
(5-5.5] 17 125 11.33 83.33
(5.5-6] 16 141 10.67 94.00
(6-6.5] 5 146 3.33 97.33
(6.5-7] 4 150 2.67 100.00

Una vez obtenidas las tablas de frecuencias se puede construir el gráfico que represente la información de la tabla

gráfico de la variable cualitativa

# Gráfico de barras
p=ggplot(data=frecuencia, aes(x=reorder(clases, -fri),y=fi)) +
  geom_bar(stat="identity",fill="aquamarine3",alpha=0.8) + theme_minimal() + 
  labs(title="Frecuencia absoluta - Clase", x="Clase", y = "Frecuencia absoluta")
ggplotly(p)
se puede observar cada las barras para cada variable son las mismas, esto tiene sentido ya que las 3 especies aparcen en los datos las mismas cantidades de veces, 50 cada una.

Otra representación es con el gráfico de pie

p=ggplot(frecuencia, aes(x="", y=fri, fill=reorder(clases, -fri))) +
  geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_minimal() +
  labs(title="Frecuencia relativa - Clase", x="Clase", y = "Frecuencia relativa (%)")
p=p + scale_fill_brewer(palette="RgPu",name = "Tipo de Clase")
## Warning in pal_name(palette, type): Unknown palette RgPu
plot(p)

Gráfico de la variable cuantitativa

#histograma

grafico=ggplot(datos,aes(Petal.Length)) # Gráfico y datos base
#Histograma (25 niveles) (colores- http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf)
grafico = grafico + geom_histogram(bins=30,fill="lightseagreen",color="lightseagreen",alpha=0.8)
grafico = grafico + theme_bw() # Visualización estándar en blanco y negro
grafico = grafico + ylab("Frecuencia absoluta (Largo Petalo)") + xlab("Largo petalo (cm)")
grafico = grafico + ggtitle("Histograma")
ggplotly(grafico)
dotPlot(datos$Petal.Length,xlab = "Largo Petalo (cm)",)

Preguntas

¿Qué ocurre al construir directamente una tabla de frecuencia?¿Qué conclusiones se pueden extraer?

Al construir una tabla de frecuencia se puede saber la cantidad de veces que una variable toma un valor determinado, lo cual para las ocasiones donde se tenga una cantidad enorme de datos facilitaria el trabajo en temas de busqueda y orden, esto último debido a que los datos de una variable cuantitativa se ordenan de menor a mayor para poder construir la tabla. Por otro lado al tener una tabla de frecuencia se puede obtener las medidas de tendencia central, las medidas de posición, etc.

¿Qué diferencia aprecia entre ambos tipos de representaciones?

Esta pregunta hace referencia a los graficos, si nos referimos a las diferencia de las representaciones de la variable cualitativa se puede que la primera diferencia es que en el gráfico de barras se expresan porcentajes, mientras que en el de barras solo los datos en si, esto lleva a la otra diferencia que en el de barras extien los “ejes” mientras que en el de pie no y por úlitmo en el de pie se puede observar mejor la proporción entre las variables.

Ahora refiriendonos a la variable cuantitativa la primera diferencia a simple vista es que en el histograma nos indica la frecuencia de la variable, mientras que en el de puntos solo estan los valores que toma la variable y no la frecuencia. Por otro lado el histograma puede servir para gráficar variables cuantitativas y cualitativas, mientras que el de punto solo serviría para variables cuantitativas.