El conjunto de datos seleccionado para la actividad será bezdekIris.data, que corresponde a una colección de datos de la planta iris. Para el buen desarrollo del trabajo, se decide importar mediante R el dataset, para luego asignarlo a una variable y utilizar las respectivas columnas con los datos, esto puesto que al realizarlo de la forma mostrada como ejemplo se pierde una fila de 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
# Lectura de datos
library(readr)
bezdekIris <- read_csv("bezdekIris.data",
col_names = FALSE)
## Rows: 150 Columns: 5
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): X5
## dbl (4): X1, X2, X3, X4
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
View(bezdekIris)
datos = bezdekIris
datos
## # A tibble: 150 x 5
## X1 X2 X3 X4 X5
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 4.9 3 1.4 0.2 Iris-setosa
## 3 4.7 3.2 1.3 0.2 Iris-setosa
## 4 4.6 3.1 1.5 0.2 Iris-setosa
## 5 5 3.6 1.4 0.2 Iris-setosa
## 6 5.4 3.9 1.7 0.4 Iris-setosa
## 7 4.6 3.4 1.4 0.3 Iris-setosa
## 8 5 3.4 1.5 0.2 Iris-setosa
## 9 4.4 2.9 1.4 0.2 Iris-setosa
## 10 4.9 3.1 1.5 0.1 Iris-setosa
## # ... with 140 more rows
Para la variable cualitativa tenemos el tipo de cada planta.
fi=-as.numeric(sort(-table(datos$X5))) #Frecuencia absoluta
fac=cumsum(fi) #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100 #Frecuencia relativa
frac=cumsum(fri) #Frecuencia relativa acumulada
plantas = c("Iris-setosa","Iris-versicolor","Iris-virginica")
freqPlantas = data.frame(plantas,fi,fac,fri=round(fri,2),frac=round(frac,2))
knitr::kable(freqPlantas)
| plantas | fi | fac | fri | frac |
|---|---|---|---|---|
| Iris-setosa | 50 | 50 | 33.33 | 33.33 |
| Iris-versicolor | 50 | 100 | 33.33 | 66.67 |
| Iris-virginica | 50 | 150 | 33.33 | 100.00 |
En este conjunto de datos tendremos 4 variables cuantitativas, que serán el ancho y largo del sépalo, y el largo y ancho de los pétalos de las plantas, cada dato medido en centimetros.
largoSepalos = sort(unique(datos$X1)) # Ordenar los datos
n = length(largoSepalos) # Número de elementos de edad
k = round(1 + 3.3 * log(n)) # Aplicamos regla de Sturges
h = round((max(largoSepalos)-min(largoSepalos))/k) # Cálculo de intervalo
#Crear intervalos
intervalos=hist(datos$X1, plot=FALSE, breaks = k)$breaks
intervalos=paste("(",intervalos[1:(length(intervalos)-1)],"-",intervalos[2:(length(intervalos))],"]",sep="")
#Cálculo de frecuencia
fi = hist(datos$X1, 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_largoSepalos=data.frame(largoSepalos=intervalos,fi,fac,fri=round(fri,2),frac=round(frac,2))
knitr::kable(frec_largoSepalos)
| largoSepalos | fi | fac | fri | frac |
|---|---|---|---|---|
| (4.2-4.4] | 4 | 4 | 2.67 | 2.67 |
| (4.4-4.6] | 5 | 9 | 3.33 | 6.00 |
| (4.6-4.8] | 7 | 16 | 4.67 | 10.67 |
| (4.8-5] | 16 | 32 | 10.67 | 21.33 |
| (5-5.2] | 13 | 45 | 8.67 | 30.00 |
| (5.2-5.4] | 7 | 52 | 4.67 | 34.67 |
| (5.4-5.6] | 13 | 65 | 8.67 | 43.33 |
| (5.6-5.8] | 15 | 80 | 10.00 | 53.33 |
| (5.8-6] | 9 | 89 | 6.00 | 59.33 |
| (6-6.2] | 10 | 99 | 6.67 | 66.00 |
| (6.2-6.4] | 16 | 115 | 10.67 | 76.67 |
| (6.4-6.6] | 7 | 122 | 4.67 | 81.33 |
| (6.6-6.8] | 11 | 133 | 7.33 | 88.67 |
| (6.8-7] | 5 | 138 | 3.33 | 92.00 |
| (7-7.2] | 4 | 142 | 2.67 | 94.67 |
| (7.2-7.4] | 2 | 144 | 1.33 | 96.00 |
| (7.4-7.6] | 1 | 145 | 0.67 | 96.67 |
| (7.6-7.8] | 4 | 149 | 2.67 | 99.33 |
| (7.8-8] | 1 | 150 | 0.67 | 100.00 |
anchoSepalos = sort(unique(datos$X2)) # Ordenar los datos
n = length(anchoSepalos) # Número de elementos de edad
k = round(1 + 3.3 * log(n)) # Aplicamos regla de Sturges
h = round((max(anchoSepalos)-min(anchoSepalos))/k) # Cálculo de intervalo
#Crear intervalos
intervalos=hist(datos$X2, plot=FALSE, breaks = k)$breaks
intervalos=paste("(",intervalos[1:(length(intervalos)-1)],"-",intervalos[2:(length(intervalos))],"]",sep="")
#Cálculo de frecuencia
fi = hist(datos$X2, 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_anchoSepalos=data.frame(anchoSepalos=intervalos,fi,fac,fri=round(fri,2),frac=round(frac,2))
knitr::kable(frec_anchoSepalos)
| anchoSepalos | fi | fac | fri | frac |
|---|---|---|---|---|
| (2-2.2] | 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] | 24 | 107 | 16.00 | 71.33 |
| (3.2-3.4] | 18 | 125 | 12.00 | 83.33 |
| (3.4-3.6] | 10 | 135 | 6.67 | 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 |
largoPetalos = sort(unique(datos$X3)) # Ordenar los datos
n = length(largoPetalos) # Número de elementos de edad
k = round(1 + 3.3 * log(n)) # Aplicamos regla de Sturges
h = round((max(largoPetalos)-min(largoPetalos))/k) # Cálculo de intervalo
#Crear intervalos
intervalos=hist(datos$X3, plot=FALSE, breaks = k)$breaks
intervalos=paste("(",intervalos[1:(length(intervalos)-1)],"-",intervalos[2:(length(intervalos))],"]",sep="")
#Cálculo de frecuencia
fi = hist(datos$X3, 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_largoPetalos=data.frame(largoPetalos=intervalos,fi,fac,fri=round(fri,2),frac=round(frac,2))
knitr::kable(frec_largoPetalos)
| largoPetalos | fi | fac | fri | frac |
|---|---|---|---|---|
| (1-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 |
anchoPetalos = sort(unique(datos$X4)) # Ordenar los datos
n = length(anchoPetalos) # Número de elementos de edad
k = round(1 + 3.3 * log(n)) # Aplicamos regla de Sturges
h = round((max(anchoPetalos)-min(anchoPetalos))/k) # Cálculo de intervalo
#Crear intervalos
intervalos=hist(datos$X4, plot=FALSE, breaks = k)$breaks
intervalos=paste("(",intervalos[1:(length(intervalos)-1)],"-",intervalos[2:(length(intervalos))],"]",sep="")
#Cálculo de frecuencia
fi = hist(datos$X4, 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_anchoPetalos=data.frame(anchoPetalos=intervalos,fi,fac,fri=round(fri,2),frac=round(frac,2))
knitr::kable(frec_anchoPetalos)
| anchoPetalos | fi | fac | fri | frac |
|---|---|---|---|---|
| (0-0.2] | 34 | 34 | 22.67 | 22.67 |
| (0.2-0.4] | 14 | 48 | 9.33 | 32.00 |
| (0.4-0.6] | 2 | 50 | 1.33 | 33.33 |
| (0.6-0.8] | 0 | 50 | 0.00 | 33.33 |
| (0.8-1] | 7 | 57 | 4.67 | 38.00 |
| (1-1.2] | 8 | 65 | 5.33 | 43.33 |
| (1.2-1.4] | 21 | 86 | 14.00 | 57.33 |
| (1.4-1.6] | 16 | 102 | 10.67 | 68.00 |
| (1.6-1.8] | 14 | 116 | 9.33 | 77.33 |
| (1.8-2] | 11 | 127 | 7.33 | 84.67 |
| (2-2.2] | 9 | 136 | 6.00 | 90.67 |
| (2.2-2.4] | 11 | 147 | 7.33 | 98.00 |
| (2.4-2.6] | 3 | 150 | 2.00 | 100.00 |
p=ggplot(freqPlantas, aes(x="", y=fri, fill=reorder(plantas, -fri))) +
geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_minimal() +
labs(title="Frecuencia relativa - Previsión", x="Previsión", y = "Frecuencia relativa (%)")
p=p + scale_fill_brewer(palette="RdPu",name = "Tipo de planta")
plot(p)
## Histograma para largos de sepalo
grafico=ggplot(datos,aes(X1)) # Gráfico y datos base
#Histograma (25 niveles)
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 de sepalo)") + xlab("Largo (centimetros)")
grafico = grafico + ggtitle("Histograma")
plot(grafico)
## Histograma para anchos de sepalo
grafico=ggplot(datos,aes(X2)) # Gráfico y datos base
#Histograma (25 niveles)
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 (ancho de sepalo)") + xlab("Ancho (centimetros)")
grafico = grafico + ggtitle("Histograma")
plot(grafico)
grafico=ggplot(datos,aes(X3)) # Gráfico y datos base
#Histograma (25 niveles)
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 de petalo)") + xlab("Largo (centimetros)")
grafico = grafico + ggtitle("Histograma")
plot(grafico)
grafico=ggplot(datos,aes(X4)) # Gráfico y datos base
#Histograma (25 niveles)
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 (ancho de petalo)") + xlab("Ancho (centimetros)")
grafico = grafico + ggtitle("Histograma")
plot(grafico)
1- ¿Qué ocurre al construir directamente una tabla de frecuencia?¿Qué conclusiones se pueden extraer? Al construir una tabla de frecuencias se puede observar la cantidad de datos ordenados por tipo, en este caso podemos ver cuantas platas hay por tipo en el dataset, asi como tambien se pueden ver datos como la cantidad de sépalos y pétalos divididos por anchos y largos, datos ordenados por intervalos de medidas. De esto podemos ver a cuanto tienden las medidas en promedio.
2- ¿Qué diferencia aprecia entre ambos tipos de representaciones? Una diferencia visual, ya que con el gráfico de pie podemos ver de forma mas visual cual es la mayor planta presente en el conjunto de datos, esto gracias a los colores, en el caso del histograma podemos ver cuantas veces se repite el dato en el intervalo que corresponde, el cual no corresponde a un dato fijo, si no a diversos datos, lo cual es una diferencia directa con el gráfico de pie, por lo que para analizar el histograma debemos tener en cuenta el tamaño de cada intervalo definido. Por lo anterior, se podría deducir que el gráfico de pie seria mas útil para graficar variables cualitativas y los histogramas para variables cuantitativas.