DISTRIBUCIONES DE FRECUENCIAS

TALLER

Autor/a
Afiliación

Alannis Duque
Johan Rodriguez
Mauricio Borda

Fecha de publicación

19 de octubre de 2025

Logo Universidad del Tolima
Ver código
# Verificar, instalar y activar el paquete "tidyverse"
if (!require(tidyverse)) {
  install.packages("tidyverse")
}
library(tidyverse)

# Verificar, instalar y activar el paquete "kableExtra"
if (!require(kableExtra)) {
  install.packages("kableExtra")
}
library(kableExtra)

# Verificar, instalar y activar el paquete "readxl"
if (!require(readxl)) {
  install.packages("readxl")
}
library(readxl)

1 .Introducción

1.1 Concepto general

Una distribución de frecuencias es una herramienta estadística que permite organizar un conjunto de datos según el número de veces que se repite cada valor o grupo de valores. Su objetivo principal es resumir la información y mostrar la estructura de los datos para facilitar su análisis e interpretación.


1.2 Elementos fundamentales

Término Definición Fórmula
Frecuencia absoluta ( f_i ) Número de veces que se repite un valor o intervalo.
Frecuencia acumulada ( F_i ) Suma progresiva de las frecuencias absolutas. ( F_i = \sum_{j=1}^{i} f_j )
Frecuencia relativa ( h_i ) Proporción de observaciones en una categoría. ( h_i = \dfrac{f_i}{N} )
Frecuencia relativa acumulada ( H_i ) Suma acumulada de las frecuencias relativas. ( H_i = \sum_{j=1}^{i} h_j )
Marca de clase ( x_i ) Punto medio del intervalo de clase. ( x_i = \dfrac{L_i + L_s}{2} )
Porcentaje ( p_i ) Frecuencia expresada en porcentaje. ( p_i = h_i \times 100 % )

1.3 Construcción de una distribución de frecuencia

  1. Datos no agrupados (discretos)

Cuando los valores son contables (por ejemplo, número de hijos), basta con contar las repeticiones de cada valor.

  1. Datos agrupados (continuos)

Cuando los datos son numerosos o continuos, se agrupan en intervalos de clase. El proceso típico es:

  1. Rango: [ R = X_{\text{máx}} - X_{\text{mín}} ]
  2. Número de clases (Regla de Sturges): [ k = 1 + 3.322 \log_{10} N ]
  3. Amplitud de clase: [ A = \dfrac{R}{k} ]
  4. Definir los límites e intervalos de clase.

1.4 Tipos de distribuciones

  1. Distribución simétrica

[ \text{Media} \approx \text{Mediana} \approx \text{Moda} ] La gráfica tiene forma de campana (como la distribución normal).

  1. Distribución asimétrica positiva

[ \text{Moda} < \text{Mediana} < \text{Media} ] Cola extendida hacia la derecha.

  1. Distribución asimétrica negativa

[ \text{Media} < \text{Mediana} < \text{Moda} ] Cola extendida hacia la izquierda.

  1. Distribución bimodal

Presenta dos picos o modas, indicando la mezcla de dos grupos distintos dentro del conjunto de datos.


1.5 Representaciones gráficas

  • Histograma: representa las frecuencias mediante barras contiguas.
  • Polígono de frecuencias: une los puntos correspondientes a las marcas de clase con sus frecuencias.
  • Ojiva: muestra la frecuencia acumulada en función de los límites superiores.
  • Diagramas de barras o pastel: se utilizan para variables cualitativas o discretas.

1.6 Interpretación estadística

Una distribución de frecuencia permite analizar:

  • Tendencia central: media (( {x} )), mediana (( Me )), moda (( Mo )).
  • Dispersión: rango (( R )), varianza (( s^2 )), desviación estándar (( s )).

Las fórmulas asociadas son:

[ \bar{x} = \dfrac{\sum f_i x_i}{N} ]

[ s^2 = \dfrac{\sum f_i (x_i - \bar{x})^2}{N} ]

[ s = \sqrt{s^2} ]


1.7 Relación con la probabilidad

La frecuencia relativa es una estimación empírica de la probabilidad de un evento. Por el teorema de los grandes números, al aumentar ( N ), se cumple que:

[ P(A) h_A = ]


1.8 Ejemplo resumido

Supón una muestra de 50 estudiantes con calificaciones entre 0 y 100:

Intervalo ( f_i ) ( F_i ) ( h_i ) ( H_i ) ( x_i )
0–19 2 2 0.04 0.04 9.5
20–39 6 8 0.12 0.16 29.5
40–59 15 23 0.30 0.46 49.5
60–79 18 41 0.36 0.82 69.5
80–100 9 50 0.18 1.00 90

