¿Qué se hace en este informe? Se parte de las edades de 50 personas para construir su tabla de frecuencias agrupadas usando la Regla de Sturges, y a partir de ahí se generan las representaciones gráficas típicas del análisis exploratorio: histograma, polígono de frecuencias, distribución acumulada y las tres versiones de la ojiva (absoluta, relativa y porcentual). Cada gráfico se acompaña de una nota sobre su utilidad general y otra con lo que revela puntualmente en este grupo de datos.

1 Datos y estadística descriptiva

1.1 Datos

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

1.2 Medidas de resumen

summary(tabla_9A)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   10.00   25.00   37.50   39.82   55.50   73.00

Con cinco valores —mínimo, cuartiles, mediana, promedio y máximo— se obtiene una primera fotografía de dónde se concentra el grupo y qué tan dispersos están los datos, sin necesidad todavía de ningún gráfico.

El promedio (39.82) y la mediana (37.5) prácticamente coinciden, señal de una distribución razonablemente simétrica y sin valores extremos que desbalanceen el promedio. La mitad central de las edades cae entre 25 y 55.5 años.

1.3 Tabla de frecuencias individuales

tabla_9 <- freq(tabla_9A)
tabla_9
## 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

Cuenta cuántas veces aparece cada valor puntual de la variable. Sirve como primer chequeo antes de agrupar: ayuda a notar repeticiones, posibles errores de digitación o valores que llaman la atención.

Como las edades van de 10 a 73 años y hay muy poca repetición entre ellas, la tabla individual queda demasiado larga como para aportar algo útil a simple vista —casi todos los valores aparecen una o dos veces—. Esto es justamente lo que motiva pasar a una tabla por intervalos.

1.4 Regla de Sturges

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)
)

Define cuántos intervalos conviene usar para agrupar los datos: si son muy pocos se pierde la forma de la distribución, y si son demasiados el gráfico queda irregular y sin patrón claro.

Con 50 observaciones, la fórmula entrega 6.64 ≈ 7 clases. El rango de la variable es 63 años, así que cada intervalo tendrá un ancho cercano a 9 años.

2 Distribución agrupada

2.1 Histograma

h <- graph.freq(tabla_9A, col = "#C4B5FD", border = "white",
                xlab = "Edad (años)", ylab = "Frecuencia",
                main = "Distribución de edades (Regla de Sturges)")

Muestra la forma general de la distribución: dónde se agrupan más observaciones, si aparece uno o varios picos, y si hay simetría o sesgo. Al ir las barras pegadas se recuerda que la variable de fondo es continua.

El intervalo con más personas es [19 – 28), con 11 casos (22 % del total). Las demás clases se mueven entre 5 y 8 observaciones, por lo que la distribución resulta bastante pareja, sin un centro dominante: las edades se reparten de forma casi uniforme a lo largo de todo el rango.

2.2 Tabla de frecuencias agrupadas

summary(h)

Resume los datos por clases, con su marca de clase, frecuencia absoluta, relativa y acumulada. Es la tabla que alimenta todos los gráficos que siguen.

Las siete clases van de 10 a 73 años. Gracias a la columna acumulada se puede responder de inmediato, por ejemplo, cuántas personas tienen menos de 46 años: 29 de las 50 del grupo.

2.3 Diagrama de caja y bigotes

boxplot(tabla_9A, horizontal = TRUE, col = "#C4B5FD", border = morado,
        xlab = "Edad (años)",
        main = "Diagrama de caja y bigotes")

Condensa posición, dispersión y simetría en un solo gráfico, y es la herramienta más directa para detectar valores atípicos —puntos que quedan fuera de los bigotes—.

La mediana queda casi al centro de la caja y los dos bigotes tienen una longitud parecida, lo que confirma la simetría ya sugerida por el resumen numérico. No aparecen valores atípicos: todas las edades caen dentro del rango esperado.

3 Polígonos de frecuencia

3.1 Construcción manual

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 = morado, 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 = turquesa, lwd = 2)
grid(col = "#F3E8FF")

Une las marcas de clase con segmentos para mostrar la tendencia de la distribución como una curva continua, algo que facilita mucho comparar varias distribuciones al mismo tiempo, cosa que con barras se vuelve confuso.

Se observa un pico marcado en la marca 23.5 (clase [19 – 28)), luego un descenso hasta 41.5 y después un vaivén sin una tendencia clara. Esto respalda la idea de que no hay una sola concentración de edades, sino varios grupos etarios con un peso similar.

3.2 Sobre el histograma — frecuencias absolutas

plot(h, col = "#EDE9FE", border = "white", frequency = 1,
     xlab = "Edad (años)", ylab = "Frecuencia",
     main = "Histograma y polígono de frecuencias absolutas")
polygon.freq(h, col = naranja, frequency = 1, lwd = 2.5)

Superponer el polígono sobre el histograma deja ver a la vez el conteo por clase (barras) y la tendencia general (línea), sin sacrificar ninguna de las dos lecturas.

El polígono ratifica el pico de la segunda clase y deja ver que la caída posterior no se mantiene: entre los 46 y los 55 años la frecuencia vuelve a subir.

