Distribuciones de frecuencias

Tablas y Gráficas

Autor/a
Afiliación
Allendair Rodriguez Manzo
Fecha de publicación

7 de mayo de 2023

install.packages(“tidyverse”), install.packages(“kableExtra”), install.packages(“agricolae”), install.packages(“ggplot2”), intall.packages(“gridExtra”), install.package(“lattice”)

(Wickham et al. 2019; Zhu 2021; Mendiburu 2021; Wickham 2016; Auguie 2017; Sarkar 2008)

Ver
#Activar paquetes.
library(lattice)
library(tidyverse)
library(kableExtra)
library(agricolae)
library(ggplot2)
library(gridExtra)

1 Distribuciones de frecuencias.

La distribución de frecuencias1, en otras palabras, es la manera en la que se ordena una serie de observaciones en diferentes grupos, y normalmente en modo ascendente o descendente.

Para verlo en un ejemplo, un grupo de personas puede agruparse de acuerdo con su edad en rangos de 18 a 25 años, de 26 a 40 años, de 41 a 60 años y de 61 años a más.

Conviene resaltar que la distribución de frecuencias suele efectuarse respecto a una muestra estadística2, aunque también podría ser en función de toda una población.

Tabla de frecuencias.

1.1 Tipos de distribuciones de frecuencias.

Es la cantidad de observaciones que pertenecen a cada grupo. También, se interpreta como la cantidad de veces que se repite un suceso. Por ejemplo, continuando con el caso anterior, puede ser que de un grupo de 100 personas, 20 de ellos tengan entre 26 y 40 años.

Se calcula dividiendo la frecuencia absoluta entre el número de datos, por ejemplo, volviendo a la situación planteada líneas arriba, \frac{20}{100} es igual a 0,2 o 20\%.

Resulta de sumar las frecuencias absolutas de una clase o grupo de la muestra (o población) con la anterior o las anteriores. Por ejemplo, para calcular la frecuencia absoluta acumulada del tercer grupo se suman las frecuencias absolutas del primer, segundo y tercer grupo.

Es el resultado de sumar las frecuencias relativas, tal y como explicamos para la frecuencia absoluta acumulada. Por ejemplo, para calcular la frecuencia relativa acumulada del cuarto grupo, se suman las frecuencias relativas del primer, segundo, tercer y cuarto grupo.

2 Base de datos.

Ver
#Leer base de datos.
BASE <-  read.table("Base2.csv", sep = ",", header = TRUE)

2.1 Primeras filas.

Ver
#Mostrar primeros elementos de la base de datos.
head(BASE)
  Estrato Sexo Hijos Edad
1       5    2     1   29
2       1    1     0   20
3       4    2     0   20
4       1    1     2   21
5       3    2     2   36
6       5    1     4   38

Asignar categorias a las variables cualitativas.

Ver
#Asignar categorías a las variables cualitativas.
BASE <- transform(BASE, Estrato=factor(Estrato, labels = c("Muy pobre", "Pobre", "Medio", "Rico", "Muy rico")))

BASE <- transform(BASE, Sexo=factor(Sexo, labels = c("Masculino", "Femenino")))

#Volver a ver primeros elementos.
head(BASE)
    Estrato      Sexo Hijos Edad
1  Muy rico  Femenino     1   29
2 Muy pobre Masculino     0   20
3      Rico  Femenino     0   20
4 Muy pobre Masculino     2   21
5     Medio  Femenino     2   36
6  Muy rico Masculino     4   38

2.2 Tabla de frecuencia para la variable “Sexo”.

Ver
#Frecuencias.
FrecAbs1 = table(BASE$Sexo)
FrecRel1 = round(prop.table(FrecAbs1), 1)
FrecReP1 = FrecRel1*100

#Nombres tabla.
Tabla_Sexo = cbind(FrecAbs1,FrecRel1,FrecReP1)
colnames(Tabla_Sexo) = c("ni","hi","hi%")
Form.Basic <- c("striped", "bordered", "hover", "condensed", "responsive")

#Generar tabla.
Tabla1 <- cbind.data.frame(Tabla_Sexo) %>%
  kable(align = "c") %>% 
  kable_styling(bootstrap_options = Form.Basic)

#Aspecto tabla.
Tabla1 %>%
  row_spec(0, bold = TRUE, color = "white", background = "#CC7373") %>%
  row_spec(1:nrow(Tabla_Sexo), align = "c")
ni hi hi%
Masculino 13 0.4 40
Femenino 17 0.6 60

Tabla No.1: Distribución de frecuencias para 30 personas según su sexo. Ibagué, abril 23 de 2023.

Esta tabla de frecuencia muestra la distribución de la variable “Sexo” en un conjunto de datos que contiene 30 observaciones. En total, hay 13 observaciones de género masculino y 17 observaciones de género femenino.

La frecuencia relativa para cada categoría muestra que el 40\% de las observaciones son de género masculino, mientras que el 60\% son de género femenino.

La frecuencia acumulada relativa indica que el 40\% de las observaciones son de género masculino y el 100\%de las observaciones están divididas entre género masculino y femenino.

2.3 Tabla de frecuencia para la variable “Estrato”.

Ver
#Frecuencias.
FrecAbs2 = table(BASE$Estrato)
FrecAbsA2 = cumsum(FrecAbs2)
FrecRel2 = round(prop.table(FrecAbs2), 3)
FrecReP2 = FrecRel2*100
FrecRelAP2 = cumsum(FrecReP2)

#Nombres columnas de la tabla.
Tabla_Estrato = cbind(FrecAbs2,FrecAbsA2,FrecRel2,FrecReP2,FrecRelAP2)
colnames(Tabla_Estrato) = c("ni","Ni","hi","hi%","Hi%")
Form.Basic <- c("striped", "bordered", "hover", "condensed", "responsive")