De esta tabla se deduce que la distribución es unimodal con tendencia central en el intervalo ( 60–79 ).


1.9 Aplicaciones en estadística inferencial

Las distribuciones de frecuencia son el punto de partida para:

  • Ajustar modelos de probabilidad (Normal, Binomial, Poisson).
  • Realizar pruebas de hipótesis.
  • Estimar parámetros poblacionales.
  • Calcular intervalos de confianza.

Tabla de Frecuencias

2 Tablas de Frecuencia DataSet (Base de datos)

2.1 .Base de Datos

https://acortar.link/PouUiE

2.2 .Leer el dataset

Ver código
library(readxl)
empleo <- read_excel("empleo.xlsx")

##.Explorar el Dataset

.Mostrar primeras filas

Ver código
head(empleo, 4)
# A tibble: 4 × 10
  SEXO       EDAD EDUCACION FUNCION  SALARIO SERVICIO EXPERIENCIA ESTADO   HIJOS
  <chr>     <dbl>     <dbl> <chr>      <dbl>    <dbl>       <dbl> <chr>    <dbl>
1 Masculino    49        15 Gerencia   57000     8.17        12   Unión L…     0
2 Masculino    43        16 Oficina    40200     8.17         3   Casado       3
3 Femenino     71        12 Oficina    21450     8.17        31.8 Unión L…     0
4 Femenino     54         8 Oficina    21900     8.17        15.8 Casado       3
# ℹ 1 more variable: ESTRATO <chr>

Estructura de las variables

Ver código
glimpse (empleo)
Rows: 500
Columns: 10
$ SEXO        <chr> "Masculino", "Masculino", "Femenino", "Femenino", "Masculi…
$ EDAD        <dbl> 49, 43, 71, 54, 46, 42, 45, 35, 55, 55, 51, 35, 40, 52, 38…
$ EDUCACION   <dbl> 15, 16, 12, 8, 15, 15, 15, 12, 15, 12, 16, 8, 15, 15, 12, …
$ FUNCION     <chr> "Gerencia", "Oficina", "Oficina", "Oficina", "Oficina", "O…
$ SALARIO     <dbl> 57000, 40200, 21450, 21900, 45000, 32100, 36000, 21900, 27…
$ SERVICIO    <dbl> 8.166667, 8.166667, 8.166667, 8.166667, 8.166667, 8.166667…
$ EXPERIENCIA <dbl> 12.000000, 3.000000, 31.750000, 15.833333, 11.500000, 5.58…
$ ESTADO      <chr> "Unión Libre", "Casado", "Unión Libre", "Casado", "Soltero…
$ HIJOS       <dbl> 0, 3, 0, 3, 4, 0, 1, 1, 1, 0, 1, 2, 4, 4, 3, 2, 2, 0, 4, 4…
$ ESTRATO     <chr> "Alto", "Medio", "Medio", "Medio", "Medio", "Bajo", "Bajo"…

Número de variables

Ver código
empleo %>% names %>% length
[1] 10

Nombre de variables

Ver código
names(empleo)
 [1] "SEXO"        "EDAD"        "EDUCACION"   "FUNCION"     "SALARIO"    
 [6] "SERVICIO"    "EXPERIENCIA" "ESTADO"      "HIJOS"       "ESTRATO"    

Transformar variables

Ver código
library(dplyr)

empleo <- empleo %>%
  mutate(
    FUNCION = factor(FUNCION, 
                     levels = c('Servicios Generales', 'Oficina', 'Gerencia'), 
                     ordered = TRUE),
    ESTRATO = factor(ESTRATO, 
                     levels = c('Bajo', 'Medio', 'Alto'), 
                     ordered = TRUE)
  )
Ver código
glimpse(empleo)
Rows: 500
Columns: 10
$ SEXO        <chr> "Masculino", "Masculino", "Femenino", "Femenino", "Masculi…
$ EDAD        <dbl> 49, 43, 71, 54, 46, 42, 45, 35, 55, 55, 51, 35, 40, 52, 38…
$ EDUCACION   <dbl> 15, 16, 12, 8, 15, 15, 15, 12, 15, 12, 16, 8, 15, 15, 12, …
$ FUNCION     <ord> Gerencia, Oficina, Oficina, Oficina, Oficina, Oficina, Ofi…
$ SALARIO     <dbl> 57000, 40200, 21450, 21900, 45000, 32100, 36000, 21900, 27…
$ SERVICIO    <dbl> 8.166667, 8.166667, 8.166667, 8.166667, 8.166667, 8.166667…
$ EXPERIENCIA <dbl> 12.000000, 3.000000, 31.750000, 15.833333, 11.500000, 5.58…
$ ESTADO      <chr> "Unión Libre", "Casado", "Unión Libre", "Casado", "Soltero…
$ HIJOS       <dbl> 0, 3, 0, 3, 4, 0, 1, 1, 1, 0, 1, 2, 4, 4, 3, 2, 2, 0, 4, 4…
$ ESTRATO     <ord> Alto, Medio, Medio, Medio, Medio, Bajo, Bajo, Medio, Medio…

