Resumen

A continuación se encuentran las respuestas y su código correspondiente a los enunciados presentados en la cuarta sesión de Ejercicio del Ramo de Estadística Computacional.

1.1 Distribución de Frecuencia

Se utilizará el dataset ChickWeight para este trabajo.

data("ChickWeight")
ChickWeight

Variable cualitativa: Dieta

#Tabla de frecuencia variables cuanlitativas

#Frecuencia
fi=as.numeric(sort(table(ChickWeight$Diet)))  #Frecuencia absoluta
fac=cumsum(fi)                    #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100    #Frecuencia relativa
frac=cumsum(fri)                  #Frecuencia relativa acumulada
dieta = c("Dieta 1", "Dieta 2", "Dieta 3", "Dieta 4")

#Tabla
frec_dieta = data.frame(dieta,fi,fac,fri=round(fri,2),frac=round(frac,2))

#Visualización
knitr::kable(frec_dieta)
dieta fi fac fri frac
Dieta 1 118 118 20.42 20.42
Dieta 2 120 238 20.76 41.18
Dieta 3 120 358 20.76 61.94
Dieta 4 220 578 38.06 100.00

Variable cuantitativa: Peso

#Tabla de frecuencia variables cuantitativas

#Frecuencia
fi2=as.numeric(table(ChickWeight$weight))  #Frecuencia absoluta
fac2=cumsum(fi2)                    #Frecuencia acumulada
fri2=as.numeric(fi2/sum(fi2))*100    #Frecuencia relativa
frac2=cumsum(fri2)                  #Frecuencia relativa acumulada

#Tabla
peso=sort(unique(ChickWeight$weight))
frec_peso=data.frame(peso,fi2,fac2,fri2=round(fri2,2),frac2=round(frac2,2))

#Visualización
knitr::kable(head(frec_peso,5))
peso fi2 fac2 fri2 frac2
35 1 1 0.17 0.17
39 8 9 1.38 1.56
40 5 14 0.87 2.42
41 20 34 3.46 5.88
42 15 49 2.60 8.48
knitr::kable(tail(frec_peso,5))
peso fi2 fac2 fri2 frac2
208 331 1 574 0.17 99.31
209 332 1 575 0.17 99.48
210 341 1 576 0.17 99.65
211 361 1 577 0.17 99.83
212 373 1 578 0.17 100.00

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

Asignar su frecuencia a cada dato de la muestra estudiada permite ordenar, agrupar y caracterizar los datos. Al tener los datos organizados mediante su frecuencia, el procesamiento de estos se vuelve una tarea secuencial, facilitando la obtención de información a través de su cómputo.

#Tabla de frecuencia variables cuantitativas

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

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

 #Cálculo de frecuencia
fi3 = hist(ChickWeight$weight, plot=FALSE, breaks = k)$counts      #Frecuencia con intervalos
fac3=cumsum(fi3)                                            #Frecuencia acumulada
fri3=as.numeric(fi3/sum(fi3))*100                            #Frecuencia relativa
frac3=cumsum(fri3)                                          #Frecuencia relativa acumulada  

frec_peso=data.frame(peso=intervalos,fi3,fac3,fri3=round(fri3,2),frac=round(frac3,2))
knitr::kable(frec_peso)
peso fi3 fac3 fri3 frac
[0-40] 14 14 2.42 2.42
(40-60] 115 129 19.90 22.32
(60-80] 88 217 15.22 37.54
(80-100] 61 278 10.55 48.10
(100-120] 52 330 9.00 57.09
(120-140] 43 373 7.44 64.53
(140-160] 54 427 9.34 73.88
(160-180] 34 461 5.88 79.76
(180-200] 33 494 5.71 85.47
(200-220] 23 517 3.98 89.45
(220-240] 21 538 3.63 93.08
(240-260] 7 545 1.21 94.29
(260-280] 12 557 2.08 96.37
(280-300] 7 564 1.21 97.58
(300-320] 6 570 1.04 98.62
(320-340] 5 575 0.87 99.48
(340-360] 1 576 0.17 99.65
(360-380] 2 578 0.35 100.00

1.2 Gráficos

Variables cualitativas: Dieta

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
# Gráfico de barras
p=ggplot(data=frec_dieta, aes(x=reorder(dieta, -fri),y=fi)) +
  geom_bar(stat="identity",fill="maroon",alpha=0.8) + theme_minimal() + 
  labs(title="Frecuencia absoluta - Dieta", x="Dieta", y = "Frecuencia absoluta")
ggplotly(p)
p=ggplot(frec_dieta, aes(x="", y=fri, fill=reorder(dieta, -fri))) +
  geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_minimal() +
  labs(title="Frecuencia relativa - Dieta", x="Dieta", y = "Frecuencia relativa (%)")
p=p + scale_fill_brewer(palette="RdPu",name = "Tipo de Dieta")
plot(p)

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

Variables cuantitativas: Peso

library("BHH2")
dotPlot(ChickWeight$weight,xlab = "Peso (gramos)",)

grafico=ggplot(ChickWeight,aes(weight)) # 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="maroon",color="maroon",alpha=0.8)
grafico = grafico + theme_bw() # Visualización estándar en blanco y negro
grafico = grafico + ylab("Frecuencia absoluta (peso)") + xlab("Peso (gramos)")
grafico = grafico + ggtitle("Histograma")
ggplotly(grafico)

Pregunta: ¿Qué diferencia aprecia entre ambos tipos de representaciones?

Ambas representaciones presentan beneficios dependiendo del trabajo en el que se deseen utilizar. Las tablas permiten un procesamiento más amigable de los datos presentados, al tratarse de matrices con columnas y filas, de las cuales resulta una tarea poco costosa computacionalmente procesar sus datos. Por otro lado, los gráficos facilitan la representación de los datos tabulados, exhibiendo de una forma más instintiva medidas como frecuencias, densidad de datos y dispersión entre ellos.