#Generar tabla.
Tabla2 <- cbind.data.frame(Tabla_Estrato) %>%
  kable(align = "c") %>% 
  kable_styling(bootstrap_options = Form.Basic)

#Aspecto tabla.
Tabla2 %>%
  row_spec(0, bold = TRUE, color = "white", background = "#CC7373") %>%
  row_spec(1:nrow(Tabla_Estrato), align = "c")
ni Ni hi hi% Hi%
Muy pobre 5 5 0.167 16.7 16.7
Pobre 3 8 0.100 10.0 26.7
Medio 5 13 0.167 16.7 43.4
Rico 6 19 0.200 20.0 63.4
Muy rico 11 30 0.367 36.7 100.1

Tabla No.2: Distribución de frecuencias para 30 personas según su estrato. Ibagué, abril 23 de 2023.

Esta tabla de frecuencia muestra la distribución de la variable “Estrato” en un conjunto de datos que contiene 30 observaciones. La variable “Estrato” se divide en cinco categorías: “Muy pobre”, “Pobre”, “Medio”, “Rico” y “Muy rico”.

La mayoría de las observaciones en el conjunto de datos se encuentran en los estratos “Muy rico” (1 observaciones) y “Medio” (5 observaciones), mientras que el menor número de observaciones se encuentra en los estratos “Pobre” y “Muy pobre” (3 y 5 observaciones, respectivamente).

En términos de frecuencia relativa, el estrato “Muy rico” tiene la mayor proporción de observaciones (36.7\%), seguido por los estratos “Medio” y “Rico” (16.7\% cada uno).

2.4 Tabla de frecuencia para la variable “Hijos”.

Ver
Lista3 <- hist(BASE$Hijos, plot = FALSE)

Tabla3_Kable <- table.freq(Lista3)
colnames(Tabla3_Kable) = c("Li","Ls","Yi","ni","hi%","Ni","Hi%")
Form.Basic <- c("striped", "bordered", "hover", "condensed", "responsive")

Tabla3 <- cbind.data.frame(Tabla3_Kable) %>%
  kable(align = "c") %>% 
  kable_styling(bootstrap_options = Form.Basic)

Tabla3 %>%
  row_spec(0, bold = TRUE, color = "white", background = "#CC7373") %>%
  row_spec(1:nrow(Tabla3_Kable), align = "c")
Li Ls Yi ni hi% Ni Hi%
0 1 0.5 12 40.0 12 40.0
1 2 1.5 7 23.3 19 63.3
2 3 2.5 2 6.7 21 70.0
3 4 3.5 6 20.0 27 90.0
4 5 4.5 3 10.0 30 100.0

Tabla No.3: Distribución de frecuencias para 30 personas según su número de hijos. Ibagué, abril 23 de 2023.

Esta tabla de frecuencia muestra la distribución de la variable “Hijos” en un conjunto de datos que contiene 30 observaciones. La variable “Hijos” se divide en cinco categorías basadas en los límites de clase.

La columna “L_{i}” indica el límite inferior de cada clase, la columna “L_{s}” indica el límite superior de cada clase, la columna “Y_{i}” indica el punto medio de cada clase, la columna “n_{i}” indica la frecuencia absoluta (número de observaciones) de cada clase y la columna “h_{i}\%” indica la frecuencia relativa porcentual de cada clase. La columna “N_{i}” indica la frecuencia acumulada y la columna “H_{}i\%” indica la frecuencia acumulada relativa porcentual.

La mayoría de las observaciones en el conjunto de datos tienen 0 o 1 hijos (12 y 7 observaciones, respectivamente). Solo 5 observaciones tienen 2 o más hijos.

En términos de frecuencia relativa, el 40\% de las observaciones tienen 0 hijos y el 23.3\% tienen 1 hijo. El 6.7\% tienen 2 hijos, el 20\% tienen 3 hijos y el 10\% tienen 4 hijos.

2.5 Tabla de frecuencia para la variable “Edad”.

Ver
Lista4 <- hist(BASE$Edad, plot = FALSE)
Tabla4 <- table.freq(Lista4)
colnames(Tabla4) = c("Li","Ls","Yi","ni","hi%","Ni","Hi%")

Tabla4_kable <- table.freq(Lista4)
colnames(Tabla4_kable) = c("Li","Ls","Yi","ni","hi%","Ni","Hi%")
Tabla4<- cbind.data.frame(Tabla4_kable) %>%
  kable(align = "c", format = "html") %>% 
  kable_styling(bootstrap_options = c("striped", "bordered", "hover", "condensed", "responsive"))

Tabla4 %>%
  row_spec(0, bold = TRUE, color = "white", background = "#CC7373") %>%
  row_spec(1:nrow(Tabla4_kable), align = "c")
Li Ls Yi ni hi% Ni Hi%
20 25 22.5 11 36.7 11 36.7
25 30 27.5 4 13.3 15 50.0
30 35 32.5 6 20.0 21 70.0
35 40 37.5 6 20.0 27 90.0
40 45 42.5 3 10.0 30 100.0

Tabla No.4: Distribución de frecuencias para 30 personas según su edad. Ibagué, abril 23 de 2023.

Esta tabla de frecuencia muestra la distribución de la variable “Edad” en un conjunto de datos que contiene 30 observaciones. La variable “Edad” se divide en cinco categorías basadas en los límites de clase.

La columna “L_{i}” indica el límite inferior de cada clase, la columna “L_{s}” indica el límite superior de cada clase, la columna “Y_{i}” indica el punto medio de cada clase, la columna “n_{i}” indica la frecuencia absoluta (número de observaciones) de cada clase y la columna “hi\%” indica la frecuencia relativa porcentual de cada clase. La columna “N_{i}” indica la frecuencia acumulada y la columna “Hi\%” indica la frecuencia acumulada relativa porcentual.