3 Variable Cualitativa Nominal (ESTADO)

3.1 Tabla

Ver código
tibble(Estado = empleo$ESTADO) %>% 
  group_by(Estado) %>% 
  summarise(fi = n()) %>% 
  mutate(
    hi = round(fi/sum(fi), 4), 
    Porcentaje = paste0(hi*100, "%")) %>% 
  knitr::kable(
    col.names = c("Estado", "$f_i$", "$h_i$",
                  "Porcentaje"), align = c("l", "r", "r", "r")
  )
Estado f_i h_i Porcentaje
Casado 95 0.190 19%
Separado 104 0.208 20.8%
Soltero 105 0.210 21%
Unión Libre 93 0.186 18.6%
Viudo 103 0.206 20.6%

3.2 Diagrama de Barras

Ver código
# Cargar las librerías necesarias
library(ggplot2)
library(dplyr)
library(readxl)


# Calcular los porcentajes de cada categoría en la variable ESTADO
estado_counts <- empleo %>%
  dplyr::count(ESTADO) %>%
  mutate(porcentaje = n / sum(n) * 100)

# Crear el diagrama de barras
ggplot(estado_counts, aes(x = ESTADO, y = porcentaje, fill = ESTADO)) +
  geom_bar(stat = "identity") +
  labs(title = "Distribución en Gráfico de Barras de la Variable Estado", 
       x = "Estado Civil", 
       y = "Porcentaje") +
  theme_minimal() +
  theme(legend.position = "none") +
  geom_text(aes(label = sprintf("%.1f%%", porcentaje)), 
            vjust = -0.5, 
            color = "black", 
            size = 3.5)

3.3 Diagrama Circular

Ver código
library(ggplot2)
library(dplyr)
library(readxl)


estado_counts <- empleo %>%
  dplyr::count(ESTADO) %>%
  mutate(porcentaje = n / sum(n) * 100)

ggplot(estado_counts, aes(x = "", y = porcentaje, fill = ESTADO)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  labs(title = "Distribución porcentual del Estado civil") +
  theme_minimal() +
  theme(axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        panel.grid = element_blank(),
        axis.text.x = element_blank()) +
  geom_text(aes(label = sprintf("%.1f%%", porcentaje)), 
            position = position_stack(vjust = 0.5), 
            color = "white", 
            size = 6)


3.4 Resumen interpretativo

La distribución de frecuencias correspondiente al estado civil de los 500 trabajadores de la empresa Fatextol (Ibagué) evidencia una composición equilibrada de la población laboral. Los resultados muestran que la mayoría de los empleados son solteros (21%), seguidos de los separados (20.8%), viudos (20.6%), casados (19%) y quienes viven en unión libre (18.6%).

En términos generales, las proporciones son muy cercanas entre sí, lo que refleja una heterogeneidad balanceada en la estructura social de la empresa. Este equilibrio sugiere que no existe una predominancia marcada de ningún estado civil, lo cual puede facilitar la implementación de políticas laborales inclusivas y programas de bienestar que atiendan por igual a los diferentes grupos familiares presentes en la organización.


4 Variable cualitativa ordinal (FUNCIÓN)

4.1 Tabla

Ver código
library(dplyr)
library(kableExtra)

tibble(Funcion = empleo$FUNCION) %>% 
  group_by(Funcion) %>% 
  summarise(fi = n()) %>%
  mutate(hi = round(fi / sum(fi), 4), 
         Porcentaje = paste0(hi * 100, "%")) %>%
  knitr::kable(
    col.names = c("Función", "fi", "hi", "Porcentaje"), 
    align = c("l", "c", "c", "c")
  ) %>%
  kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = T, color = "white", background = "#4CAF50") %>% # Encabezado con fondo verde
  column_spec(1, background = "#f2f2f2") %>% # Columna de colores con fondo gris claro
  column_spec(2, color = "#2E86C1") %>% # Columna 'fi' en color azul
  column_spec(3, color = "#D68910") %>% # Columna 'hi' en color naranja
  column_spec(4, color = "#16A085")     # Columna 'Porcentaje' en color verde
