0. Librerías
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(gt)
3. Tabla de distribución de frecuencias
3.1 Tabla de frecuencias
# -------------------------
# Número de intervalos (Regla de Sturges)
# -------------------------
k <- ceiling(1 + 3.322 * log10(length(Densidad)))
# Amplitud del intervalo
A <- ceiling((max(Densidad) - min(Densidad)) / k)
# Límites de los intervalos
limites <- seq(
from = min(Densidad),
by = A,
length.out = k + 1
)
# Ajustar el último límite
limites[length(limites)] <- max(Densidad)
# Clasificar observaciones
intervalos <- cut(
Densidad,
breaks = limites,
include.lowest = TRUE,
right = FALSE
)
# -------------------------
# Tabla de frecuencias
# -------------------------
tabla_freq <- as.data.frame(
table(intervalos)
)
colnames(tabla_freq) <- c(
"Intervalo",
"ni"
)
# Frecuencia relativa
tabla_freq$hi <- round(
tabla_freq$ni / sum(tabla_freq$ni) * 100,
2
)
# Frecuencias acumuladas ascendentes
tabla_freq$Ni_asc <- cumsum(tabla_freq$ni)
tabla_freq$Hi_asc <- round(cumsum(tabla_freq$hi),2)
# Frecuencias acumuladas descendentes
tabla_freq$Ni_dsc <- rev(cumsum(rev(tabla_freq$ni)))
tabla_freq$Hi_dsc <- round(rev(cumsum(rev(tabla_freq$hi))),2)
# -------------------------
# Agregar fila TOTAL
# -------------------------
fila_total <- data.frame(
Intervalo = "TOTAL",
ni = sum(tabla_freq$ni),
hi = 100,
Ni_asc = "",
Hi_asc = "",
Ni_dsc = "",
Hi_dsc = ""
)
tabla_final <- rbind(
tabla_freq,
fila_total
)
# -------------------------
# Tabla GT
# -------------------------
tabla_gt <- tabla_final %>%
gt() %>%
tab_header(
title = md("**Tabla N°1**"),
subtitle = md(
"**Distribución de frecuencias de la densidad de población en el estudio de la calidad del agua en Europa**"
)
) %>%
cols_label(
Intervalo = "Intervalo",
ni = "ni",
hi = "hi (%)",
Ni_asc = "Ni ↑",
Hi_asc = "Hi ↑ (%)",
Ni_dsc = "Ni ↓",
Hi_dsc = "Hi ↓ (%)"
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(
rows = Intervalo == "TOTAL"
)
) %>%
opt_row_striping()
tabla_gt
| Tabla N°1 |
| Distribución de frecuencias de la densidad de población en el estudio de la calidad del agua en Europa |
| Intervalo |
ni |
hi (%) |
Ni ↑ |
Hi ↑ (%) |
Ni ↓ |
Hi ↓ (%) |
| [15,38) |
635 |
3.19 |
635 |
3.19 |
19889 |
100 |
| [38,61) |
233 |
1.17 |
868 |
4.36 |
19254 |
96.81 |
| [61,84) |
517 |
2.60 |
1385 |
6.96 |
19021 |
95.64 |
| [84,107) |
3258 |
16.38 |
4643 |
23.34 |
18504 |
93.04 |
| [107,130) |
9788 |
49.21 |
14431 |
72.55 |
15246 |
76.66 |
| [130,153) |
561 |
2.82 |
14992 |
75.37 |
5458 |
27.45 |
| [153,176) |
0 |
0.00 |
14992 |
75.37 |
4897 |
24.63 |
| [176,199) |
0 |
0.00 |
14992 |
75.37 |
4897 |
24.63 |
| [199,222) |
123 |
0.62 |
15115 |
75.99 |
4897 |
24.63 |
| [222,245) |
541 |
2.72 |
15656 |
78.71 |
4774 |
24.01 |
| [245,268) |
15 |
0.08 |
15671 |
78.79 |
4233 |
21.29 |
| [268,291) |
3957 |
19.90 |
19628 |
98.69 |
4218 |
21.21 |
| [291,314) |
0 |
0.00 |
19628 |
98.69 |
261 |
1.31 |
| [314,337) |
0 |
0.00 |
19628 |
98.69 |
261 |
1.31 |
| [337,360) |
0 |
0.00 |
19628 |
98.69 |
261 |
1.31 |
| [360,377] |
261 |
1.31 |
19889 |
100 |
261 |
1.31 |
| TOTAL |
19889 |
100.00 |
|
|
|
|
3.2 Tabla simplificada de frecuencias
# -------------------------
# Tabla resumida (10 categorías)
# -------------------------
tabla_freq_resumida <- tabla_freq %>%
arrange(desc(ni)) %>%
slice(1:10)
# Frecuencia relativa
tabla_freq_resumida$hi <- round(
(tabla_freq_resumida$ni / sum(tabla_freq_resumida$ni)) * 100,
2
)
# Frecuencias acumuladas ascendentes
tabla_freq_resumida$Ni_asc <- cumsum(tabla_freq_resumida$ni)
tabla_freq_resumida$Hi_asc <- round(cumsum(tabla_freq_resumida$hi), 2)
# Frecuencias acumuladas descendentes
tabla_freq_resumida$Ni_dsc <- rev(cumsum(rev(tabla_freq_resumida$ni)))
tabla_freq_resumida$Hi_dsc <- round(rev(cumsum(rev(tabla_freq_resumida$hi))), 2)
# -------------------------
# Agregar fila TOTAL
# -------------------------
fila_total_resumida <- data.frame(
Intervalo = "TOTAL",
ni = sum(tabla_freq_resumida$ni),
hi = 100,
Ni_asc = "",
Hi_asc = "",
Ni_dsc = "",
Hi_dsc = ""
)
tabla_final_resumida <- rbind(
tabla_freq_resumida,
fila_total_resumida
)
# -------------------------
# Tabla GT
# -------------------------
tabla_gt_resumida <- tabla_final_resumida %>%
gt() %>%
tab_header(
title = md("**Tabla N°2**"),
subtitle = md(
"**Distribución resumida de frecuencias de la densidad de población en el estudio de la calidad del agua en Europa**"
)
) %>%
cols_label(
Intervalo = "Intervalo",
ni = "ni",
hi = "hi (%)",
Ni_asc = "Ni ↑",
Hi_asc = "Hi ↑ (%)",
Ni_dsc = "Ni ↓",
Hi_dsc = "Hi ↓ (%)"
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(
rows = Intervalo == "TOTAL"
)
) %>%
opt_row_striping()
tabla_gt_resumida
| Tabla N°2 |
| Distribución resumida de frecuencias de la densidad de población en el estudio de la calidad del agua en Europa |
| Intervalo |
ni |
hi (%) |
Ni ↑ |
Hi ↑ (%) |
Ni ↓ |
Hi ↓ (%) |
| [107,130) |
9788 |
49.25 |
9788 |
49.25 |
19874 |
99.99 |
| [268,291) |
3957 |
19.91 |
13745 |
69.16 |
10086 |
50.74 |
| [84,107) |
3258 |
16.39 |
17003 |
85.55 |
6129 |
30.83 |
| [15,38) |
635 |
3.20 |
17638 |
88.75 |
2871 |
14.44 |
| [130,153) |
561 |
2.82 |
18199 |
91.57 |
2236 |
11.24 |
| [222,245) |
541 |
2.72 |
18740 |
94.29 |
1675 |
8.42 |
| [61,84) |
517 |
2.60 |
19257 |
96.89 |
1134 |
5.7 |
| [360,377] |
261 |
1.31 |
19518 |
98.2 |
617 |
3.1 |
| [38,61) |
233 |
1.17 |
19751 |
99.37 |
356 |
1.79 |
| [199,222) |
123 |
0.62 |
19874 |
99.99 |
123 |
0.62 |
| TOTAL |
19874 |
100.00 |
|
|
|
|
# ------------------------------------------------------------
# Nota:
# Con el propósito de mejorar la visualización e interpretación
# de las gráficas, se trabajará con una versión resumida de la
# tabla de frecuencias, considerando únicamente las 10 categorías
# con mayor frecuencia.
#
# Esta simplificación se utilizará exclusivamente para la
# elaboración de las gráficas. En cambio, los indicadores
# estadísticos, el análisis y las conclusiones se calcularán
# utilizando la totalidad de los datos de la variable.
# ------------------------------------------------------------
4 Gráficas
4.1 Histograma (ni)
barplot(
tabla_freq_resumida$ni,
main = "Gráfica N°1: Distribución de la densidad de población
en el estudio de la calidad del agua en Europa",
xlab = "Intervalo de densidad de población",
ylab = "Cantidad",
col = "skyblue",
ylim = c(0, max(tabla_freq_resumida$ni) * 1.1),
names.arg = tabla_freq_resumida$Intervalo,
las = 2,
cex.names = 0.8
)