La mayoría de las observaciones en el conjunto de datos tienen edades entre 20 y 35 años, con 11 observaciones en el rango de 20-25 años y 6 observaciones en el rango de 30-35 años y 35-40 años. Solo 7 observaciones tienen edades superiores a 35 años.

En términos de frecuencia relativa, el 36.7\% de las observaciones tienen edades entre 20-25 años, mientras que el 13.3\% y el 20\% tienen edades entre 25-30 años y 30-35 años, respectivamente. El 20\% tienen edades entre 35-40 años y el 10\% tienen edades entre 40-45 años.

2.6 Cruce de variables cualitativas.

Ver
Tabla_Cruz <- table(BASE$Estrato,BASE$Sexo)
Tabla <- round(prop.table(Tabla_Cruz), 4)

Tabla_Cruz %>%
  kable(align = "c") %>% 
  kable_styling(bootstrap_options = Form.Basic) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#CC7373") %>%
  row_spec(1:nrow(Tabla_Cruz), align = "c")
Masculino Femenino
Muy pobre 2 3
Pobre 1 2
Medio 2 3
Rico 2 4
Muy rico 6 5

Tabla No.5: Frecuencia de género y nivel socioeconómico.

Esta tabla de frecuencia es un cruce de dos variables cualitativas: “Estrato” y “Sexo”. El cruce permite observar la distribución de los individuos en las diferentes categorías de cada variable, en función del sexo.

En este caso, se observa que la mayoría de los individuos en todas las categorías de estrato son mujeres, aunque la diferencia no es muy grande en la mayoría de los casos. La categoría de “Muy rico” es la única en la que hay más hombres que mujeres. Además, se puede observar que el número de individuos varía significativamente entre las diferentes categorías de estrato.

Ver
Tabla_Cruz <- table(BASE$Estrato,BASE$Sexo)
Tabla <- round(prop.table(Tabla_Cruz), 4)

Tabla %>%
  kable(align = "c") %>% 
  kable_styling(bootstrap_options = Form.Basic) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#CC7373") %>%
  row_spec(1:nrow(Tabla), align = "c")
Masculino Femenino
Muy pobre 0.0667 0.1000
Pobre 0.0333 0.0667
Medio 0.0667 0.1000
Rico 0.0667 0.1333
Muy rico 0.2000 0.1667

Tabla No.6 : Frecuencia relativa de género y nivel socioeconómico.

Esta tabla es también un cruce de las variables cualitativas “Estrato” y “Sexo”, pero en este caso los porcentajes corresponden a la proporción de hombres y mujeres en cada categoría de estrato.

Se puede observar que, en general, la proporción de mujeres es mayor que la proporción de hombres en todas las categorías de estrato, aunque la diferencia no es muy grande en la mayoría de los casos. La excepción es la categoría de “Muy rico”, donde la proporción de hombres es mayor que la de mujeres.

Este tipo de análisis de cruce de variables puede ayudar a entender mejor las diferencias en la distribución de género según diferentes categorías socioeconómicas, y puede ser útil para identificar patrones y desigualdades en la sociedad.

3 Gráficas.

3.1 Diagrama de barras simple para la variable “Estrato”, frecuencia absoluta.

Ver
BASE_resumen <- BASE %>%
  group_by(Estrato) %>%
  summarize(n = n())

ggplot(BASE_resumen, aes(x = Estrato, y = n, fill = Estrato)) +
  geom_bar(stat = "identity", 
           width = 0.6, 
           color = "black", 
           size = 0.2) +
  theme_minimal() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.line.x = element_line(size = 0.2, color = "black"),
        axis.ticks = element_blank(),
        axis.text = element_text(size = 12),
        plot.title = element_text(size = 18, face = "bold"),
        plot.caption = element_text(size = 12, hjust = 0)) +
  labs(title = "Diagrama de barras Estrato. Frecuencia absoluta.",
       x = "Estrato",
       y = "Frecuencia") +
   geom_text(aes(label = n), 
            position = position_stack(vjust = 1.1), 
            size = 5, 
            color = "black") +
  scale_fill_brewer(palette = "Set3") +
   scale_y_continuous(breaks = seq(0, max(BASE_resumen$n), 2))

Gráfica No.1: Diagrama de barras para 30 personas según su estrato. Frecuencia absoluta.

Ver
colores <- rainbow(nlevels(factor(BASE$Estrato)))

barchart(BASE$Estrato,
         xlab = "Estrato",
         ylab = "Frecuencia",
         main = "Diagrama de barras Estrato. Frecuencia absoluta.",
         horizontal = FALSE,
         col = colores,
         panel = function(x, y, ...) {
           panel.barchart(x, y, ...)
           panel.text(x, y, labels = y, pos = 3, cex = 0.8)
         })

Gráfica No.1: Diagrama de barras para 30 personas según su estrato. Frecuencia absoluta.

Ver
Tablaestr <- table(BASE$Estrato)
barp1 <- barplot(Tablaestr, main = "Diagrama de barras Estrato frecuencia absoluta", xlab = "Estrato",ylab = "Frecuencia", ylim = c(0,15),
        col = c("brown", "blue", "green", "red", "orange"))
        text(barp1, Tablaestr + 0.5, labels = Tablaestr)

Gráfica No.1: Diagrama de barras para 30 personas según su estrato. Frecuencia absoluta.

El análisis de la tabla muestra que la mayoría de las observaciones se encuentran en las categorías de “Medio”, “Rico” y “Muy rico”. La categoría de “Muy pobre” tiene la frecuencia más baja, seguida de “Pobre”. La categoría con la frecuencia absoluta más alta es “Muy rico”, con 11 observaciones.

