Ejercico 4

Para este ejercicio se pide concluir en base a la creacion de distintas tablas y graficos utilizando un conjundo que debe contener valores categóricas y numéricas.

Conjunto de datos

Para este ejercicio se utilizara el conjunto de datos ‘adult_data’ correspondiente a set de datos utilizados para determinar si una persona genera más de 50K al año, el cual pertenece al conjunto de datos disponible el sitio web https://archive.ics.uci.edu/ml/index.php.

Variable Cualitativa

Para este ejemplo de tabla de frecuencia sobre variables cualitativas se utilizara el atributo “race”

#Lectura de datos
datos=read.csv("adult_data.csv",header=T,sep=",",check.names = F)
#Tabla de frecuencia variables cuanlitativas
#Frecuencia
fi=-as.numeric(sort(-table(datos$race))) #Frecuencia absoluta
fac=cumsum(fi)                           #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100           #Frecuencia relativa
frac=cumsum(fri)                         #Frecuencia relativa acumulada
race=c("White", "Asian-Pac-Islander", "Amer-Indian-Eskimo", "Other", "Black")
#Tabla
frec_race=data.frame(race,fi,fac,fri=round(fri,2),frac=round(frac,2))
#Visualización
knitr::kable(frec_race)
race fi fac fri frac
White 27816 27816 85.43 85.43
Asian-Pac-Islander 3124 30940 9.59 95.02
Amer-Indian-Eskimo 1039 31979 3.19 98.21
Other 311 32290 0.96 99.17
Black 271 32561 0.83 100.00

Variable cuantitativa

Para este ejemplo de tabla de frecuencia sobre variables cuantativas se utilizara el atributo “age”

#Tabla de frecuencia variables cuantitativas
#Frecuencia
fi=as.numeric(table(datos$age))  #Frecuencia absoluta
fac=cumsum(fi)                    #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100    #Frecuencia relativa
frac=cumsum(fri)                  #Frecuencia relativa acumulada
#Tabla
age=sort(unique(datos$age))
frec_age=data.frame(age,fi,fac,fri=round(fri,2),frac=round(frac,2))
#Visualización
knitr::kable(head(frec_age,10))
age fi fac fri frac
17 395 395 1.21 1.21
18 550 945 1.69 2.90
19 712 1657 2.19 5.09
20 753 2410 2.31 7.40
21 720 3130 2.21 9.61
22 765 3895 2.35 11.96
23 877 4772 2.69 14.66
24 798 5570 2.45 17.11
25 841 6411 2.58 19.69
26 785 7196 2.41 22.10

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

Al construir la tabla de frecuencia se puede apreciar la cantidad de veces que se repite una variable dentro del conjunto de datos, además de porcentajes como lo son la frecuencai acumulada o la frecuencia relativa.

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

#Crear intervalos
intervalos=hist(datos$age, plot=FALSE, breaks = k)$breaks
intervalos=paste("(",intervalos[1:(length(intervalos)-1)],"-",intervalos[2:(length(intervalos))],"]",sep="")
intervalos[1]="[17-19]"

#Cálculo de frecuencia
fi = hist(datos$age, 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_age_i=data.frame(age=intervalos,fi,fac,fri=round(fri,2),frac=round(frac,2))
knitr::kable(frec_age_i)
age fi fac fri frac
[17-19] 2410 2410 7.40 7.40
(20-25] 4001 6411 12.29 19.69
(25-30] 4161 10572 12.78 32.47
(30-35] 4353 14925 13.37 45.84
(35-40] 4193 19118 12.88 58.71
(40-45] 3816 22934 11.72 70.43
(45-50] 3167 26101 9.73 80.16
(50-55] 2371 28472 7.28 87.44
(55-60] 1757 30229 5.40 92.84
(60-65] 1174 31403 3.61 96.44
(65-70] 618 32021 1.90 98.34
(70-75] 299 32320 0.92 99.26
(75-80] 142 32462 0.44 99.70
(80-85] 51 32513 0.16 99.85
(85-90] 48 32561 0.15 100.00

Variables cualitativas - Graficos

Para ejemplificar como representar gráficamente variables cualitativas usaremos distintos gráficos.

Gráfico de barras

#Librerias
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
#Frecuencia
fi=-as.numeric(sort(-table(datos$race))) #Frecuencia absoluta
fac=cumsum(fi)                           #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100           #Frecuencia relativa
frac=cumsum(fri)                         #Frecuencia relativa acumulada
race=c("White", "Asian-Pac-Islander", "Amer-Indian-Eskimo", "Other", "Black")
#Tabla
frec_race=data.frame(race,fi,fac,fri=round(fri,2),frac=round(frac,2))

# Gráfico de barras
p=ggplot(data=frec_race, aes(x=reorder(race, -fri),y=fi)) +
  geom_bar(stat="identity",fill="maroon",alpha=0.8) + theme_minimal() + 
  labs(title="Frecuencia absoluta - Race", x="Race", y = "Frecuencia absoluta")
ggplotly(p)

Gráfico tipo pie

p=ggplot(frec_race, aes(x="", y=fri, fill=reorder(race, -fri))) + 
  geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + 
  theme_minimal() + labs(title="Frecuencia relativa - Race", x="Race", 
                         y = "Frecuencia relativa (%)")
p=p + scale_fill_brewer(palette="RdPu",name = "Races")
plot(p)

Gráfico tipo Pareto

p=ggplot(data=frec_race, aes(x=reorder(race, -fri),y=fi)) +
  geom_bar(stat="identity",fill="maroon",alpha=0.8) + theme_minimal() + 
  labs(title="Frecuencia absoluta y absoluta acumulada - Race", x="Race", y = "Frecuencia absoluta")
p = p + geom_point(aes(y=fac))
ggplotly(p)

Variables cuantitativas - Graficos

Diagrama de punto

library("BHH2")
dotPlot(datos$age,xlab = "Age (años)",)

Histograma

#Tabla de frecuencia variables cuantitativas
#Frecuencia
fi=as.numeric(table(datos$age))  #Frecuencia absoluta
fac=cumsum(fi)                    #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100    #Frecuencia relativa
frac=cumsum(fri)                  #Frecuencia relativa acumulada
#Tabla
age=sort(unique(datos$age))
frec_age=data.frame(age,fi,fac,fri=round(fri,2),frac=round(frac,2))
grafico=ggplot(datos,aes(age)) # Gráfico y datos base
#Histograma 
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 ") + xlab("Age (años)")
grafico = grafico + ggtitle("Histograma")
ggplotly(grafico)