Para el desarrollo de esta sesión de ejercicios, vamos a
utilizar el dataSet “Iris” disponible en https://archive.ics.uci.edu/ml/datasets/Iris . Para
facilitar el proceso de trabajo, lo trabajaremos como data
frame.
# Se crea el dataframe
data = data.frame(iris)
data
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## 11 5.4 3.7 1.5 0.2 setosa
## 12 4.8 3.4 1.6 0.2 setosa
## 13 4.8 3.0 1.4 0.1 setosa
## 14 4.3 3.0 1.1 0.1 setosa
## 15 5.8 4.0 1.2 0.2 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 18 5.1 3.5 1.4 0.3 setosa
## 19 5.7 3.8 1.7 0.3 setosa
## 20 5.1 3.8 1.5 0.3 setosa
## 21 5.4 3.4 1.7 0.2 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 23 4.6 3.6 1.0 0.2 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 25 4.8 3.4 1.9 0.2 setosa
## 26 5.0 3.0 1.6 0.2 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 28 5.2 3.5 1.5 0.2 setosa
## 29 5.2 3.4 1.4 0.2 setosa
## 30 4.7 3.2 1.6 0.2 setosa
## 31 4.8 3.1 1.6 0.2 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 33 5.2 4.1 1.5 0.1 setosa
## 34 5.5 4.2 1.4 0.2 setosa
## 35 4.9 3.1 1.5 0.2 setosa
## 36 5.0 3.2 1.2 0.2 setosa
## 37 5.5 3.5 1.3 0.2 setosa
## 38 4.9 3.6 1.4 0.1 setosa
## 39 4.4 3.0 1.3 0.2 setosa
## 40 5.1 3.4 1.5 0.2 setosa
## 41 5.0 3.5 1.3 0.3 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 43 4.4 3.2 1.3 0.2 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
## 46 4.8 3.0 1.4 0.3 setosa
## 47 5.1 3.8 1.6 0.2 setosa
## 48 4.6 3.2 1.4 0.2 setosa
## 49 5.3 3.7 1.5 0.2 setosa
## 50 5.0 3.3 1.4 0.2 setosa
## 51 7.0 3.2 4.7 1.4 versicolor
## 52 6.4 3.2 4.5 1.5 versicolor
## 53 6.9 3.1 4.9 1.5 versicolor
## 54 5.5 2.3 4.0 1.3 versicolor
## 55 6.5 2.8 4.6 1.5 versicolor
## 56 5.7 2.8 4.5 1.3 versicolor
## 57 6.3 3.3 4.7 1.6 versicolor
## 58 4.9 2.4 3.3 1.0 versicolor
## 59 6.6 2.9 4.6 1.3 versicolor
## 60 5.2 2.7 3.9 1.4 versicolor
## 61 5.0 2.0 3.5 1.0 versicolor
## 62 5.9 3.0 4.2 1.5 versicolor
## 63 6.0 2.2 4.0 1.0 versicolor
## 64 6.1 2.9 4.7 1.4 versicolor
## 65 5.6 2.9 3.6 1.3 versicolor
## 66 6.7 3.1 4.4 1.4 versicolor
## 67 5.6 3.0 4.5 1.5 versicolor
## 68 5.8 2.7 4.1 1.0 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 70 5.6 2.5 3.9 1.1 versicolor
## 71 5.9 3.2 4.8 1.8 versicolor
## 72 6.1 2.8 4.0 1.3 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 74 6.1 2.8 4.7 1.2 versicolor
## 75 6.4 2.9 4.3 1.3 versicolor
## 76 6.6 3.0 4.4 1.4 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 78 6.7 3.0 5.0 1.7 versicolor
## 79 6.0 2.9 4.5 1.5 versicolor
## 80 5.7 2.6 3.5 1.0 versicolor
## 81 5.5 2.4 3.8 1.1 versicolor
## 82 5.5 2.4 3.7 1.0 versicolor
## 83 5.8 2.7 3.9 1.2 versicolor
## 84 6.0 2.7 5.1 1.6 versicolor
## 85 5.4 3.0 4.5 1.5 versicolor
## 86 6.0 3.4 4.5 1.6 versicolor
## 87 6.7 3.1 4.7 1.5 versicolor
## 88 6.3 2.3 4.4 1.3 versicolor
## 89 5.6 3.0 4.1 1.3 versicolor
## 90 5.5 2.5 4.0 1.3 versicolor
## 91 5.5 2.6 4.4 1.2 versicolor
## 92 6.1 3.0 4.6 1.4 versicolor
## 93 5.8 2.6 4.0 1.2 versicolor
## 94 5.0 2.3 3.3 1.0 versicolor
## 95 5.6 2.7 4.2 1.3 versicolor
## 96 5.7 3.0 4.2 1.2 versicolor
## 97 5.7 2.9 4.2 1.3 versicolor
## 98 6.2 2.9 4.3 1.3 versicolor
## 99 5.1 2.5 3.0 1.1 versicolor
## 100 5.7 2.8 4.1 1.3 versicolor
## 101 6.3 3.3 6.0 2.5 virginica
## 102 5.8 2.7 5.1 1.9 virginica
## 103 7.1 3.0 5.9 2.1 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 105 6.5 3.0 5.8 2.2 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 107 4.9 2.5 4.5 1.7 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 111 6.5 3.2 5.1 2.0 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 113 6.8 3.0 5.5 2.1 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 116 6.4 3.2 5.3 2.3 virginica
## 117 6.5 3.0 5.5 1.8 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 121 6.9 3.2 5.7 2.3 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 125 6.7 3.3 5.7 2.1 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 128 6.1 3.0 4.9 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 136 7.7 3.0 6.1 2.3 virginica
## 137 6.3 3.4 5.6 2.4 virginica
## 138 6.4 3.1 5.5 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 140 6.9 3.1 5.4 2.1 virginica
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 2.3 virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 144 6.8 3.2 5.9 2.3 virginica
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
Con el dataset ya creado, procedemos a la construcción de la
tabla de frecuencias respecto a la variable cualitativa
“Especie”.
#Tabla de frecuencia variables cualitativas
#Frecuencia
fi=-as.numeric(sort(-table(data$Species))) #Frecuencia absoluta
fac=cumsum(fi) #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100 #Frecuencia relativa
frac=cumsum(fri) #Frecuencia relativa acumulada
especie=c("SETOSA", "VERSICOLOR", "VIRGINICA")
#Tabla
frecuencias_esp= data.frame(especie,fi,fac,fri=round(fri,2),frac=round(frac,2))
#Visualización
knitr::kable(frecuencias_esp)
| SETOSA |
50 |
50 |
33.33 |
33.33 |
| VERSICOLOR |
50 |
100 |
33.33 |
66.67 |
| VIRGINICA |
50 |
150 |
33.33 |
100.00 |
Repetimos el mismo proceso pero esta vez, utilizando la
variable cuantitativa “Largo del petalo”.
#Tabla de frecuencia variables cuantitativas
#Frecuencia
fi=as.numeric(table(data$Petal.Length)) #Frecuencia absoluta
fac=cumsum(fi) #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100 #Frecuencia relativa
frac=cumsum(fri) #Frecuencia relativa acumulada
#Tabla
petal.length=sort(unique(data$Petal.Length))
frecuencias_largo = data.frame(petal.length,fi,fac,fri=round(fri,2),frac=round(frac,2))
#Visualización
knitr::kable(head(frecuencias_largo,50))
| 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 |
Lo anterior sale mas facil verlo agrupandolo en
intervalos
#Tabla de frecuencia variables cuantitativas
#Frecuencia
n = length(petal.length) # Número de elementos de edad
k = round(1 + 3.3 * log(n)) # Aplicamos regla de Sturges
h = round((max(petal.length)-min(petal.length))/k) # Cálculo de intervalo
#Crear intervalos
intervalos=hist(data$Petal.Length, plot=FALSE, breaks = k)$breaks
intervalos=paste("(",intervalos[1:(length(intervalos)-1)],"-",intervalos[2:(length(intervalos))],"]",sep="")
intervalos[1]="[1.0-1.5]"
#Cálculo de frecuencia
fi = hist(data$Petal.Length, 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
frecuencia_largo =data.frame(petal.length=intervalos,fi,fac,fri=round(fri,2),frac=round(frac,2))
knitr::kable(frecuencia_largo)
| [1.0-1.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 |
Considerando las tablas de frecuencias obtenidas, se pueden
armar gráficos que representan la información de las
tablas
Graficos para la variable cualitativa
“Especie”
# Gráfico de barras
p=ggplot(data=frecuencias_esp, aes(x=reorder(especie, -fri),y=fi)) +
geom_bar(stat="identity",fill="maroon",alpha=0.8) + theme_minimal() +
labs(title="Frecuencia absoluta - Especies", x="Especies", y = "Frecuencia absoluta")
ggplotly(p)
# Grafico tipo pie
p=ggplot(frecuencias_esp, aes(x="", y=fri, fill=reorder(especie, -fri))) +
geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_minimal() +
labs(title="Frecuencia relativa - Especie", x="Especie", y = "Frecuencia relativa (%)")
p=p + scale_fill_brewer(palette="RdPu",name = "Tipo de Especie")
plot(p)

# Gráfico de barras
p=ggplot(data=frecuencias_esp, aes(x=reorder(especie, -fri),y=fi)) +
geom_bar(stat="identity",fill="maroon",alpha=0.8) + theme_minimal() +
labs(title="Frecuencia absoluta y absoluta acumulada - Especies", x="Especies", y = "Frecuencia absoluta")
p = p + geom_point(aes(y=fac))
ggplotly(p)
Graficos para la variable cuantitativa “Largo del petalo”**
# Diagrama de puntos
dotPlot(data$Petal.Length,xlab = "Largo del petalo (cm)")

# Histograma
grafico=ggplot(data,aes(Petal.Length)) # Gráfico y datos base
grafico = grafico + geom_histogram(bins=30,fill="maroon",color="maroon",alpha=0.8)
grafico = grafico + theme_bw() # Visualización estándar en blanco y negro
grafico = grafico + ylab("Frecuencia absoluta (Largo del petalo)") + xlab("Largo del petalo (cm)")
grafico = grafico + ggtitle("Histograma")
ggplotly(grafico)
PREGUNTAS:
2) ¿Qué diferencia aprecia entre ambos tipos de
representaciones?
Asumiendo que con “ambos tipos de representaciones” se refiere a las
tablas de frecuencias y graficas de datos, se puede notar que los
graficos permiten sacar una representación mas “simple” y visual sobre
los datos, donde se pueden obtener estimaciones de otros datos no
presentes en la grafica, sin embargo, se podrian considerar no muy
precisos. Las tablas de frecuencias permiten obtener datos numericos mas
facil y de esta forma también poder sacar otros datos relacionados, como
el promedio, la variación de los datos, entre otras cosas. A fin de
cuentas, ambas representaciones son útiles en el estudio de la
Estadistica, pues se complementan entre si a pesar de tener
diferencias.