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)
library(e1071)
3. Tabla de distribución de frecuencias
3.1 Tabla de frecuencias
# -------------------------
# Tabla de frecuencias
# -------------------------
tabla_freq <- as.data.frame(
table(Densidad)
)
# Renombrar columnas
colnames(tabla_freq) <- c(
"Densidad",
"ni"
)
# Frecuencia relativa (hi)
tabla_freq$hi <- round(
(tabla_freq$ni / sum(tabla_freq$ni)) * 100,
2
)
# Frecuencias acumuladas ascendentes (Corregido para dar exactamente 100)
tabla_freq$Ni_asc <- cumsum(tabla_freq$ni)
tabla_freq$Hi_asc <- round(
(tabla_freq$Ni_asc / sum(tabla_freq$ni)) * 100,
2
)
# Frecuencias acumuladas descendentes (Corregido para dar exactamente 100)
tabla_freq$Ni_dsc <- rev(cumsum(rev(tabla_freq$ni)))
tabla_freq$Hi_dsc <- round(
(tabla_freq$Ni_dsc / sum(tabla_freq$ni)) * 100,
2
)
# -------------------------
# Agregar fila de totales
# -------------------------
fila_total <- data.frame(
Densidad = "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 de agua en Europa (1991-2017)**"
)
) %>%
cols_label(
Densidad = "Densidad (hab/km²)",
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 = Densidad == "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 de agua en Europa (1991-2017) |
| Densidad (hab/km²) |
ni |
hi (%) |
Ni ↑ |
Hi ↑ (%) |
Ni ↓ |
Hi ↓ (%) |
| 15 |
27 |
0.14 |
27 |
0.14 |
19893 |
100 |
| 18 |
355 |
1.78 |
382 |
1.92 |
19866 |
99.86 |
| 25 |
171 |
0.86 |
553 |
2.78 |
19511 |
98.08 |
| 31 |
82 |
0.41 |
635 |
3.19 |
19340 |
97.22 |
| 45 |
228 |
1.15 |
863 |
4.34 |
19258 |
96.81 |
| 47 |
5 |
0.03 |
868 |
4.36 |
19030 |
95.66 |
| 65 |
322 |
1.62 |
1190 |
5.98 |
19025 |
95.64 |
| 71 |
44 |
0.22 |
1234 |
6.2 |
18703 |
94.02 |
| 73 |
19 |
0.10 |
1253 |
6.3 |
18659 |
93.8 |
| 77 |
3 |
0.02 |
1256 |
6.31 |
18640 |
93.7 |
| 80 |
129 |
0.65 |
1385 |
6.96 |
18637 |
93.69 |
| 85 |
117 |
0.59 |
1502 |
7.55 |
18508 |
93.04 |
| 94 |
3141 |
15.79 |
4643 |
23.34 |
18391 |
92.45 |
| 107 |
91 |
0.46 |
4734 |
23.8 |
15250 |
76.66 |
| 112 |
35 |
0.18 |
4769 |
23.97 |
15159 |
76.2 |
| 122 |
9661 |
48.56 |
14430 |
72.54 |
15124 |
76.03 |
| 124 |
1 |
0.01 |
14431 |
72.54 |
5463 |
27.46 |
| 138 |
561 |
2.82 |
14992 |
75.36 |
5462 |
27.46 |
| 205 |
101 |
0.51 |
15093 |
75.87 |
4901 |
24.64 |
| 215 |
22 |
0.11 |
15115 |
75.98 |
4800 |
24.13 |
| 237 |
541 |
2.72 |
15656 |
78.7 |
4778 |
24.02 |
| 250 |
15 |
0.08 |
15671 |
78.78 |
4237 |
21.3 |
| 275 |
3957 |
19.89 |
19628 |
98.67 |
4222 |
21.22 |
| 377 |
261 |
1.31 |
19889 |
99.98 |
265 |
1.33 |
| 511 |
4 |
0.02 |
19893 |
100 |
4 |
0.02 |
| TOTAL |
19893 |
100.00 |
|
|
|
|
3.2 Tabla simplificada de frecuencias
# -------------------------
# Tabla resumida con intervalos personalizados
# -------------------------
limites_clases <- seq(0, 600, by = 75)
# Agrupar la variable Densidad en los intervalos definidos
tabla_freq_resumida_resumida <- as.data.frame(
table(cut(Densidad, breaks = limites_clases, include.lowest = TRUE, right = FALSE))
)
# Renombrar columnas
colnames(tabla_freq_resumida_resumida) <- c(
"Densidad",
"ni"
)
# Frecuencia relativa (hi)
tabla_freq_resumida_resumida$hi <- round(
(tabla_freq_resumida_resumida$ni / sum(tabla_freq_resumida_resumida$ni)) * 100,
2
)
# Frecuencias acumuladas ascendentes
tabla_freq_resumida_resumida$Ni_asc <- cumsum(tabla_freq_resumida_resumida$ni)
tabla_freq_resumida_resumida$Hi_asc <- round(
(tabla_freq_resumida_resumida$Ni_asc / sum(tabla_freq_resumida_resumida$ni)) * 100,
2
)
# Frecuencias acumuladas descendentes
tabla_freq_resumida_resumida$Ni_dsc <- rev(cumsum(rev(tabla_freq_resumida_resumida$ni)))
tabla_freq_resumida_resumida$Hi_dsc <- round(
(tabla_freq_resumida_resumida$Ni_dsc / sum(tabla_freq_resumida_resumida$ni)) * 100,
2
)
# -------------------------
# Agregar fila TOTAL
# -------------------------
fila_total_resumida <- data.frame(
Densidad = "TOTAL",
ni = sum(tabla_freq_resumida_resumida$ni),
hi = 100,
Ni_asc = "",
Hi_asc = "",
Ni_dsc = "",
Hi_dsc = ""
)
tabla_final_resumida <- rbind(
tabla_freq_resumida_resumida,
fila_total_resumida
)
# -------------------------
# Tabla GT
# -------------------------
tabla_gt_resumida <- tabla_final_resumida %>%
gt() %>%
tab_header(
title = md("**Tabla N°2**"),
subtitle = md(
"**Distribución de frecuencias simplificada de la densidad de población en el estudio de la calidad del agua en Europa (1991-2017)**"
)
) %>%
cols_label(
Densidad = "Densidad (hab/km²)",
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 = Densidad == "TOTAL"
)
) %>%
opt_row_striping()
tabla_gt_resumida
| Tabla N°2 |
| Distribución de frecuencias simplificada de la densidad de población en el estudio de la calidad del agua en Europa (1991-2017) |
| Densidad (hab/km²) |
ni |
hi (%) |
Ni ↑ |
Hi ↑ (%) |
Ni ↓ |
Hi ↓ (%) |
| [0,75) |
1253 |
6.30 |
1253 |
6.3 |
19893 |
100 |
| [75,150) |
13739 |
69.06 |
14992 |
75.36 |
18640 |
93.7 |
| [150,225) |
123 |
0.62 |
15115 |
75.98 |
4901 |
24.64 |
| [225,300) |
4513 |
22.69 |
19628 |
98.67 |
4778 |
24.02 |
| [300,375) |
0 |
0.00 |
19628 |
98.67 |
265 |
1.33 |
| [375,450) |
261 |
1.31 |
19889 |
99.98 |
265 |
1.33 |
| [450,525) |
4 |
0.02 |
19893 |
100 |
4 |
0.02 |
| [525,600] |
0 |
0.00 |
19893 |
100 |
0 |
0 |
| TOTAL |
19893 |
100.00 |
|
|
|
|
4 Gráficas
4.1 Diagrama de barras de cantidad
# ================================================
# Diagrama de barras de cantidad que genera RStudio
# ================================================
barplot(
tabla_freq_resumida_resumida$ni,
main = "Gráfica N°1: Distribución de la densidad de población\nen el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Densidad de población (hab/km²)",
ylab = "Cantidad",
col = "skyblue",
ylim = c(0, max(tabla_freq_resumida_resumida$ni) * 1.1),
names.arg = tabla_freq_resumida_resumida$Densidad,
las = 2,
cex.names = 0.7
)