En general, la distribución de frecuencia muestra una tendencia hacia niveles socioeconómicos más altos, lo que sugiere que la población estudiada tiende a estar concentrada en los niveles socioeconómicos superiores. Además, se observa una gran disparidad en la frecuencia absoluta entre las diferentes categorías, lo que puede tener implicaciones importantes en términos de desigualdad económica.

3.2 Diagrama de barras simple para la variable “Estrato”, frecuencia relativa.

Ver
BASE_resumen <- BASE %>%
  group_by(Estrato) %>%
  summarize(n = n())

BASE_resumen$FrecRelAP2 <- BASE_resumen$n / sum(BASE_resumen$n) * 100

ggplot(BASE_resumen, aes(x = Estrato, y = FrecRelAP2, fill = Estrato)) +
  geom_bar(stat = "identity", 
           width = 0.6, 
           color = "black", 
           size = 0.2) +
  theme_minimal() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.line.x = element_line(size = 0.2, color = "black"),
        axis.ticks = element_blank(),
        axis.text = element_text(size = 12),
        plot.title = element_text(size = 18, face = "bold"),
        plot.caption = element_text(size = 12, hjust = 0)) +
  labs(title = "Diagrama de barras Estrato. Frecuencia relativa (%).",
       x = "Estrato",
       y = "Porcentaje") +
  geom_text(aes(label = paste0(round(FrecRelAP2,1))), 
            position = position_stack(vjust = 1.1), 
            size = 5, 
            color = "black") +
  scale_fill_brewer(palette = "Set3")

Gráfica No.2: Diagrama de barras para 30 personas según su estrato. Frecuencia relativa.

Ver
colores <- rainbow(nlevels(factor(BASE$Estrato)))
BASE_resumen$FrecRelAP2 <- BASE_resumen$n / sum(BASE_resumen$n) *100
barchart(round(FrecRelAP2,2) ~ Estrato, data = BASE_resumen,
         xlab = "Estrato", ylab = "Porcentaje", main = "Diagrama de barras Estrato. Frecuencia relativa (%).",
         horizontal = FALSE,
         col = colores,
         panel = function(x, y, ...) {
           panel.barchart(x, y, ...)
           panel.text(x, y, labels = y, pos = 3, cex = 0.8)
         })

Gráfica No.2: Diagrama de barras para 30 personas según su estrato. Frecuencia relativa.

Ver
barp2 <- barplot(FrecReP2, main = "Diagrama de barras Estrato frecuencia relativa (%).", xlab = "Estrato", ylab = "Porcentaje", ylim = c(0,40), col = rainbow(5))
text(barp2, FrecReP2 + 1.2, labels = FrecReP2)

Gráfica No.2: Diagrama de barras para 30 personas según su estrato. Frecuencia relativa.

La gráfica muestra la distribución de frecuencia relativa por estrato de una variable en una muestra de datos. Los valores de la variable han sido agrupados en cinco categorías (muy pobre, pobre, medio, rico y muy rico) y se ha calculado la frecuencia relativa de cada categoría en la muestra. La gráfica utiliza un diagrama de barras, donde cada barra representa una categoría y su altura representa la frecuencia relativa correspondiente. La gráfica también incluye etiquetas en la parte superior de cada barra con el valor de la frecuencia relativa redondeado a una decimal.

La gráfica es clara y fácil de interpretar. Se puede observar que la categoría con la frecuencia relativa más alta es la de estrato muy, seguida de la categoría de estrato rico. Las categorías de estrato muy pobre y pobre tienen frecuencias relativas más bajas.

3.3 Diagrama de barras en una sola fila

Ver
p1 <- ggplot(BASE_resumen, aes(x = Estrato, y = n, fill = Estrato)) +
  geom_bar(stat = "identity", 
           width = 0.6, 
           color = "black", 
           size = 0.2) +
  theme_minimal() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.line.x = element_line(size = 0.2, color = "black"),
        axis.ticks = element_blank(),
        axis.text = element_text(size = 12),
        plot.title = element_text(size = 18, face = "bold"),
        plot.caption = element_text(size = 12, hjust = 0)) +
  labs(x = "Estrato",
       y = "Frecuencia") +
   geom_text(aes(label = n), 
            position = position_stack(vjust = 1.1), 
            size = 5, 
            color = "black") +
  scale_fill_brewer(palette = "Set3") +
   scale_y_continuous(breaks = seq(0, max(BASE_resumen$n), 2))

p2 <-ggplot(BASE_resumen, aes(x = Estrato, y = FrecRelAP2, fill = Estrato)) +
  geom_bar(stat = "identity", 
           width = 0.6, 
           color = "black", 
           size = 0.2) +
  theme_minimal() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.line.x = element_line(size = 0.2, color = "black"),
        axis.ticks = element_blank(),
        axis.text = element_text(size = 12),
        plot.title = element_text(size = 18, face = "bold"),
        plot.caption = element_text(size = 12, hjust = 0)) +
  labs(x = "Estrato",
       y = "Porcentaje") +
  geom_text(aes(label = paste0(round(FrecRelAP2,1))), 
            position = position_stack(vjust = 1.1), 
            size = 5, 
            color = "black") +
  scale_fill_brewer(palette = "Set3")

grid.arrange(p1, p2, ncol=2)

Gráfica No.3: Diagrama de barras en una sola fila para 30 personas según su estrato. Frecuencia absoluta y relativa.

Ver
colores <- rainbow(nlevels(factor(BASE$Estrato)))
BASE_resumen$FrecRelAP2 <- BASE_resumen$n / sum(BASE_resumen$n) *100
  