4.2 Histograma General (ni)
barplot(
tabla_freq_resumida$ni,
main = "Gráfica N°2: Distribución general de la densidad de población
en el estudio de la calidad del agua en Europa",
xlab = "Intervalo de densidad de población",
ylab = "Cantidad",
col = "lightgreen",
ylim = c(0, 20000),
names.arg = tabla_freq_resumida$Intervalo,
las = 2,
cex.names = 0.8
)

4.3 Histograma (hi)
barplot(
tabla_freq_resumida$hi,
main = "Gráfica N°3: Distribución porcentual de la densidad de población
en el estudio de la calidad del agua en Europa",
xlab = "Intervalo de densidad de población",
ylab = "Porcentaje",
col = "skyblue",
ylim = c(0, max(tabla_freq_resumida$hi) * 1.1),
names.arg = tabla_freq_resumida$Intervalo,
las = 2,
cex.names = 0.8
)

4.4 Histograma General (hi)
barplot(
tabla_freq_resumida$hi,
main = "Gráfica N°4: Distribución porcentual general de la densidad de población
en el estudio de la calidad del agua en Europa",
xlab = "Intervalo de densidad de población",
ylab = "Porcentaje",
col = "lightgreen",
ylim = c(0, 100),
names.arg = tabla_freq_resumida$Intervalo,
las = 2,
cex.names = 0.8
)