3.3 Sobre el histograma — frecuencias relativas

plot(h, col = "#EDE9FE", border = "white", frequency = 2,
     xlab = "Edad (años)", ylab = "Frecuencia relativa (%)",
     main = "Histograma y polígono de frecuencias relativas")
polygon.freq(h, col = naranja, frequency = 2, lwd = 2.5)

Es la misma idea del gráfico anterior, pero en porcentajes en vez de conteos, lo que permite comparar este grupo con otro de tamaño distinto.

La forma no cambia; solo se ajusta la escala del eje vertical. La clase dominante reúne al 22 % de las personas y ninguna otra clase baja del 10 %.

4 Frecuencias acumuladas y ojivas

4.1 Estructura del objeto h

names(h)
## [1] "breaks"   "counts"   "mids"     "relative" "density"

Muestra qué información quedó guardada dentro del objeto que crea graph.freq(), de modo que las frecuencias se puedan extraer directamente en vez de recalcularlas a mano.

4.2 Histograma de frecuencias acumuladas

tabla_freq <- table.freq(h)
tabla_freq
barplot(tabla_freq$CF, names.arg = round(tabla_freq$Upper, 1),
        col = "#5EEAD4", border = "white",
        xlab = "Edad (años)", ylab = "Frecuencia acumulada",
        main = "Histograma de frecuencias acumuladas")
grid(nx = NA, ny = NULL, col = "#F3E8FF")

Cada barra indica cuántas observaciones se han acumulado hasta ese límite de clase, lo que sirve para responder preguntas del tipo “¿cuántos casos hay por debajo de cierto valor?”.

El crecimiento va de 5 a 50 de forma sostenida, sin saltos bruscos, lo que confirma que ninguna clase concentra por sí sola la distribución. A los 46 años ya se acumula el 58 % de las personas.

4.3 Cálculos de las ojivas

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)
)

Junta en una sola tabla las tres escalas de la frecuencia acumulada —absoluta, relativa y porcentual— que son la base de las tres ojivas siguientes.

Las tres columnas acumuladas cierran, en orden, en 50, 1.00 y 100 %: esa es la verificación de que todas las observaciones quedaron clasificadas y ninguna se escapó de las clases definidas.

4.4 Ojiva manual (frecuencia porcentual)

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 = morado, 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 = naranja, lwd = 2)
segments(0, 74, 50.5, 74, lty = 2, col = naranja, lwd = 2)
grid(col = "#F3E8FF")

La ojiva transforma la tabla acumulada en una curva creciente. Su principal utilidad es leer percentiles de forma gráfica: se entra por un eje y se sale por el otro.

Las líneas punteadas ilustran la lectura: a los 50.5 años corresponde un acumulado de 74 %. En otras palabras, cerca de 3 de cada 4 personas del grupo tienen 50 años o menos.

4.5 Ojiva de frecuencias absolutas

p1 <- cumsum(fr_por_clase)
plot(p1, type = "b", pch = 19, col = morado, 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 = morado)
grid(col = "#F3E8FF")

Presenta el conteo acumulado de observaciones clase a clase. Es la escala más directa cuando lo que interesa es el número de casos y no su proporción.

La curva sube de 5 a 50 de manera casi lineal. El tramo de mayor pendiente se da entre la primera y la segunda clase (de 5 a 16), justo donde entra la clase más numerosa.

4.6 Ojiva de frecuencias relativas

p2 <- cumsum(fr_relativos)
plot(p2, type = "b", pch = 19, col = turquesa, 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 = turquesa)
grid(col = "#F3E8FF")

Presenta lo mismo pero en proporciones de 0 a 1. Al no depender del tamaño de la muestra, permite comparar esta distribución con cualquier otra sin importar cuántos datos tenga.

La curva termina justo en 1.00. En la cuarta clase el acumulado llega a 0.58, es decir, poco más de la mitad del grupo ya estaba incluido antes de los 46 años.

4.7 Ojiva de frecuencias porcentuales

p3 <- cumsum(fr_porcentuales)
plot(p3, type = "b", pch = 19, col = naranja, 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 = "#C2410C")
grid(col = "#F3E8FF")

La versión porcentual es la más usada a la hora de 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 ubicados en los intervalos [19 – 28) y [46 – 55), resultado coherente con los cuartiles exactos calculados en el resumen numérico inicial.

4.8 Función de distribución empírica (ECDF)

plot(ecdf(tabla_9A), col = turquesa, lwd = 2,
     xlab = "Edad (años)", ylab = "F(x)",
     main = "Función de distribución empírica")
grid(col = "#F3E8FF")

Es la ojiva llevada a su versión más fina: en vez de trabajar por clases, acumula dato por dato, sin perder información por el agrupamiento. Por eso su forma es de escalera, con un escalón por cada valor observado.

La escalera avanza de manera uniforme entre los 10 y los 73 años, sin tramos planos prolongados. Esto indica que no hay vacíos importantes en el rango de edades: casi todos los tramos etarios tienen representación dentro del grupo.