barras <- barchart(BASE$Estrato,
         xlab = "Estrato",
         ylab = "Frecuencia",
         horizontal = FALSE,
         col = colores,
         panel = function(x, y, ...) {
           panel.barchart(x, y, ...)
           panel.text(x, y, labels = y, pos = 3, cex = 0.8)
         }) 

print(barras, position = c(0, 0, 0.5, 1), more = TRUE)

barras2 <- barchart(round(FrecRelAP2,2) ~ Estrato, 
                       data = BASE_resumen,
                       xlab = "Estrato", ylab = "Porcentaje",
         horizontal = FALSE,
         col = colores,
         panel = function(x, y, ...) {
           panel.barchart(x, y, ...)
           panel.text(x, y, labels = y, pos = 3, cex = 0.8)
         })

print(barras2, position = c(0.5, 0, 1, 1), more = FALSE)

Gráfica No.3: Diagrama de barras en una sola fila para 30 personas según su estrato. Frecuencia absoluta y relativa.

Ver
par(mfrow = c(1, 2))

Tablaestr <- table(BASE$Estrato)
barp1 <- barplot(Tablaestr, xlab = "Estrato",ylab = "Frecuencia", ylim = c(0,15), col = c("brown", "blue", "green", "red", "orange"))
text(barp1, Tablaestr + 0.5, labels = Tablaestr)

barp2 <- barplot(FrecReP2, xlab = "Estrato", ylab = "Porcentaje", ylim = c(0,40), col = rainbow(5))
text(barp2, FrecReP2 + 1.2, labels = FrecReP2)

Gráfica No.3: Diagrama de barras en una sola fila para 30 personas según su estrato. Frecuencia absoluta y relativa.

La figura muestra dos gráficos de barras relacionados con la variable “Estrato”. El primer gráfico muestra la frecuencia de cada estrato en la muestra, con las barras coloreadas de manera diferente para cada categoría de estrato. El segundo gráfico muestra los porcentajes de cada estrato, también coloreados de manera diferente.

En el primer gráfico, se puede observar que el estrato 1 tiene la mayor frecuencia, seguido del estrato 2 y el estrato 3, mientras que los estratos 4 y 5 tienen las frecuencias más bajas. El segundo gráfico muestra que el estrato 1 representa aproximadamente el 37\% de la muestra, mientras que el estrato 2 representa alrededor del 20\%, el estrato 3 representa alrededor del 17\%, el estrato 4 representa alrededor del 10\%, y el estrato 5 representa alrededor del 17\% de la muestra.

En general, se puede concluir que la muestra parece tener una distribución sesgada hacia los estratos más bajos, especialmente el estrato 2. Esto puede tener implicaciones para cualquier análisis estadístico posterior que se realice con los datos, ya que la muestra puede no ser representativa de la población en general.

3.4 Diagrama de barras compuesta. Variable Estrato vs Sexo.

Ver
#Gráfica
ggplot(BASE, aes(x = Sexo, fill = Estrato)) +
  geom_bar(position = "dodge") + 
  theme_minimal() +
  labs(title = "Diagrama de barras compuesto. Estrato vs Sexo.",
       x = "Estrato",
       y = "Frecuencia",
       fill = "Estrato") +
  scale_fill_brewer(palette = "Set3")

Gráfica No.4: Diagrama de barras compuesto para 30 personas según su estrato y sexo.

Ver
barp3 <- barplot(Tabla_Cruz, main = "Diagrama de barras Compuesta", xlab = "Estrato", ylab = "Frecuencia", ylim = c(0,10), legend = rownames(Tabla_Cruz), col = c("brown", "blue", "green", "red", "orange"), beside = TRUE)

Gráfica No.4: Diagrama de barras compuesto para 30 personas según su estrato y sexo.

Esta gráfica es un diagrama de barras compuesto que muestra la frecuencia de los distintos estratos para hombres y mujeres. La variable “Sexo” se representa en el eje X y la variable “Estrato” se representa mediante la separación de las barras en diferentes colores.

La gráfica muestra que el estrato más común para ambos sexos es el estrato Muy rico, y el menos común es el estrato Pobre. Además, se puede observar que la frecuencia de hombres y mujeres en cada estrato es bastante similar.

En conclusión, esta gráfica proporciona una buena visualización de la relación entre el estrato y el sexo, permitiendo la comparación directa de la frecuencia de cada estrato para hombres y mujeres.

3.5 Diagrama de barras apiladas. Variables Estrato vs Sexo.

Ver
library(tidyverse)

df <- as.data.frame(Tabla_Cruz)

ggplot(df, aes(x = Var2, y = Freq, fill = Var1)) +
  geom_col(position = "stack") +
  labs(title = "Diagrama de barras apilado",
       x = "Sexo",
       y = "Frecuencia",
       fill = "Estrato") +
  scale_fill_brewer(palette = "Set3") +
  theme_minimal()

Gráfica No.5: Diagrama de barras compuesto para 30 personas según su estrato y sexo.

Ver
barp4 <- barplot(Tabla_Cruz, main = "Diagrama de barras Apilado", xlab = "Estrato", ylab = "Frecuencia", ylim = c(0,20), legend.text = rownames(Tabla_Cruz), args.legend = list(x = "topleft"), col = c("brown", "blue", "green", "red", "orange"), beside = FALSE)

Gráfica No.5: Diagrama de barras compuesto para 30 personas según su estrato y sexo.

La gráfica resultante tiene en el eje X los valores de la variable Sexo (Masculino y Femenino), y en el eje Y la frecuencia de cada combinación de Estrato y Sexo. La leyenda se muestra en la esquina superior izquierda de la gráfica y contiene los nombres de las categorías de Estrato.