Función fi hi Porcentaje
Servicios Generales 27 0.054 5.4%
Oficina 385 0.770 77%
Gerencia 88 0.176 17.6%

4.2 Gráfica de Barras

Ver código
library(ggplot2)
library(dplyr)

funcion_counts <- empleo %>%
  count(FUNCION) %>%
  mutate(porcentaje = n / sum(n) * 100)

ggplot(funcion_counts, aes(x = n, y = reorder(FUNCION, n))) +
  geom_bar(stat = "identity", fill = "skyblue") +
  labs(
    title = "Distribución de Funciones en la Empresa",
    x = "Frecuencia Absoluta (fi)",
    y = "Función"
  ) +
  geom_text(aes(label = paste0(round(porcentaje, 1), "%")), 
            hjust = -0.1) +
  theme_minimal()

4.3 Gráfica circular

Ver código
library(ggplot2)
library(dplyr)
library(readxl)


funcion_counts <- empleo %>%
  dplyr::count(FUNCION) %>%
  mutate(porcentaje = n / sum(n) * 100)

ggplot(funcion_counts, aes(x = "", y = porcentaje, fill = FUNCION)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  labs(title = "Distribución porcentual de la Función") +
  theme_minimal() +
  theme(axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        panel.grid = element_blank(),
        axis.text.x = element_blank()) +
  geom_text(aes(label = sprintf("%.1f%%", porcentaje)), 
            position = position_stack(vjust = 0.5), 
            color = "gray", 
            size = 5)


4.4 Interpretación

La distribución de frecuencias correspondiente a la variable Función evidencia que la mayoría del personal de la empresa Fatextol (Ibagué) desempeña labores administrativas. El 77% de los trabajadores pertenece al área de oficina, mientras que el 17.6% ocupa cargos de gerencia y solo el 5.4% realiza funciones de servicios generales.

Estos resultados reflejan una estructura organizacional predominantemente administrativa, con una proporción considerable de personal en niveles de dirección y una participación menor en tareas operativas. Esta composición sugiere que la empresa concentra sus recursos humanos en procesos de gestión, control y supervisión, más que en actividades manuales o de apoyo logístico, lo que es coherente con el perfil de una organización de carácter textil con énfasis en la gestión empresarial.


5 Variable cuantitativa discreta (EDUCACIÓN)

5.1 Tabla

Ver código
tibble(Educacion = empleo$EDUCACION) %>% 
  group_by(Educacion) %>% 
  summarise(fi = n()) %>%
  mutate(
    hi = round(fi/sum(fi), 4), 
    Porcentaje = paste0(hi*100, "%"),
    Fi = cumsum(fi),
    Hi = cumsum(hi)
  ) %>% 
  knitr::kable(
    col.names = c("Nivel de Educación", "$f_i$", "$h_i$",
                  "Porcentaje", "$F_i$", "$H_i$"), align = c("l", "r", "r", "r", "r", "r")
  )
Nivel de Educación f_i h_i Porcentaje F_i H_i
8 54 0.108 10.8% 54 0.108
12 201 0.402 40.2% 255 0.510
14 6 0.012 1.2% 261 0.522
15 125 0.250 25% 386 0.772
16 63 0.126 12.6% 449 0.898
17 11 0.022 2.2% 460 0.920
18 9 0.018 1.8% 469 0.938
19 28 0.056 5.6% 497 0.994
20 2 0.004 0.4% 499 0.998
21 1 0.002 0.2% 500 1.000

5.2 Gráfica de Barras

Ver código
library(ggplot2)
library(dplyr)
library(readxl)


educacion_counts <- empleo %>%
  dplyr::count(EDUCACION) %>%
  mutate(porcentaje = n / sum(n) * 100)

ggplot(educacion_counts, aes(x = EDUCACION, y = porcentaje, fill = EDUCACION)) +
  geom_bar(stat = "identity") +
  labs(title = "Distribución porcentual del Nivel de Educación", 
       x = "Nivel de Educación", 
       y = "Porcentaje") +
  theme_minimal() +
  theme(legend.position = "none") +
  geom_text(aes(label = sprintf("%.1f%%", porcentaje)), 
            vjust = -0.5, 
            color = "black", 
            size = 4)

5.3 Diagrama Circular

Ver código
library(ggplot2)
library(dplyr)
library(readxl)


educacion_counts <- empleo %>%
  dplyr::count(EDUCACION) %>%
  mutate(porcentaje = n / sum(n) * 100)

ggplot(educacion_counts, aes(x = "", y = porcentaje, fill = EDUCACION)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  labs(title = "Distribución porcentual del Nivel de Educación") +
  theme_minimal() +
  theme(axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        panel.grid = element_blank(),
        axis.text.x = element_blank()) +
  geom_text(aes(label = sprintf("%.1f%%", porcentaje)), 
            position = position_stack(vjust = 0.5), 
            color = "white", 
            size = 2)


5.4 Interpretación

La tabla muestra la distribución de los trabajadores según su nivel de educación. Se observa que la mayoría de los empleados poseen 12 años de educación, con una frecuencia absoluta de 201 personas, lo que representa el 40.2% del total. En segundo lugar, se encuentran aquellos con 15 años de educación, que corresponden al 25% de los trabajadores. Estos dos niveles concentran más del 65% de la población laboral, evidenciando que la empresa cuenta principalmente con personal que ha alcanzado estudios de secundaria completa o educación técnica.

Los niveles de educación inferiores (por ejemplo, 8 años) agrupan un 10.8%, mientras que los niveles superiores (de 17 a 21 años) presentan frecuencias cada vez menores, representando proporciones entre el 0.2% y el 5.6%. Esto sugiere que la presencia de trabajadores con formación universitaria o posgradual es baja.

El análisis de las frecuencias acumuladas (f_i y h_i) confirma esta tendencia: hasta el nivel educativo 15 ya se ha acumulado el 77.2% del total de trabajadores, lo que indica que más de tres cuartas partes de la plantilla no supera la educación técnica o media.


6 Variable Cuantitativa Continua (EXPERIENCIA)

6.1 Tabla

Ver código
library(dplyr)
library(knitr)
library(kableExtra)

# Crear intervalos de 3.97 en 3.97
tabla_experiencia <- empleo %>% 
  mutate(
    Clase = cut(EXPERIENCIA, breaks = seq(0, 39.7, by = 3.97), right = FALSE)
  ) %>% 
  group_by(Clase) %>% 
  summarise(fi = n()) %>% 
  mutate(
    mi = (as.numeric(sub("\\[(.*),.*", "\\1", Clase)) + 
          as.numeric(sub(".*,(.*)\\)", "\\1", gsub("\\]", ")", Clase)))) / 2,
    hi = fi / sum(fi),
    Fi = cumsum(fi),
    Hi = cumsum(hi)
  )

# Mostrar tabla
tabla_experiencia %>% 
  kable(
    col.names = c("Clase", "fi", "mi", "hi", "Fi", "Hi"),
    align = "c"
  ) %>% 
  kable_styling(full_width = FALSE) %>% 
  add_header_above(c("Distribución de frecuencias para la variable Experiencia" = 6))
Distribución de frecuencias para la variable Experiencia
Clase fi mi hi Fi Hi
[0,3.97) 218 1.985 0.436 218 0.436
[3.97,7.94) 114 5.955 0.228 332 0.664
[7.94,11.9) 48 9.920 0.096 380 0.760
[11.9,15.9) 38 13.900 0.076 418 0.836
[15.9,19.9) 25 17.900 0.050 443 0.886
[19.9,23.8) 22 21.850 0.044 465 0.930
[23.8,27.8) 12 25.800 0.024 477 0.954
[27.8,31.8) 11 29.800 0.022 488 0.976
[31.8,35.7) 5 33.750 0.010 493 0.986
[35.7,39.7) 7 37.700 0.014 500 1.000

6.2 Histograma de Frecuencia de Experiencia

Ver código
library(ggplot2)
library(readxl)



# Crear el histograma de la variable EDAD
ggplot(empleo, aes(x = EXPERIENCIA)) +
  geom_histogram(binwidth = 5, color = "black", fill = "red") +
  labs(title = "Distribución de la Experiencia",
       x = "Experiencia",
       y = "Frecuencia") +
  theme_minimal()

6.3 Histograma de Frecuencias con densidad de Experiencia

Ver código
# Cargar las librerías necesarias
library(ggplot2)
library(readxl)



# Crear el histograma de la variable EDAD con la curva de densidad
ggplot(empleo, aes(x = EXPERIENCIA)) +
  geom_histogram(aes(y = ..density..), binwidth = 5, color = "black", fill = "purple") +
  geom_density(alpha = 0.4, fill = "pink") +
  labs(title = "Distribución de la Experiencia con Curva de Densidad",
       x = "Experiencia",
       y = "Densidad") +
  theme_minimal()