1.1 Distribución de frecuencia

Variables cualitativa - Especies

iris <- read.csv(url("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"),header=FALSE)
colnames(iris)<-c("Sepal_length","Sepal_width","Petal_length","Petal_width","Species")
#Frecuencia

frec_abs1 = -as.numeric(sort(-table(iris$Species))) 
frec_acumulada1 = cumsum(frec_abs1)                          
frec_relativa1 = as.numeric(frec_abs1/sum(frec_abs1))*100          
frec_ra1= cumsum(frec_relativa1)                        
clase= c("Iris Setosa","Iris Versicolour","Iris Virginica")

#Tabla
frec_iris=data.frame(clase,frec_abs1,frec_acumulada1,frec_relativa1=round(frec_relativa1,2),frec_ra1=round(frec_ra1,2))

#Visualización
knitr::kable(frec_iris)
clase frec_abs1 frec_acumulada1 frec_relativa1 frec_ra1
Iris Setosa 50 50 33.33 33.33
Iris Versicolour 50 100 33.33 66.67
Iris Virginica 50 150 33.33 100.00

Variables cuantitativa - Ancho del sépalo

#Frecuencias
frec_abs2 = as.numeric(table(iris$Sepal_width))  
frec_acumulada2 = cumsum(frec_abs2)                    
frec_relativa2 = as.numeric(frec_abs2/sum(frec_abs2))*100   
frec_ra2 = cumsum(frec_relativa2)                  

#Tabla
ancho_sepalo =sort(unique(iris$Sepal_width))
frec_asepalo=data.frame(ancho_sepalo,frec_abs2,frec_acumulada2,frec_relativa2=round(frec_relativa2,2),frec_ra2=round(frec_ra2,2))

#Visualización
knitr::kable(head(frec_asepalo,150))
ancho_sepalo frec_abs2 frec_acumulada2 frec_relativa2 frec_ra2
2.0 1 1 0.67 0.67
2.2 3 4 2.00 2.67
2.3 4 8 2.67 5.33
2.4 3 11 2.00 7.33
2.5 8 19 5.33 12.67
2.6 5 24 3.33 16.00
2.7 9 33 6.00 22.00
2.8 14 47 9.33 31.33
2.9 10 57 6.67 38.00
3.0 26 83 17.33 55.33
3.1 12 95 8.00 63.33
3.2 13 108 8.67 72.00
3.3 6 114 4.00 76.00
3.4 12 126 8.00 84.00
3.5 6 132 4.00 88.00
3.6 3 135 2.00 90.00
3.7 3 138 2.00 92.00
3.8 6 144 4.00 96.00
3.9 2 146 1.33 97.33
4.0 1 147 0.67 98.00
4.1 1 148 0.67 98.67
4.2 1 149 0.67 99.33
4.4 1 150 0.67 100.00

PREGUNTA 1

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

La construcción de una tabla de frecuencia muestra la distribución de los datos de forma ordenada tomando en cuenta la cantidad de veces que se repiten los datos. Es posible calcular la mediana, la varianza, desviación estándar, el coeficiente de variación, entre otras.

#Tabla de frecuencia variables cuantitativas
#Frecuencia
ancho_sepalo =sort(unique(iris$Sepal_width))       # Ordenar los datos
n = length(ancho_sepalo)                    # Número de elementos de edad
k = round(1 + 3.3 * log(n))         # Aplicamos regla de Sturges
h = round((max(ancho_sepalo)-min(ancho_sepalo))/k)  # Cálculo de intervalo

#Crear intervalos
intervalos=hist(iris$Sepal_width, plot=FALSE, breaks = k)$breaks
intervalos=paste("(",intervalos[1:(length(intervalos)-1)],"-",intervalos[2:(length(intervalos))],"]",sep="")
intervalos[1]="[0-5]"

#Cálculo de frecuencia
fi = hist(iris$Sepal_width, plot=FALSE, breaks = k)$counts      #Frecuencia con intervalos
fac=cumsum(fi)                                            #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100                            #Frecuencia relativa
frac=cumsum(fri)                                          #Frecuencia relativa acumulada  

frec_asepalo=data.frame(ancho_sepalo=intervalos,fi,fac,fri=round(fri,2),frac=round(frac,2))
knitr::kable(frec_asepalo)
ancho_sepalo fi fac fri frac
[0-5] 4 4 2.67 2.67
(2.2-2.4] 7 11 4.67 7.33
(2.4-2.6] 13 24 8.67 16.00
(2.6-2.8] 23 47 15.33 31.33
(2.8-3] 36 83 24.00 55.33
(3-3.2] 25 108 16.67 72.00
(3.2-3.4] 18 126 12.00 84.00
(3.4-3.6] 9 135 6.00 90.00
(3.6-3.8] 9 144 6.00 96.00
(3.8-4] 3 147 2.00 98.00
(4-4.2] 2 149 1.33 99.33
(4.2-4.4] 1 150 0.67 100.00

1.2. Gráficos

Variables cuantitativas- Previsión

Gráfico de barras
p=ggplot(data=frec_iris, aes(x=reorder(clase, -frec_relativa1),y=frec_abs1)) +
  geom_bar(stat="identity",fill="cadetblue4",alpha=0.8) + theme_minimal() + 
  labs(title="Frecuencia absoluta - Especies", x="Especies", y = "Frecuencia absoluta")
ggplotly(p)
Gráfico tipo pie
p=ggplot(frec_iris, aes(x="", y=frec_relativa1, fill=reorder(clase, -frec_relativa1))) +
  geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_minimal() +
  labs(title="Frecuencia relativa - Especies", x="Especies", y = "Frecuencia relativa (%)")
p=p + scale_fill_brewer(palette="BuPu",name = "Especies")
plot(p)

Gráfico tipo Pareto
p=ggplot(data=frec_iris, aes(x=reorder(clase, -frec_relativa1),y=frec_abs1)) +
  geom_bar(stat="identity",fill="cadetblue4",alpha=0.8) + theme_minimal() + 
  labs(title="Frecuencia absoluta y absoluta acumulada - Especies", x="Especies", y = "Frecuencia absoluta")
p = p + geom_point(aes(y=frec_acumulada1))
ggplotly(p)

Variables cuantitativas - Ancho del sépalo

Diagrama de punto
dotPlot(iris$Sepal_width,xlab = "Ancho [cm]",)

Histograma
grafico=ggplot(iris,aes(Sepal_width))
grafico = grafico + geom_histogram(bins=30,fill="deepskyblue4",color="dodgerblue4",alpha=0.8)
grafico = grafico + theme_bw()
grafico = grafico + ylab("Frecuencia absoluta (Ancho del sépalo)") + xlab("Ancho del sépalo [cm]")
grafico = grafico + ggtitle("Histograma")
ggplotly(grafico)

PREGUNTA 2

¿Qué diferencia aprecia entre ambos tipos de representaciones?

El diagrama de puntos representa los datos de forma individual, es decir, cada punto representa un dato en específico. En cambio, en el histograma los datos están agrupados diversos intervalos lo cual dificulta conocer el dato como tal. El primero es útil cuando los datos pertencen a un pequeño conjunto, mientras que el segundo, ayuda bastante cuando se tiene un gran conjunto de datos.