Se puede observar que el estrato Muy rico tiene la mayor frecuencia de observaciones para ambos sexos. El estrato Pobre tiene la menor frecuencia para ambos sexos. Además, se puede ver que la distribución de frecuencias por estrato y sexo varía ligeramente: el estrato Rico tiene una mayor frecuencia de observaciones para mujeres, mientras que el estrato Muy rico tiene una mayor frecuencia de observaciones para hombres.

3.6 Diagrama de barras horizontal para la variable Estrato.

Ver
ggplot(BASE, aes(y = Estrato, fill = Estrato)) +
  geom_bar() + 
  theme_minimal() +
  labs(title = "Diagrama de barras horizontal",
       x = "Frecuencia",
       y = "Estrato") +
  scale_fill_brewer(palette = "Set3")

Gráfica No.6: Diagrama de barras horizontal para 30 personas según su estrato.

Ver
barp5 <- barplot(FrecAbs2, main = "Diagrama de barras horizontal Estrato ", xlab = "Frecuencia", ylab = "Estrato", horiz = TRUE,
col = c("brown", "blue", "green", "red", "orange"))

Gráfica No.6: Diagrama de barras horizontal para 30 personas según su estrato.

La gráfica de barras horizontal que se presenta muestra la frecuencia absoluta de cada uno de los estratos, representados por diferentes colores. La frecuencia es el número de observaciones que se encuentran en cada estrato. Se puede ver que el estrato muy rico es el que tiene la mayor frecuencia, seguido del estrato pobre rico, medio y muy pobre. El estratos Pobre tiene la frecuencia más baja.

El análisis de la tabla muestra que la mayoría de las observaciones se encuentran en las categorías de “Medio”, “Rico” y “Muy rico”. La categoría de “Muy pobre” tiene la frecuencia más baja, seguida de “Pobre”. La categoría con la frecuencia absoluta más alta es “Muy rico”, con 11 observaciones.

En general, la distribución de frecuencia muestra una tendencia hacia niveles socioeconómicos más altos, lo que sugiere que la población estudiada tiende a estar concentrada en los niveles socioeconómicos superiores. Además, se observa una gran disparidad en la frecuencia absoluta entre las diferentes categorías, lo que puede tener implicaciones importantes en términos de desigualdad económica.

3.7 Diagrama de sectores frecuencias absolutas.

Ver
# Convertir los datos a un data frame
datos <- data.frame(
  categoria = c("Muy pobre", "Pobre",  "Medio", "Rico", "Muy rico"))


# Crear la gráfica de pastel
grafica <- ggplot(datos, aes(x="", y=FrecAbs2, fill=categoria)) +
  geom_bar(stat="identity", width=1) +
  coord_polar("y", start=0) +
  theme_void() +
  scale_fill_manual(values=c("#73DFC3", "#FDFFB0", "#CDB2E5", "#FF6C6C", "blue"))
# Agregar etiquetas y leyenda
grafica <- grafica +
  geom_text(aes(label=paste0(FrecAbs2)), position=position_stack(vjust=0.5), size=5) +
  labs(title="Frecuencia Estrato") +
  theme(plot.title = element_text(hjust = 0.5)) +
  guides(fill=guide_legend(title="Estrato"))
# Mostrar Gráfica
grafica

Gráfica No.7: Diagrama de sectores para 30 personas según su estrato.

Ver
etiquetas <- paste0(FrecAbs2)
col <- c("#73DFC3", "#FDFFB0", "#CDB2E5", "#FF6C6C", "blue")
pie2 <- pie(FrecAbs2, labels = etiquetas, col = c("#73DFC3", "#FDFFB0", "#CDB2E5", "#FF6C6C", "blue"), main = "Frecuencia Estrato",init.angle = 30)
legend("bottomleft", c("Muy pobre", "Pobre",  "Medio", "Rico", "Muy rico"), fill = col, border = "white", bty = "n", cex = 0.9)

Gráfica No.7: Diagrama de sectores para 30 personas según su estrato.

La gráfica de pastel que se presenta muestra la frecuencia absoluta de cada uno de los estratos, representados por diferentes secciones de la torta. La sección de la torta correspondiente al estrato muy rico es la más grande, lo que indica que es el estrato con la frecuencia absoluta más alta. La sección correspondiente al estrato rico es la segunda más grande, seguida de las secciones correspondientes a los estratos medio, muy pobre y pobre en orden descendente de tamaño.

El análisis de la gráfica muestra que la mayoría de las observaciones se encuentran en las categorías de “Medio”, “Rico” y “Muy rico”. La categoría de “Muy pobre” tiene la frecuencia más baja, seguida de “Pobre”. La categoría con la frecuencia absoluta más alta es “Muy rico”, con 11 observaciones.

3.8 Diagrama de sectores frecuencias relativas

Ver
library(ggplot2)

# Convertir los datos a un data frame
datos <- data.frame(
  categoria = c("Muy pobre", "Pobre",  "Medio", "Rico", "Muy rico"),
  frecuencia = FrecRel2
)
# Calcular los porcentajes
porcentaje <- FrecRel2 * 100

# Crear la gráfica de pastel
grafica <- ggplot(datos, aes(x="", y=porcentaje, fill=categoria)) +
  geom_bar(stat="identity", width=1) +
  coord_polar("y", start=0) +
  theme_void() +
  scale_fill_manual(values=c("#73DFC3", "#FDFFB0", "#CDB2E5", "#FF6C6C", "blue"))

# Agregar etiquetas y leyenda
grafica <- grafica +
  geom_text(aes(label=paste0(porcentaje, "%")), position=position_stack(vjust=0.5), size=5) +
  labs(title="Porcentaje Frecuencia Estrato") +
  theme(plot.title = element_text(hjust = 0.5)) +
  guides(fill=guide_legend(title="Estrato"))