4.2 Diagrama de barras de cantidad general
# ===========================================================================
# Diagrama de barras de cantidad con relación a la totalidad de los datos
# ===========================================================================
barplot(
tabla_freq_resumida_resumida$ni,
main = "Gráfica N°2: Distribución general de la densidad de población\nen el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Densidad de población (hab/km²)",
ylab = "Cantidad",
col = "lightgreen",
ylim = c(0, 20000),
names.arg = tabla_freq_resumida_resumida$Densidad,
las = 2,
cex.names = 0.7
)

4.3 Diagrama de barras porcentual
# ===============================================
# Diagrama de barras porcentual que genera RStudio
# ===============================================
barplot(
tabla_freq_resumida_resumida$hi,
main = "Gráfica N°3: Distribución porcentual de la densidad de población\nen el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Densidad de población (hab/km²)",
ylab = "Porcentaje",
col = "skyblue",
ylim = c(0, max(tabla_freq_resumida_resumida$hi) * 1.1),
names.arg = tabla_freq_resumida_resumida$Densidad,
las = 2,
cex.names = 0.7
)

4.4 Diagrama de barras porcentual general
# ===========================================================
# Diagrama de barras porcentual con relación a la totalidad
# ===========================================================
barplot(
tabla_freq_resumida_resumida$hi,
main = "Gráfica N°4: Distribución porcentual general de la densidad\nde población en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Densidad de población (hab/km²)",
ylab = "Porcentaje",
col = "lightgreen",
ylim = c(0, 100),
names.arg = tabla_freq_resumida_resumida$Densidad,
las = 2,
cex.names = 0.7
)

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\nen el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Densidad de población (hab/km²)"
)
points(
mean(Densidad),
1,
pch = 19,
col = "red"
)
legend(
"topright",
legend = "Media",
text.col = "black",
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_resumida)
# Ojiva descendente
plot(
x_pos,
tabla_freq_resumida_resumida$Ni_dsc,
main = "Gráfica N°6: Ojiva ascendente y descendente de la densidad\nde población en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Densidad de población (hab/km²)",
ylab = "Frecuencia acumulada",
type = "o",
pch = 19,
col = "orange",
lwd = 2,
cex = 1.5,
xaxt = "n",
ylim = c(0, max(tabla_freq_resumida_resumida$Ni_dsc) * 1.05)
)
# Ojiva ascendente
lines(
x_pos,
tabla_freq_resumida_resumida$Ni_asc,
type = "o",
pch = 19,
col = "green",
lwd = 2,
cex = 1.5
)
# Etiquetas del eje X
axis(
side = 1,
at = x_pos,
labels = tabla_freq_resumida_resumida$Densidad,
las = 2,
cex.axis = 0.7
)
# Leyenda
legend(
"topright",
legend = c("Descendente", "Ascendente"),
col = c("orange", "green"),
pch = 19,
pt.cex = 1.5,
lty = 1, # Muestra las líneas en la leyenda
lwd = 2
)

