ESTADÍSTICA DESCRIPTIVA · DISTRIBUCIÓN DE EDADES
Objetivo del informe. A partir de las edades de 50 personas se construye la tabla de frecuencias agrupadas mediante la Regla de Sturges y se representan gráficamente: histograma, polígono de frecuencias, histograma de frecuencias acumuladas y ojivas (absoluta, relativa y porcentual). El propósito no es solo mostrar los gráficos, sino explicar por qué cada uno se utiliza y qué información aporta que los demás no. Por eso cada figura va acompañada de dos apartados: uno describe su utilidad general dentro del análisis estadístico, y el otro interpreta específicamente lo que revela para este conjunto de edades.
tabla_9A <- c(38, 15, 10, 12, 62, 46, 25, 56, 27, 24, 23, 21,
20, 25, 38, 27, 48, 35, 50, 65, 59, 58, 47, 42, 37, 35,
32, 40, 28, 14, 12, 24, 66, 73, 72, 70, 68, 65, 54, 48,
34, 33, 21, 19, 61, 59, 47, 46, 30, 30)
tabla_9A## [1] 38 15 10 12 62 46 25 56 27 24 23 21 20 25 38 27 48 35 50 65 59 58 47 42 37
## [26] 35 32 40 28 14 12 24 66 73 72 70 68 65 54 48 34 33 21 19 61 59 47 46 30 30
## Frequencies
## tabla_9A
## Type: Numeric
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## 10 1 2.00 2.00 2.00 2.00
## 12 2 4.00 6.00 4.00 6.00
## 14 1 2.00 8.00 2.00 8.00
## 15 1 2.00 10.00 2.00 10.00
## 19 1 2.00 12.00 2.00 12.00
## 20 1 2.00 14.00 2.00 14.00
## 21 2 4.00 18.00 4.00 18.00
## 23 1 2.00 20.00 2.00 20.00
## 24 2 4.00 24.00 4.00 24.00
## 25 2 4.00 28.00 4.00 28.00
## 27 2 4.00 32.00 4.00 32.00
## 28 1 2.00 34.00 2.00 34.00
## 30 2 4.00 38.00 4.00 38.00
## 32 1 2.00 40.00 2.00 40.00
## 33 1 2.00 42.00 2.00 42.00
## 34 1 2.00 44.00 2.00 44.00
## 35 2 4.00 48.00 4.00 48.00
## 37 1 2.00 50.00 2.00 50.00
## 38 2 4.00 54.00 4.00 54.00
## 40 1 2.00 56.00 2.00 56.00
## 42 1 2.00 58.00 2.00 58.00
## 46 2 4.00 62.00 4.00 62.00
## 47 2 4.00 66.00 4.00 66.00
## 48 2 4.00 70.00 4.00 70.00
## 50 1 2.00 72.00 2.00 72.00
## 54 1 2.00 74.00 2.00 74.00
## 56 1 2.00 76.00 2.00 76.00
## 58 1 2.00 78.00 2.00 78.00
## 59 2 4.00 82.00 4.00 82.00
## 61 1 2.00 84.00 2.00 84.00
## 62 1 2.00 86.00 2.00 86.00
## 65 2 4.00 90.00 4.00 90.00
## 66 1 2.00 92.00 2.00 92.00
## 68 1 2.00 94.00 2.00 94.00
## 70 1 2.00 96.00 2.00 96.00
## 72 1 2.00 98.00 2.00 98.00
## 73 1 2.00 100.00 2.00 100.00
## <NA> 0 0.00 100.00
## Total 50 100.00 100.00 100.00 100.00
Muestra cuántas veces se repite cada valor exacto de la variable, sin agruparla todavía en intervalos. Es el punto de partida obligado antes de construir cualquier tabla agrupada: permite detectar valores repetidos, posibles datos atípicos o errores de digitación antes de seguir adelante con el análisis.
Al tratarse de una variable con muchos valores distintos (edades entre 10 y 73), la tabla individual resulta muy extensa y poco informativa: la mayoría de edades aparece solo una o dos veces, y no se distingue ningún patrón a simple vista. Esta dispersión es justamente la que justifica pasar a una tabla agrupada por intervalos, capaz de resumir la información en unas pocas clases manejables.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.00 25.00 37.50 39.82 55.50 73.00
Resume la distribución en cinco números clave: mínimo, cuartiles, mediana, media y máximo. Con solo estos valores es posible hacerse una primera idea del centro, la dispersión y una posible asimetría de los datos, sin necesidad todavía de construir ningún gráfico.
La media (39.82) y la mediana (37.5) son muy cercanas, lo que indica una distribución aproximadamente simétrica, sin valores extremos que desplacen el promedio hacia ningún lado. El 50 % central de las edades se ubica entre 25 y 55.5 años, un rango relativamente amplio que anticipa que el grupo está compuesto por personas de edades bastante variadas.
n <- length(tabla_9A)
k <- 1 + 3.322 * log10(n) # número de clases
R <- max(tabla_9A) - min(tabla_9A) # rango
W <- R / round(k) # ancho de clase
data.frame(
n = n,
k_calculado = round(k, 2),
k_usado = round(k),
Rango = R,
Ancho_clase = round(W, 2)
) %>%
kable(caption = "Resultado de la Regla de Sturges", align = "c") %>%
kable_styling(full_width = FALSE, position = "center",
bootstrap_options = c("striped", "hover", "condensed")) %>%
row_spec(0, background = azul, color = "white", bold = TRUE) %>%
row_spec(1, background = "#f1e9fb")| n | k_calculado | k_usado | Rango | Ancho_clase |
|---|---|---|---|---|
| 50 | 6.64 | 7 | 63 | 9 |
Determina cuántos intervalos conviene usar al agrupar los datos. Es un paso clave porque, si se eligen muy pocas clases, se ocultan detalles importantes de la forma de la distribución; y si se eligen demasiadas, la tabla se vuelve irregular, con clases casi vacías y difícil de interpretar.
Con 50 datos, la regla arroja 6.64 ≈ 7 clases. Como el rango es 63 años, cada clase tendrá un ancho aproximado de 9 años, valor que se ajusta a un número entero cómodo de manejar en la práctica para construir la tabla agrupada.
h <- graph.freq(tabla_9A, col = "#b98ddb", border = "white",
xlab = "Edad (años)", ylab = "Frecuencia",
main = "Distribución de edades (Regla de Sturges)")Representa la forma de la distribución: dónde se acumulan los datos, si hay uno o varios picos, y si es simétrica o sesgada. Las barras contiguas (sin espacios entre ellas) reflejan que la edad es una variable continua, a diferencia de un diagrama de barras para variables categóricas.
La clase más numerosa es [19 – 28), con 11 personas (22 % del total). El resto de intervalos tiene frecuencias parecidas entre 5 y 8, por lo que la distribución es bastante plana, sin una concentración marcada en el centro: las edades están repartidas a lo largo de casi todo el rango, más que agrupadas alrededor de un único valor típico.
Condensa los datos en clases, cada una con su marca de clase, frecuencia absoluta, relativa y acumulada. Es la base numérica de todos los gráficos siguientes: sin esta tabla no seria posible construir el polígono, la ojiva ni ninguna de las demás representaciones.
Las siete clases cubren desde 10 hasta 73 años, sin dejar ningún dato por fuera del rango. La columna de frecuencia acumulada permite responder de inmediato preguntas del tipo “¿cuántas personas tienen menos de 46 años?” — en este caso, 29 de las 50, es decir, algo más de la mitad del grupo.
boxplot(tabla_9A, horizontal = TRUE, col = "#b98ddb", border = azul,
xlab = "Edad (años)",
main = "Diagrama de caja y bigotes")Resume posición, dispersión y simetría en un solo gráfico compacto, y es la herramienta estándar para detectar valores atípicos (puntos que quedarían fuera de los bigotes). Además, permite comparar de un vistazo la ubicación de la mediana dentro de la caja.
La mediana aparece prácticamente centrada dentro de la caja y los bigotes tienen longitud similar a ambos lados, lo que confirma la simetría ya sugerida por el resumen numérico. No se observan valores atípicos: todas las edades quedan dentro del rango esperado, sin puntos aislados más allá de los bigotes.
x <- c(14.5, 23.5, 32.5, 41.5, 50.5, 59.5, 68.5) # marcas de clase
y <- c(5, 11, 8, 5, 8, 6, 7) # frecuencias absolutas
plot(x, y, type = "p", pch = 19, col = azul, cex = 1.3,
xlab = "Marca de clase (edad)", ylab = expression(f[i]),
main = "Polígono de frecuencias (construcción manual)",
xaxt = "n", yaxt = "n")
axis(side = 1, x)
axis(side = 2, y, las = 2)
lines(x, y, col = teal, lwd = 2)
grid(col = "#ece0f7")Une las marcas de clase con segmentos para mostrar la tendencia de la distribución como una línea continua, en lugar de barras separadas. Esto facilita comparar varias distribuciones superpuestas en un mismo gráfico, algo que con barras resultaría visualmente confuso.
La línea muestra un pico claro en la marca 23.5 (clase [19 – 28)), un descenso hasta 41.5 y luego un comportamiento oscilante sin tendencia definida hasta el final del rango. Esto refuerza lo observado en el histograma: no hay una única concentración de edades, sino varios grupos etarios con presencia similar a lo largo de todo el intervalo.
plot(h, col = "#e4d4f2", border = "white", frequency = 1,
xlab = "Edad (años)", ylab = "Frecuencia",
main = "Histograma y polígono de frecuencias absolutas")
polygon.freq(h, col = ambar, frequency = 1, lwd = 2.5)Superponer el polígono al histograma permite ver a la vez el conteo por clase (barras) y la tendencia general (línea), sin perder ninguna de las dos lecturas ni tener que consultar dos gráficos por separado.
El polígono confirma visualmente el pico en la segunda clase y evidencia que la caída posterior no es sostenida: alrededor de los 46–55 años la frecuencia vuelve a subir, formando un pequeño repunte antes de descender de nuevo hacia las últimas clases.
plot(h, col = "#e4d4f2", border = "white", frequency = 2,
xlab = "Edad (años)", ylab = "Frecuencia relativa (%)",
main = "Histograma y polígono de frecuencias relativas")
polygon.freq(h, col = ambar, frequency = 2, lwd = 2.5)Idéntico al anterior en su forma, pero expresado en porcentajes en lugar de conteos absolutos. Es precisamente esta versión relativa la que permite comparar este grupo con otro de tamaño de muestra distinto, sin que el resultado dependa del número total de personas.
La forma es exactamente la misma que en el gráfico anterior; solo cambia la escala del eje vertical. La clase dominante concentra el 22 % de las personas, y ninguna clase baja del 10 %, lo que confirma de nuevo que la distribución está relativamente repartida entre todos los intervalos.
## [1] "breaks" "counts" "mids" "relative" "density"
Permite conocer qué información guarda internamente el objeto creado por graph.freq(), antes de seguir trabajando con él. Revisar sus componentes evita recalcular a mano las frecuencias y los límites de clase que ya quedaron almacenados ahí.
tabla_freq <- table.freq(h)
tabla_freq %>%
kable(caption = "Tabla de frecuencias por clase", align = "c", digits = 2) %>%
kable_styling(full_width = FALSE, position = "center",
bootstrap_options = c("striped", "hover", "condensed")) %>%
row_spec(0, background = azul, color = "white", bold = TRUE)| Lower | Upper | Main | Frequency | Percentage | CF | CPF |
|---|---|---|---|---|---|---|
| 10 | 19 | 14.5 | 5 | 10 | 5 | 10 |
| 19 | 28 | 23.5 | 11 | 22 | 16 | 32 |
| 28 | 37 | 32.5 | 8 | 16 | 24 | 48 |
| 37 | 46 | 41.5 | 5 | 10 | 29 | 58 |
| 46 | 55 | 50.5 | 8 | 16 | 37 | 74 |
| 55 | 64 | 59.5 | 6 | 12 | 43 | 86 |
| 64 | 73 | 68.5 | 7 | 14 | 50 | 100 |
barplot(tabla_freq$CF, names.arg = round(tabla_freq$Upper, 1),
col = "#b494d6", border = "white",
xlab = "Edad (años)", ylab = "Frecuencia acumulada",
main = "Histograma de frecuencias acumuladas")
grid(nx = NA, ny = NULL, col = "#ece0f7")Cada barra indica cuántas observaciones hay hasta ese límite de clase, sumando todas las anteriores. Sirve para responder de forma directa preguntas de tipo “¿cuántos casos hay por debajo de cierto valor?”, sin tener que sumar manualmente las frecuencias.
Las barras crecen de forma sostenida de 5 hasta 50, sin saltos bruscos entre una clase y la siguiente, lo que indica que ninguna clase domina la distribución de manera aislada. A los 46 años ya se ha acumulado el 58 % de las personas, dato que coincide con lo observado antes en la tabla de frecuencias.
x2 <- c(14.5, 23.5, 32.5, 41.5, 50.5, 59.5, 68.5)
y2 <- c(10, 32, 48, 58, 74, 86, 100)
plot(x2, y2, type = "b", pch = 19, col = azul, lwd = 2, cex = 1.2,
xlab = "Marca de clase (edad)", ylab = "Frecuencia acumulada (%)",
main = "Ojiva porcentual con lectura de percentil")
segments(50.5, -14.5, 50.5, 74, lty = 2, col = ambar, lwd = 2)
segments(0, 74, 50.5, 74, lty = 2, col = ambar, lwd = 2)
grid(col = "#ece0f7")La ojiva convierte la tabla de frecuencias acumuladas en una curva siempre creciente. Su utilidad principal es leer percentiles gráficamente: se entra por un eje con el valor conocido y se sale por el otro con el porcentaje acumulado correspondiente, sin necesidad de hacer cálculos adicionales.
Las líneas punteadas muestran la lectura paso a paso: a la edad 50.5 años corresponde un acumulado del 74 %. Es decir, aproximadamente 3 de cada 4 personas del grupo tienen 50 años o menos, y solo el 26 % restante supera esa edad.
fr_por_clase <- tabla_freq$Frequency
total_n <- sum(fr_por_clase)
fr_relativos <- fr_por_clase / total_n
fr_porcentuales <- 100 * fr_relativos
data.frame(
Clase = round(tabla_freq$Upper, 1),
Frecuencia = fr_por_clase,
Frec_relativa = round(fr_relativos, 2),
Frec_porcentual = round(fr_porcentuales, 1),
Acumulada = cumsum(fr_por_clase),
Acum_relativa = round(cumsum(fr_relativos), 2),
Acum_porcentual = round(cumsum(fr_porcentuales), 1)
) %>%
kable(caption = "Frecuencias absolutas, relativas y porcentuales acumuladas",
align = "c") %>%
kable_styling(full_width = FALSE, position = "center",
bootstrap_options = c("striped", "hover", "condensed")) %>%
row_spec(0, background = azul, color = "white", bold = TRUE) %>%
column_spec(1, bold = TRUE, color = azul)| Clase | Frecuencia | Frec_relativa | Frec_porcentual | Acumulada | Acum_relativa | Acum_porcentual |
|---|---|---|---|---|---|---|
| 19 | 5 | 0.10 | 10 | 5 | 0.10 | 10 |
| 28 | 11 | 0.22 | 22 | 16 | 0.32 | 32 |
| 37 | 8 | 0.16 | 16 | 24 | 0.48 | 48 |
| 46 | 5 | 0.10 | 10 | 29 | 0.58 | 58 |
| 55 | 8 | 0.16 | 16 | 37 | 0.74 | 74 |
| 64 | 6 | 0.12 | 12 | 43 | 0.86 | 86 |
| 73 | 7 | 0.14 | 14 | 50 | 1.00 | 100 |
Reúne en una sola tabla las tres escalas de la frecuencia acumulada — absoluta, relativa y porcentual — que alimentan directamente las tres ojivas siguientes, evitando repetir los cálculos en cada gráfico por separado.
Las tres columnas acumuladas terminan, respectivamente, en 50, 1.00 y 100 %: esa coincidencia es justamente la comprobación de que todos los datos fueron clasificados correctamente y ninguno quedó por fuera de las clases construidas con la Regla de Sturges.
p1 <- cumsum(fr_por_clase)
plot(p1, type = "b", pch = 19, col = azul, lwd = 2, cex = 1.2,
xlab = "Número de clase", ylab = "Frecuencia acumulada",
main = "Ojiva - frecuencias absolutas")
text(seq_along(p1), p1, labels = p1, pos = 3, cex = 0.85, col = azul)
grid(col = "#ece0f7")Muestra el conteo acumulado de observaciones clase a clase, en las unidades originales de conteo. Es la escala natural cuando interesa conocer el número de casos concretos, y no su proporción respecto al total.
La curva asciende de 5 a 50 de manera casi lineal a lo largo de las siete clases. El tramo más inclinado ocurre entre la primera y la segunda clase (de 5 a 16), reflejando que fue justo ahí donde se incorporó la clase más numerosa de toda la distribución.
p2 <- cumsum(fr_relativos)
plot(p2, type = "b", pch = 19, col = teal, lwd = 2, cex = 1.2,
xlab = "Número de clase", ylab = "Frecuencia relativa acumulada",
main = "Ojiva - frecuencias relativas")
text(seq_along(p2), p2, labels = round(p2, 2), pos = 3, cex = 0.85, col = teal)
grid(col = "#ece0f7")Expresa exactamente la misma información, pero en proporciones de 0 a 1 en lugar de conteos. Al no depender del tamaño de la muestra, esta escala permite comparar directamente esta distribución con cualquier otra, sin importar cuántas observaciones tenga cada una.
La curva termina exactamente en 1.00, como debe ocurrir siempre en una frecuencia relativa acumulada. En la clase 4 el acumulado es 0.58, es decir, algo más de la mitad del grupo ya quedó incluido antes de los 46 años.
p3 <- cumsum(fr_porcentuales)
plot(p3, type = "b", pch = 19, col = ambar, lwd = 2, cex = 1.2,
xlab = "Número de clase", ylab = "Frecuencia acumulada (%)",
main = "Ojiva - frecuencias porcentuales")
text(seq_along(p3), p3, labels = round(p3), pos = 3, cex = 0.85, col = "#b8741f")
grid(col = "#ece0f7")La versión en porcentaje es, en la práctica, la más usada para leer percentiles y cuartiles directamente sobre el eje vertical, sin necesidad de convertir proporciones a porcentajes de forma manual.
El 25 % se alcanza dentro de la segunda clase y el 75 % dentro de la quinta: los cuartiles quedan, por tanto, ubicados en los intervalos [19 – 28) y [46 – 55). Este resultado es coherente con los cuartiles exactos obtenidos antes en el resumen numérico de los datos sin agrupar.
plot(ecdf(tabla_9A), col = teal, lwd = 2,
xlab = "Edad (años)", ylab = "F(x)",
main = "Función de distribución empírica")
grid(col = "#ece0f7")Es la ojiva llevada al extremo: en lugar de trabajar por clases agrupadas, acumula dato a dato, sin ninguna pérdida de información por agrupamiento. Por eso tiene forma de escalera, con un escalón exacto por cada valor observado en la muestra.
La escalera sube de manera uniforme entre los 10 y los 73 años, sin tramos planos largos que indiquen ausencia de datos. Esto significa que no hay huecos importantes en el rango de edades: prácticamente todos los tramos etarios están representados dentro del grupo estudiado.