grafica

Gráfica No.8: Diagrama de sectores para el porcentaje de 30 personas según su estrato.

Ver
etiquetas <- paste0(FrecRel2*100, "%")
col <- c("#73DFC3", "#FDFFB0", "#CDB2E5", "#FF6C6C", "blue")
pie2 <- pie(FrecRel2, labels = etiquetas, col = c("#73DFC3", "#FDFFB0", "#CDB2E5", "#FF6C6C", "blue"), main = "Frecuencia Estrato",init.angle = 30)
legend("bottomleft", c("Muy pobre", "Pobre",  "Medio", "Rico", "Muy rico"), fill = col, border = "white", bty = "n", cex = 0.9)

Gráfica No.8: Diagrama de sectores para el porcentaje de 30 personas según su estrato.

La gráfica de pastel que se presenta muestra la frecuencia relativa de cada uno de los estratos, representados por diferentes secciones de la torta. La sección de la torta correspondiente al estrato muy rico es la más grande, lo que indica que es el estrato con la frecuencia absoluta más alta. La sección correspondiente al estrato rico es la segunda más grande, seguida de las secciones correspondientes a los estratos medio, muy pobre y pobre en orden descendente de tamaño.

Se observa que los estratos medio y muy pobre tienen el mismo porcentaje de personas que pertenecen (16.7\%), mientras que al estatro pobre y muy rico, pertenecen el 10\% y 36.7\% respectivamente.

3.9 Diagrama de bastones variable Hijos

Ver
j <- c(0, 1, 2, 3, 4, 5)
k <- c(5, 7, 7, 2, 6, 3)
p1 <- plot(x = j, y = k, xlab = "No. Hijos", ylab = "Frecuencia", pch = 15, main = "Variable Hijos", col = "#87CEFA")
abline(h = seq(0, max(k), by = 1), lty = 2, col = "gray")
abline(v = seq(0, max(j), by = 0.5), lty = 2, col = "gray")
segments(x0 = j, y0 = 0, x1 = j, y1 = k, lwd = 2, col = "#87CEFA")

Gráfica No.9: Diagrama de bastones para la frecuencia de 30 personas según su número de hijos.

La gráfica muestra una distribución de frecuencia de la variable “No. Hijos” en una muestra de datos. En el eje x se encuentra la cantidad de hijos y en el eje y se encuentra la frecuencia de cada cantidad de hijos en la muestra.

Se puede observar que la mayoría de las personas en la muestra tienen 1 o 2 hijos, mientras que las personas con 3 o más hijos son menos frecuentes. La línea horizontal muestra los niveles de frecuencia, mientras que las líneas verticales representan cada valor de la variable “No. Hijos”.

La distribución parece ser asimétrica hacia la derecha, lo que sugiere que la mayoría de las personas en la muestra tienen un bajo número de hijos. También se puede notar que hay una mayor variabilidad en la frecuencia de las personas que tienen un número mayor de hijos.

3.10 Diagrama de bastones escalonado para variable hijos.

Ver
x <- 0:5
fx <- c(5, 7, 7, 2, 6, 3)/30
Fx <- cumsum(fx)*100
plot(x = c(0, x), y = c(0, Fx), type = "s", xlab = "No. Hijos", ylab = "Porcentaje acumulado", col = "blue", lwd = 2)
abline(h = seq(0, max(Fx), by = 10), lty = 2, col = "gray")
abline(v = seq(0, max(x), by = 0.5), lty = 2, col = "gray")
points(x, Fx, col = "blue", pch = 15)

Gráfica No.10: Diagrama escalonado acumulado para la frecuencia de 30 personas según su número de hijos.

Esta gráfica representa una distribución acumulada de la variable “número de hijos” en una muestra de datos. El eje horizontal muestra los posibles valores de la variable (de 0 a 5 hijos) y el eje vertical muestra el porcentaje acumulado de individuos que tienen hasta ese número de hijos.

La línea azul muestra la curva de distribución acumulada, la cual es creciente y tiene un “salto” en los puntos en que la frecuencia relativa cambia. La línea punteada permite una rápida interpretación de los resultados. Por ejemplo, se puede ver que aproximadamente el 60\% de los individuos tienen 2 o menos hijos, mientras que el 90\% tienen 4 o menos hijos.

3.11

Ver
# Establecer la disposición de los gráficos en una matriz de 2x2
par(mfrow=c(2,2))

# Gráfico 1: Frecuencia Absoluta
h1 <- graph.freq(BASE$Edad, col="#73DFC3", frequency=1, main="Frecuencia Absoluta", xlab = "Edad")

# Gráfico 2: Polígono de Frecuencia
h2 <- graph.freq(BASE$Edad, col="#FDFFB0", frequency=2, main="Polígono de Frecuencia",xlab = "Edad")
polygon.freq(h2, col="blue", lwd=2, frequency=2)

# Gráfico 3: Densidad
h3 <- graph.freq(BASE$Edad, col="#CDB2E5", frequency=3, main="Densidad", xlab = "Edad")

# Gráfico 4: Densidad Normal
h4 <- graph.freq(BASE$Edad, col="#FF6C6C", frequency=3, main="Densidad Normal", xlab = "Edad", density=4)
normal.freq(h4, col="green", lty=4, lwd=2, frequency=3)

Gráfica No.11: Histograma, poligono, densidad y ojiva para la edad de 30 personas.

El código proporciona cuatro gráficos diferentes, que representan diferentes aspectos de la variable Edad en una base de datos. La disposición de los gráficos en una matriz de 2x2 es una buena opción para visualizarlos juntos y compararlos fácilmente.

