A continuación se construye una tabla pequeña con datos simulados de ventas por categoría. Esta tabla servirá para la gráfica de barras.
datos_barras <- tibble::tibble(
categoria = c("A", "B", "C", "D", "E"),
ventas = c(35, 22, 48, 15, 30)
)
knitr::kable(datos_barras, caption = "Tabla 1. Ventas por categoría (datos simulados)")
| categoria | ventas |
|---|---|
| A | 35 |
| B | 22 |
| C | 48 |
| D | 15 |
| E | 30 |
La siguiente gráfica muestra las ventas por categoría usando barras. Se usa un estilo minimalista para facilitar la lectura.
ggplot(datos_barras, aes(x = categoria, y = ventas)) +
geom_col() +
geom_text(aes(label = ventas), vjust = -0.3, size = 4) +
labs(title = "Ventas por categoría",
x = "Categoría",
y = "Ventas (unidades)") +
theme_minimal(base_size = 13)
Interpretación rápida. La categoría con mayor valor es C (48) y la menor es D (15).
A continuación, se crea un conjunto de datos pequeño con puntajes de dos grupos (por ejemplo, dos cursos o dos métodos). El diagrama de caja permite comparar la dispersión, la mediana y posibles valores atípicos.
set.seed(123)
datos_box <- tibble::tibble(
grupo = rep(c("Grupo 1", "Grupo 2"), each = 20),
puntaje = c(round(rnorm(20, mean = 3.4, sd = 0.4), 2),
round(rnorm(20, mean = 3.8, sd = 0.5), 2))
)
knitr::kable(head(datos_box, 10), caption = "Tabla 2. Primeras 10 filas de puntajes por grupo")
| grupo | puntaje |
|---|---|
| Grupo 1 | 3.18 |
| Grupo 1 | 3.31 |
| Grupo 1 | 4.02 |
| Grupo 1 | 3.43 |
| Grupo 1 | 3.45 |
| Grupo 1 | 4.09 |
| Grupo 1 | 3.58 |
| Grupo 1 | 2.89 |
| Grupo 1 | 3.13 |
| Grupo 1 | 3.22 |
ggplot(datos_box, aes(x = grupo, y = puntaje)) +
geom_boxplot() +
labs(title = "Distribución de puntajes por grupo",
x = "Grupo",
y = "Puntaje (0-5)") +
theme_minimal(base_size = 13)
Lectura del boxplot.
- La línea horizontal dentro de cada caja es la
mediana.
- Los bordes inferior y superior de la caja representan el
1er y 3er cuartil (Q1 y Q3).
- Las “bigotes” (whiskers) se extienden hasta 1.5 * IQR (rango
intercuartílico = Q3 - Q1).
- Los puntos fuera de ese rango se consideran posibles
atípicos.
Sea un conjunto de datos \(x_1, x_2, \dots, x_n\).
Fórmula (muestral): \[ \bar{x} \;=\; \frac{1}{n}\sum_{i=1}^{n} x_i \]
La media es sensible a valores extremos (outliers).
La mediana es el valor que divide
la muestra ordenada en dos partes con la misma cantidad de
observaciones.
- Si \(n\) es impar, es el valor en la
posición \((n+1)/2\).
- Si \(n\) es par, se promedia el valor
en las posiciones \(n/2\) y \(n/2 + 1\).
La moda es el(los) valor(es) que más se repite(n). Puede haber una moda, varias, o ninguna (si todos los valores aparecen con la misma frecuencia).
\[ s^2 \;=\; \frac{1}{n-1}\sum_{i=1}^{n} (x_i - \bar{x})^2 \qquad\text{y}\qquad s \;=\; \sqrt{s^2} \]
La desviación estándar \(s\) mide la dispersión promedio alrededor de la media.
A modo de ejemplo, calculemos medidas para la variable
puntaje del conjunto datos_box (global y por
grupo).
# Función para moda (retorna todas las modas si hay empate)
moda <- function(x){
tb <- table(x)
tb <- tb[tb == max(tb)]
as.numeric(names(tb))
}
resumen_global <- datos_box |>
summarise(
n = n(),
media = mean(puntaje),
mediana = median(puntaje),
moda = paste(moda(puntaje), collapse = ", "),
varianza = var(puntaje),
desv_est = sd(puntaje)
)
resumen_por_grupo <- datos_box |>
group_by(grupo) |>
summarise(
n = n(),
media = mean(puntaje),
mediana = median(puntaje),
moda = paste(moda(puntaje), collapse = ", "),
varianza = var(puntaje),
desv_est = sd(puntaje),
.groups = "drop"
)
knitr::kable(resumen_global, digits = 3, caption = "Tabla 3. Resumen descriptivo global (puntaje)")
| n | media | mediana | moda | varianza | desv_est |
|---|---|---|---|---|---|
| 40 | 3.616 | 3.59 | 3.18, 3.44, 3.65 | 0.183 | 0.428 |
knitr::kable(resumen_por_grupo, digits = 3, caption = "Tabla 4. Resumen descriptivo por grupo (puntaje)")
| grupo | n | media | mediana | moda | varianza | desv_est |
|---|---|---|---|---|---|---|
| Grupo 1 | 20 | 3.456 | 3.445 | 3.18 | 0.151 | 0.389 |
| Grupo 2 | 20 | 3.776 | 3.730 | 3.65 | 0.172 | 0.414 |
Nota para RPubs: Compile este documento a HTML (Knit) y luego publíquelo en RPubs desde RStudio con Publish. Si no ve los gráficos, asegúrese de que los paquetes se instalaron correctamente.