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.
Se utilizará el dataset ChickWeight para este trabajo.
data("ChickWeight")
ChickWeight
#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 |
#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 |
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)
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.