El Gráfico 1 muestra la frecuencia absoluta de la variable Edad. El Gráfico 2 muestra el polígono de frecuencia de la variable Edad. También se ha añadido una sombra que ayuda a visualizar la distribución de los datos de una manera más clara. El Gráfico 3 muestra la densidad de la variable Edad. Nuevamente. El Gráfico 4 muestra la densidad normal de la variable Edad. La densidad normal se utiliza para comparar la distribución de la variable con una distribución normal. El gráfico muestra la densidad normal superpuesta a la densidad de la variable Edad. La elección de colores y las etiquetas están bien definidas.

En general, el código proporciona una visualización adecuada de la variable Edad y es fácil de interpretar para los estadísticos y para cualquier persona que desee comprender mejor los datos.

3.12 Ojiva de freceuncias variable Edad

Ver
h9 <- ogive.freq(h1,axes=FALSE,type="b", main="ojiva de frecuencias",
col="red")
axis(2,round(h9[,2],1),las=2)
axis(1,round(h9[,1],1),las=2)

Gráfica No.12: Ojiva para la edad de 30 personas.

La gráfica muestra una ojiva de frecuencias acumuladas para la variable edad con valores en el eje x y frecuencias acumuladas en el eje y. Se puede observar que la distribución de los datos es positivamente sesgada, lo que indica que hay más valores más pequeños y menos valores más grandes.

Los valores extremos, es decir, los valores más pequeños y los valores más grandes, tienen frecuencias acumuladas bajas, lo que indica que son menos comunes en el conjunto de datos.

El tipo de clase de la función hist() es “histogram” y de grah.freq() es “graph.freq”, sin embargo es posible establecer compatibilidad entre ambas funciones.

Ver
hh <- hist(BASE$Edad,nclass=6, plot=FALSE)
colors <- c("#FDFFB0")

h11<-graph.freq(hh, frequency=2, col=colors, main="Histograma de frecuencias relativas", xlab = "Edad" ,axes=F)
axis(1,h11$breaks,las=2)
axis(2,round(h11$relative,2),las=2)

Gráfica No.13: Histograma de porcentaje para la edad de 30 personas.

La gráfica muestra un histograma de frecuencias relativas de la variable “Edad” en el conjunto de datos. La variable “Edad” se divide en 6 clases, y se muestra la proporción de valores que caen en cada clase en el eje y.

La mayoría de los valores de edad en el conjunto de datos se encuentran entre los 20 y los 25 años, lo que indica que la distribución de la edad es relativamente joven. La distribución es relativamente simétrica, lo que sugiere que la edad está distribuida de manera uniforme en el conjunto de datos.

3.13 Histograma a partir de datos agrupados

Si se tiene datos agrupados, con la función graph.freq() se puede graficar y obtener los resumenes del histograma; asi por ejemplo en la siguiente tabla:

Intervalos
0 - 10 10 - 20 20 - 30 30 - 40 40 - 50
3 8 15 18 6
Ver
# Define histogram data
clases <- c(0, 10, 20, 30, 40, 50)
frec <- c(3, 8, 15, 18, 6)

# Create histogram plot
h12 <- graph.freq(clases, counts = frec, 
                  xlab = "Clases", 
                  main = "Histograma de frecuencias",
                  col = "#FDFFB0",
                  border = "black",
                  xlim = c(min(clases), max(clases)+10),
                  ylim = c(0, max(frec)*1.2),
                  ylab = "Frecuencia")

# Add a legend
legend("topright", 
       legend = "Frecuencias", 
       fill = "#FDFFB0", 
       border = "black")

Gráfica No.14: Histograma de frecuencia para la edad de 30 personas.

La gráfica que se muestra es un histograma de frecuencias de datos agrupados en clases. Las clases se han definido como “0-10”, “10-20”, “20-30”, “30-40” y “40-50”. La frecuencia de cada clase se ha dado en el eje y.

Observando la gráfica, se puede notar que la mayor frecuencia se encuentra en la clase “30-40”, lo que indica que la mayoría de los datos se concentran en ese intervalo. También se puede observar que las clases extremas, “0-10” y “40-50”, tienen una frecuencia menor. La forma de la gráfica sugiere una distribución aproximadamente simétrica, con una ligera asimetría hacia la derecha debido a la clase “30-40” que tiene una frecuencia más alta.

Referencias

Auguie, Baptiste. 2017. «gridExtra: Miscellaneous Functions for "Grid" Graphics». https://CRAN.R-project.org/package=gridExtra.
Mendiburu, Felipe de. 2021. «agricolae: Statistical Procedures for Agricultural Research». https://CRAN.R-project.org/package=agricolae.
Sarkar, Deepayan. 2008. «Lattice: Multivariate Data Visualization with R». http://lmdvr.r-forge.r-project.org.
Wickham, Hadley. 2016. «ggplot2: Elegant Graphics for Data Analysis». https://ggplot2.tidyverse.org.
Wickham, Hadley, Mara Averick, Jennifer Bryan, Winston Chang, Lucy D’Agostino McGowan, Romain François, Garrett Grolemund, et al. 2019. «Welcome to the tidyverse» 4: 1686. https://doi.org/10.21105/joss.01686.
Zhu, Hao. 2021. «kableExtra: Construct Complex Table with ’kable’ and Pipe Syntax». https://CRAN.R-project.org/package=kableExtra.

Notas

  1. La distribución de frecuencias es la forma en la que un conjunto de datos se clasifica en distintos grupos excluyentes entre sí. Es decir, si un dato pertenece a un grupo no puede pertenecer a otro.↩︎

  2. Una muestra estadística es un subconjunto de datos perteneciente a una población de datos. Estadísticamente hablando, debe estar constituido por un cierto número de observaciones que representen adecuadamente el total de los datos.↩︎