Conjunto de datos

Conjunto de datos obtenidos de https://www.kaggle.com/datasets/rounakbanik/pokemon

datos=read.csv("pokemon.csv", sep = ",", stringsAsFactors = F) 

1.1. Distribución de frecuencia

Variables cualitativa - Tipo Principal

Tabla de frecuencia sobre una variable cualitativa, en donde se usara el atributo Tipo principal del pokemon.

fi=-as.numeric(sort(-(table(datos$type1))))   #Frecuencia absoluta
fac=cumsum(fi)                                #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100                #Frecuencia relativa
frac=cumsum(fri)                              #Frecuencia relativa acumulada
Tipo=c("Agua","Normal","Planta","Bicho","Psiquico","Fuego","Roca","Electrico","Tierra","Veneno","Siniestro","Lucha","Dragon","Fantasma","Acero","Hielo","Hada","Volador")
#Tabla
frec_Tipo=data.frame(Tipo,fi,fac,fri=round(fri,2),frac=round(frac,2))
#Visualización
knitr::kable(frec_Tipo)
Tipo fi fac fri frac
Agua 114 114 14.23 14.23
Normal 105 219 13.11 27.34
Planta 78 297 9.74 37.08
Bicho 72 369 8.99 46.07
Psiquico 53 422 6.62 52.68
Fuego 52 474 6.49 59.18
Roca 45 519 5.62 64.79
Electrico 39 558 4.87 69.66
Tierra 32 590 4.00 73.66
Veneno 32 622 4.00 77.65
Siniestro 29 651 3.62 81.27
Lucha 28 679 3.50 84.77
Dragon 27 706 3.37 88.14
Fantasma 27 733 3.37 91.51
Acero 24 757 3.00 94.51
Hielo 23 780 2.87 97.38
Hada 18 798 2.25 99.63
Volador 3 801 0.37 100.00

Variables cuantitativa - Vida Base (HP)

#Tabla de frecuencia variables cuantitativas
#Frecuencia
fi=as.numeric(table(datos$hp))    #Frecuencia absoluta
fac=cumsum(fi)                    #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100    #Frecuencia relativa
frac=cumsum(fri)                  #Frecuencia relativa acumulada
#Tabla
vidaBase=sort(unique(datos$hp))
frec_vidaBase=data.frame(vidaBase,fi,fac,fri=round(fri,2),frac=round(frac,2))
#Visualización
knitr::kable(head(frec_vidaBase,5))
vidaBase fi fac fri frac
1 1 1 0.12 0.12
10 1 2 0.12 0.25
20 6 8 0.75 1.00
25 3 11 0.37 1.37
28 1 12 0.12 1.50
knitr::kable(tail(frec_vidaBase,5))
vidaBase fi fac fri frac
95 190 1 797 0.12 99.50
96 216 1 798 0.12 99.63
97 223 1 799 0.12 99.75
98 250 1 800 0.12 99.88
99 255 1 801 0.12 100.00

Pregunta 1

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

R: Cuando se construye una tabla de frecuencia, esta se divide en 4 secciones, la primera la frecuencia absoluta, que es la cantidad de veces que se repite una característica o suceso en un número determinado de experimentos, la segunda es la frecuencia acumulada, la cual es la suma progresiva de la frecuencia absoluta, la tercera es la frecuencia relativa, que es el porcentaje de que esta característica o suceso aparezca, y la frecuencia relativa acumulada, que es la suma progresiva de la anterior.

Entonces gracias a estos datos podemos extraer información de la tabla de frecuencia de una manera más ordenada y fácil de leer, tales como poder ver cual tiene mayor numero, cual se repite más, alguna búsqueda en particular, etc. Y a base de esto generar conclusiones, predicciones, etc.

En este caso, se construyo una tabla en donde se muestran los tipos elementales principales de cada Pokémon, un dato puede ser que el tipo Agua tiene una frecuencia relativa de 14.23, que el tipo Dragon tiene una frecuencia de 27, o que hay 801 Pokémon considerados.

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

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

#Cálculo de frecuencia
fi = hist(datos$hp, 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_vidaBase=data.frame(vidaBase=intervalos,fi,fac,fri=round(fri,2),frac=round(frac,2))
knitr::kable(frec_vidaBase)
vidaBase fi fac fri frac
[0-20] 8 8 1.00 1.00
(20-40] 86 94 10.74 11.74
(40-60] 254 348 31.71 43.45
(60-80] 262 610 32.71 76.15
(80-100] 128 738 15.98 92.13
(100-120] 38 776 4.74 96.88
(120-140] 13 789 1.62 98.50
(140-160] 5 794 0.62 99.13
(160-180] 2 796 0.25 99.38
(180-200] 1 797 0.12 99.50
(200-220] 1 798 0.12 99.63
(220-240] 1 799 0.12 99.75
(240-260] 2 801 0.25 100.00

1.2. Gráficos

Variables cualitativa - Tipo Principal

Gráfico de barras

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

Gráfico tipo pie

p=ggplot((frec_Tipo), aes(x="", y=fri, fill=reorder(Tipo, -fri))) +
  geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_minimal() +
  labs(title="Frecuencia relativa - Tipo principal", x="Tipo principal", y = "Frecuencia relativa (%)")
p=p + scale_fill_brewer(palette="PuOr",aesthetics = "colour",name = "Tipo principal del Pokémon")
plot(p)

Gráfico tipo Pareto

p=ggplot(data=frec_Tipo, aes(x=reorder(Tipo, -fri),y=fi)) +
  geom_bar(stat="identity",fill="indianred1",alpha=0.8) + theme_minimal() + 
  labs(title="Frecuencia absoluta y absoluta acumulada - Tipo principal", x="Tipo principal", y = "Frecuencia absoluta")
p = p + geom_point(aes(y=fac))
ggplotly(p)

Variables cuantitativas - Vida Base (HP)

Diagrama de punto

library("BHH2")
dotPlot(datos$hp,xlab = "Vida Base",)

Histograma

grafico=ggplot(datos,aes(hp)) # Gráfico y datos base
#Histograma (25 niveles) (colores- http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf)
grafico = grafico + geom_histogram(bins=30,fill="indianred1",color="indianred1",alpha=0.8)
grafico = grafico + theme_bw() # Visualización estándar en blanco y negro
grafico = grafico + ylab("Frecuencia absoluta (vida base)") + xlab("Vida Base")
grafico = grafico + ggtitle("Histograma")
ggplotly(grafico)

Pregunta 2

¿Qué diferencia aprecia entre ambos tipos de representaciones?

R: La pregunta hace ilusión a la diferencia entre el Diagrama de punto y el Histograma (Ambas de carácter cuantitativo), en donde por su parte el Diagrama de punto muestra todas las variables, para cuando una característica de esta variable se repite, esta se apile con la ya estaba, de esta manera genera un diagrama que muestra a todas las variables con su caracteristica distintiva de manera ordenada, mientras que el Histograma presenta barras en vez de puntos, en donde cada barra es similar a un intervalo de frecuencia de los valores obtenidos, de esta manera haciendo esta mas general que el Diagrama de punto.