4.7 Ojivas ascendentes y descendentes (Hi)
# ======================================
# OJIVAS ASCENDENTES Y DESCENDENTES (Hi)
# ======================================
# Posiciones en el eje X
x_pos <- 1:nrow(tabla_freq_resumida_resumida)
# Ojiva descendente
plot(
x_pos,
tabla_freq_resumida_resumida$Hi_dsc,
main = "Gráfica N°7: Ojiva ascendente y descendente de la densidad\nde población en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Densidad de población (hab/km²)",
ylab = "Porcentaje acumulado (%)",
type = "o",
pch = 19,
col = "red",
lwd = 2,
cex = 1.5,
xaxt = "n",
ylim = c(0, 100)
)
# Ojiva ascendente
lines(
x_pos,
tabla_freq_resumida_resumida$Hi_asc,
type = "o",
pch = 19,
col = "blue",
lwd = 2,
cex = 1.5
)
# Etiquetas del eje X
axis(
side = 1,
at = x_pos,
labels = tabla_freq_resumida_resumida$Densidad,
las = 2,
cex.axis = 0.7
)
# Leyenda
legend(
"topright",
legend = c("Descendente", "Ascendente"),
col = c("red", "blue"),
pch = 19,
pt.cex = 1.5,
lty = 1,
lwd = 2
)

5. Indicadores Estadísticos
5.1 Indicadores de Tendencia Central
# ====================================
# 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 <- round(median(Densidad), 2)
5.2 Dispersión
# ====================================
# MEDIDAS DE DISPERSIÓN
# ====================================
# Rango
rango_min <- min(Densidad)
rango_max <- max(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
# ====================================
library(e1071)
asimetria <- skewness(Densidad, type = 2)
curtosis <- kurtosis(Densidad, type = 2)
# Detección de valores atípicos mediante el criterio del boxplot
atipicos_densidad <- boxplot.stats(Densidad)$out
n_atipicos_densidad <- length(atipicos_densidad)
if(n_atipicos_densidad > 0){
rango_atipicos_densidad <- paste0("[", round(min(atipicos_densidad), 2), " ; ", round(max(atipicos_densidad), 2), "] (Valores: ", n_atipicos_densidad, ")")
} else {
rango_atipicos_densidad <- "No presenta valores atípicos"
}
5.4 Tabla de indicadores
# ====================================
# TABLA RESUMEN DE INDICADORES
# ====================================
tabla_indicadores_densidad <- data.frame(
Variable = "Densidad de población",
Rango = paste0("[", rango_min, " ; ", rango_max, "]"),
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 = rango_atipicos_densidad,
stringsAsFactors = FALSE
)
fila_densidad <- which(
tabla_indicadores_densidad$Variable == "Densidad de población"
)
tabla_indicadores_densidad_gt <- tabla_indicadores_densidad %>%
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 de agua en Europa (1991-2017)**"
)
) %>%
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_densidad
)
)
tabla_indicadores_densidad_gt
| Tabla N°3 |
| Indicadores estadísticos de la densidad de población en el estudio de la calidad de agua en Europa (1991-2017) |
| Variable |
Rango |
X |
Me |
Mo |
V |
Sd |
Cv |
As |
K |
Valores_Atipicos |
| Densidad de población |
[15 ; 511] |
149.86 |
122 |
122 |
5786.22 |
76.07 |
50.76 |
0.99 |
0.05 |
[15 ; 511] (Valores: 9544) |
| Autor: Grupo 3 |
6. Conclusión
La variable Densidad de población fluctúa entre 15 y 511 hab/km², y
sus valores giran en torno a una mediana de 122, con una desviación
estándar de 76.07. Dado que el coeficiente de variación es de 50.76, se
trata de un conjunto de valores extremadamente heterogéneo. Los datos
presentan una asimetría positiva, lo que indica que los valores se
acumulan de manera pronunciada en la parte baja de la variable. Con la
presencia de valores atípicos del intervalo 15 a 511 (9544 valores),
resulta perjudicial para la gestión ambiental, ya que evidencia una
presión antrópica altamente focalizada en ciertas zonas en los cuerpos
hídricos de Europa.