4.5 Diagrama de Caja
# =========================
# DIAGRAMA DE CAJA
# =========================
boxplot(
Densidad,
horizontal = TRUE,
col = "orange",
main = "Gráfica N°5: Distribución de la densidad de población
en el estudio de la calidad del agua en Europa",
xlab = "Densidad de población"
)
points(
mean(Densidad),
1,
pch = 19,
col = "red"
)
legend(
"topright",
legend = "Media",
pch = 19,
col = "red"
)

4.6 Ojivas ascendentes y descendentes (Ni)
# ======================================
# OJIVAS ASCENDENTES Y DESCENDENTES (Ni)
# ======================================
# Posiciones en el eje X
x_pos <- 1:nrow(tabla_freq_resumida)
# Ojiva descendente
plot(
x_pos,
tabla_freq_resumida$Ni_dsc,
main = "Gráfica N°6: Ojiva ascendente y descendente de la densidad
de población en el estudio de la calidad del agua en Europa",
xlab = "Intervalo de densidad de población",
ylab = "Cantidad",
type = "b",
pch = 19,
col = "orange",
lwd = 2,
xaxt = "n",
ylim = c(0, max(tabla_freq_resumida$Ni_dsc) * 1.05)
)
# Ojiva ascendente
lines(
x_pos,
tabla_freq_resumida$Ni_asc,
type = "b",
pch = 19,
col = "green",
lwd = 2
)
# Etiquetas del eje X
axis(
side = 1,
at = x_pos,
labels = tabla_freq_resumida$Intervalo,
las = 2,
cex.axis = 0.8
)
# Leyenda
legend(
"topright",
legend = c("Descendente", "Ascendente"),
col = c("orange", "green"),
lwd = 2,
pch = 19
)

4.7 Ojivas ascendentes y descendentes (Hi)
# ======================================
# OJIVAS ASCENDENTES Y DESCENDENTES (Hi)
# ======================================
# Posiciones en el eje X
x_pos <- 1:nrow(tabla_freq_resumida)
# Ojiva descendente
plot(
x_pos,
tabla_freq_resumida$Hi_dsc,
main = "Gráfica N°7: Ojiva ascendente y descendente de la densidad
de población en el estudio de la calidad del agua en Europa",
xlab = "Intervalo de densidad de población",
ylab = "Porcentaje",
type = "b",
pch = 19,
col = "red",
lwd = 2,
xaxt = "n",
ylim = c(0, 100)
)
# Ojiva ascendente
lines(
x_pos,
tabla_freq_resumida$Hi_asc,
type = "b",
pch = 19,
col = "blue",
lwd = 2
)
# Etiquetas del eje X
axis(
side = 1,
at = x_pos,
labels = tabla_freq_resumida$Intervalo,
las = 2,
cex.axis = 0.8
)
# Leyenda
legend(
"topright",
legend = c("Descendente", "Ascendente"),
col = c("red", "blue"),
lwd = 2,
pch = 19
)

