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). Cada gráfico va acompañado de su propósito general y de la lectura concreta para estos datos.
Edades de 50 personas:
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. Es el punto de partida antes de agrupar: permite detectar valores repetidos, datos atípicos o errores de digitación.
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. Esto justifica pasar a una tabla agrupada por intervalos.
## 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: mínimo, cuartiles, mediana, media y máximo. Da una primera idea del centro y la dispersión sin necesidad de graficar.
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. El 50 % central de las edades se ubica entre 25 y 55.5 años.
n <- length(tabla_9A)
k <- 1 + 3.322 * log10(n) # numero de clases
R <- max(tabla_9A) - min(tabla_9A) # rango
W <- R / round(k) # ancho de clase
data.frame(n = n, k = round(k, 2), k_redondeado = round(k), Rango = R, Ancho_clase = round(W, 2))Determina cuántos intervalos conviene usar al agrupar. Muy pocas clases ocultan la forma de la distribución; demasiadas la vuelven irregular y difícil de leer.
Con 50 datos, la Regla de Sturges sugiere 7 clases, con un rango de 63 y un ancho de clase aproximado de 9.
par_grafico()
h <- graph.freq(tabla_9A, col = relleno, border = "white",
xlab = "Edad (años)", ylab = "Frecuencia",
main = "Distribución de edades")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 reflejan que la variable es continua.
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.
Condensa los datos en clases con su marca de clase, frecuencia absoluta, relativa y acumulada. Es la base numérica de todos los gráficos siguientes.
Las siete clases cubren desde 10 hasta 73 años. 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.
par_grafico()
boxplot(tabla_9A, notch = FALSE, horizontal = TRUE, col = relleno,
border = purpura, medcol = naranja, medlwd = 3,
xlab = "Edad (años)", main = "Diagrama de caja y bigotes")Resume posición, dispersión y simetría en un solo gráfico. Es la herramienta estándar para detectar valores atípicos (puntos fuera de los bigotes).
La mediana aparece prácticamente centrada dentro de la caja y los bigotes tienen longitud similar, lo que confirma la simetría sugerida por el resumen numérico. No se observan valores atípicos: todas las edades quedan dentro del rango esperado.
x <- c(14.5, 23.5, 32.5, 41.5, 50.5, 59.5, 68.5)
y <- c(5, 11, 8, 5, 8, 6, 7)
par_grafico()
plot(x, y, type = "n",
xlab = "Marca de clase (edad)", ylab = expression(f[i]),
main = "Polígono de frecuencias", xaxt = "n", yaxt = "n")
grid(col = "#e8d5ff", lty = 1, lwd = 0.8)
lines(x, y, col = purpura, lwd = 2.8)
points(x, y, pch = 21, bg = naranja, col = "white", cex = 1.6)
axis(side = 1, x, col.axis = "#9d8fb8", cex.axis = 0.88)
axis(side = 2, y, las = 2, col.axis = "#9d8fb8", cex.axis = 0.88)Une las marcas de clase con segmentos para mostrar la tendencia de la distribución como una línea continua. Facilita comparar varias distribuciones superpuestas, algo que con barras resulta 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. Esto refuerza que no hay una única concentración de edades, sino varios grupos etarios con presencia similar.
par_grafico()
plot(h, col = relleno, border = "white", frequency = 1,
xlab = "Edad (años)", ylab = "Frecuencia",
main = "Histograma y polígono superpuestos")
polygon.freq(h, col = naranja, frequency = 1, lwd = 2.8)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.
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.
par_grafico()
plot(h, col = relleno, border = "white", frequency = 2,
xlab = "Edad (años)", ylab = "Frecuencia relativa (%)",
main = "Frecuencias relativas superpuestas")
polygon.freq(h, col = naranja, frequency = 2, lwd = 2.8)Idéntico al anterior, pero expresado en porcentajes en lugar de conteos. Es la versión que permite comparar este grupo con otro de tamaño distinto.
La forma es exactamente la misma; solo cambia la escala del eje vertical. La clase dominante concentra el 22 % de las personas, y ninguna clase baja del 10 %.
h (agricolae)## [1] "breaks" "counts" "mids" "relative" "density"
Permite conocer qué información guarda internamente el objeto creado
por graph.freq(), para extraer después las frecuencias sin
recalcularlas a mano.
par_grafico()
bp <- barplot(tabla_freq$CF, names.arg = round(tabla_freq$Upper, 1),
col = relleno, border = "white",
ylim = c(0, max(tabla_freq$CF) * 1.12),
xlab = "Edad (años)", ylab = "Frecuencia acumulada",
main = "Histograma de frecuencias acumuladas")
text(bp, tabla_freq$CF, labels = tabla_freq$CF, pos = 3,
cex = 0.9, col = purpura, font = 2)Cada barra indica cuántas observaciones hay hasta ese límite de clase. Sirve para responder de tipo “¿cuántos casos hay por debajo de cierto valor?”.
Las barras crecen de forma sostenida de 5 a 50, sin saltos bruscos, lo que indica que ninguna clase domina la distribución. A los 46 años ya se ha acumulado el 58 % de las personas.
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)
par_grafico()
plot(x2, y2, type = "b", pch = 21, bg = cian, col = "white", cex = 1.4, lwd = 2.6,
xlab = "Marca de clase (edad)", ylab = "Frecuencia acumulada (%)",
main = "Ojiva porcentual con lectura de percentil")
grid(col = "#e8d5ff", lty = 1, lwd = 0.8)
segments(50.5, 0, 50.5, 74, lty = 2, col = amarillo, lwd = 2.2)
segments(14.5, 74, 50.5, 74, lty = 2, col = amarillo, lwd = 2.2)
points(50.5, 74, pch = 21, bg = naranja, col = "white", cex = 2)
text(50.5, 74, "74%", pos = 4, offset = 1, col = naranja, font = 2, cex = 1)La ojiva convierte la tabla acumulada en una curva creciente. Su utilidad principal es leer percentiles gráficamente: se entra por un eje y se sale por el otro.
Las líneas punteadas muestran la lectura: 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.
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)
)Reúne en una sola tabla las tres escalas de la frecuencia acumulada (absoluta, relativa y porcentual) que alimentan las tres ojivas siguientes.
Las tres columnas acumuladas terminan, respectivamente, en 50, 1.00 y 100 %: esa es la comprobación de que todos los datos fueron clasificados y ninguno quedó fuera de las clases.
p1 <- cumsum(fr_por_clase)
par_grafico()
plot(p1, type = "b", pch = 21, bg = purpura, col = "white", cex = 1.4, lwd = 2.6,
xlab = "Número de clase", ylab = "Frecuencia acumulada",
main = "Ojiva - escala absoluta")
grid(col = "#e8d5ff", lty = 1, lwd = 0.8)
text(seq_along(p1), p1, labels = p1, pos = 3, cex = 0.88, col = purpura, font = 2)Muestra el conteo acumulado de observaciones clase a clase. Es la escala natural cuando interesa el número de casos, no su proporción.
La curva asciende de 5 a 50 de manera casi lineal. El tramo más inclinado ocurre entre la primera y la segunda clase (de 5 a 16), reflejando que ahí se incorporó la clase más numerosa.
p2 <- cumsum(fr_relativos)
par_grafico()
plot(p2, type = "b", pch = 21, bg = cian, col = "white", cex = 1.4, lwd = 2.6,
xlab = "Número de clase", ylab = "Frecuencia relativa acumulada",
main = "Ojiva - escala relativa")
grid(col = "#e8d5ff", lty = 1, lwd = 0.8)
text(seq_along(p2), p2, labels = round(p2, 2), pos = 3, cex = 0.88, col = cian, font = 2)Expresa lo mismo en proporciones de 0 a 1. Al no depender del tamaño de la muestra, permite comparar esta distribución con cualquier otra.
La curva termina exactamente en 1.00. 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)
par_grafico()
plot(p3, type = "b", pch = 21, bg = naranja, col = "white", cex = 1.4, lwd = 2.6,
xlab = "Número de clase", ylab = "Frecuencia acumulada (%)",
main = "Ojiva - escala porcentual")
grid(col = "#e8d5ff", lty = 1, lwd = 0.8)
abline(h = c(25, 50, 75), lty = 3, col = "#d4b5ff", lwd = 1.2)
text(seq_along(p3), p3, labels = round(p3), pos = 3, cex = 0.88, col = naranja, font = 2)La versión en porcentaje es la más usada para leer percentiles y cuartiles directamente sobre el eje vertical.
El 25 % se alcanza dentro de la segunda clase y el 75 % dentro de la quinta: los cuartiles quedan, por tanto, en los intervalos [19 – 28) y [46 – 55), coherente con los cuartiles exactos obtenidos en el resumen numérico.
par_grafico()
plot(ecdf(tabla_9A), col = cian, lwd = 2.6,
xlab = "Edad (años)", ylab = "F(x)",
main = "Función de distribución empírica")
grid(col = "#e8d5ff", lty = 1, lwd = 0.8)Es la ojiva llevada al extremo: en lugar de trabajar por clases, acumula dato a dato, sin pérdida de información por agrupamiento. Por eso tiene forma de escalera, con un escalón por cada valor observado.
La escalera sube de manera uniforme entre los 10 y los 73 años, sin tramos planos largos. Esto significa que no hay huecos importantes en el rango de edades: prácticamente todos los tramos etarios están representados en el grupo.