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 |
#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 |
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 |
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)
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)
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)
dotPlot(iris$Sepal_width,xlab = "Ancho [cm]",)
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)
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.