5. Indicadores Estadísticos
5.1 Indicadores de Tendencia Central
# =========================
# INDICADORES ESTADÍSTICOS
# Variable: Densidad de población
# =========================
# =========================
# MEDIDAS DE TENDENCIA CENTRAL
# =========================
# Media
media <- round(mean(Densidad), 2)
# Moda
tabla_moda <- table(Densidad)
max_frecuencia <- max(tabla_moda)
moda <- names(tabla_moda)[tabla_moda == max_frecuencia]
# Mediana
mediana <- median(Densidad)
5.2 Dispersión
# =========================
# MEDIDAS DE DISPERSIÓN
# =========================
# Rango
rango <- max(Densidad) - min(Densidad)
# Varianza
varianza <- var(Densidad)
# Desviación estándar
desviacion <- sd(Densidad)
# Coeficiente de variación
cv <- round((desviacion / media) * 100, 2)
5.3 Asimetría
# =========================
# MEDIDAS DE FORMA
# =========================
n <- length(Densidad)
# Asimetría
asimetria <- sum((Densidad - media)^3) /
((n - 1) * desviacion^3)
# Curtosis
curtosis <- sum((Densidad - media)^4) /
((n - 1) * desviacion^4) - 3
# =========================
# VALORES ATÍPICOS
# =========================
Q1 <- quantile(Densidad, 0.25)
Q3 <- quantile(Densidad, 0.75)
RIQ <- Q3 - Q1
LI <- Q1 - 1.5 * RIQ
LS <- Q3 + 1.5 * RIQ
atipicos <- Densidad[
Densidad < LI |
Densidad > LS
]
if(length(atipicos) > 0){
mensaje_atipicos <- length(atipicos)
}else{
mensaje_atipicos <- 0
}
5.4 Tabla de indicadores
# =========================
# TABLA RESUMEN
# =========================
tabla_indicadores <- data.frame(
Variable = "Densidad de población",
Rango = paste0("[", min(Densidad), " ; ", max(Densidad), "]"),
X = media,
Me = mediana,
Mo = paste(moda, collapse = ", "),
V = round(varianza, 2),
Sd = round(desviacion, 2),
Cv = cv,
As = round(asimetria, 2),
K = round(curtosis, 2),
Valores_Atipicos = mensaje_atipicos,
stringsAsFactors = FALSE
)
fila <- which(
tabla_indicadores$Variable ==
"Densidad de población"
)
tabla_indicadores_gt <- tabla_indicadores %>%
gt() %>%
tab_header(
title = md("**Tabla N°3**"),
subtitle = md(
"**Indicadores estadísticos de la densidad de población en el estudio de la calidad del agua en Europa**"
)
) %>%
tab_source_note(
source_note = md("Autor: Grupo 3")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(
rows = fila
)
)
tabla_indicadores_gt
| Tabla N°3 |
| Indicadores estadísticos de la densidad de población en el estudio de la calidad del agua en Europa |
| Variable |
Rango |
X |
Me |
Mo |
V |
Sd |
Cv |
As |
K |
Valores_Atipicos |
| Densidad de población |
[15 ; 377] |
149.79 |
122 |
122 |
5761.15 |
75.9 |
50.67 |
0.98 |
-0.02 |
9540 |
| Autor: Grupo 3 |
6. conclusiones
#La densidad de población presenta valores comprendidos entre 15 y 377 habitantes por km², con una media de 149.79 habitantes por km² y una desviación estándar de 75.90, lo que indica una variabilidad alta (Cv = 50.67%). Además, la distribución muestra una asimetría positiva (As = 0.98), evidenciando una mayor concentración de observaciones en densidades bajas y medias, con una cola hacia valores más altos, y se identificaron 9540 valores atípicos.