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
# ==========================================
# TABLA DE FRECUENCIAS
# ==========================================
tabla_freq <- as.data.frame(
table(Venue)
)
# Ordenar de menor a mayor
tabla_freq <- tabla_freq[
order(as.numeric(as.character(tabla_freq$Venue))),
]
# Renombrar columnas
colnames(tabla_freq) <- c(
"Venue",
"ni"
)
# Total de observaciones
N <- sum(tabla_freq$ni)
# Frecuencia relativa
tabla_freq$hi <- round(
(tabla_freq$ni / N) * 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
)
# ------------------------------------------
# Fila TOTAL
# ------------------------------------------
fila_total <- data.frame(
Venue = "TOTAL",
ni = N,
hi = 100,
Ni_asc = "",
Hi_asc = "",
Ni_dsc = "",
Hi_dsc = ""
)
tabla_final <- rbind(
tabla_freq,
fila_total
)
# ------------------------------------------
# Tabla GT
# ------------------------------------------
tabla_final %>%
gt() %>%
tab_header(
title = md("**Tabla N°1**"),
subtitle = md(
"**Distribución de frecuencias del conteo de lugares
en el estudio de la calidad de agua en Europa (1991-2017)**"
)
) %>%
cols_label(
Venue = "Conteo de lugares",
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 = Venue == "TOTAL"
)
) %>%
opt_row_striping()
| Tabla N°1 |
| Distribución de frecuencias del conteo de lugares
en el estudio de la calidad de agua en Europa (1991-2017) |
| Conteo de lugares |
ni |
hi (%) |
Ni ↑ |
Hi ↑ (%) |
Ni ↓ |
Hi ↓ (%) |
| 0 |
19410 |
97.05 |
19410 |
97.05 |
20000 |
99.94 |
| 1 |
129 |
0.64 |
19539 |
97.69 |
590 |
2.89 |
| 2 |
113 |
0.56 |
19652 |
98.25 |
461 |
2.25 |
| 3 |
77 |
0.38 |
19729 |
98.63 |
348 |
1.69 |
| 4 |
114 |
0.57 |
19843 |
99.2 |
271 |
1.31 |
| 5 |
65 |
0.32 |
19908 |
99.52 |
157 |
0.74 |
| 6 |
38 |
0.19 |
19946 |
99.71 |
92 |
0.42 |
| 7 |
17 |
0.08 |
19963 |
99.79 |
54 |
0.23 |
| 8 |
5 |
0.03 |
19968 |
99.82 |
37 |
0.15 |
| 9 |
6 |
0.03 |
19974 |
99.85 |
32 |
0.12 |
| 11 |
1 |
0.00 |
19975 |
99.85 |
26 |
0.09 |
| 14 |
4 |
0.02 |
19979 |
99.87 |
25 |
0.09 |
| 15 |
1 |
0.00 |
19980 |
99.87 |
21 |
0.07 |
| 16 |
3 |
0.01 |
19983 |
99.88 |
20 |
0.07 |
| 18 |
2 |
0.01 |
19985 |
99.89 |
17 |
0.06 |
| 19 |
2 |
0.01 |
19987 |
99.9 |
15 |
0.05 |
| 22 |
1 |
0.00 |
19988 |
99.9 |
13 |
0.04 |
| 24 |
2 |
0.01 |
19990 |
99.91 |
12 |
0.04 |
| 31 |
1 |
0.00 |
19991 |
99.91 |
10 |
0.03 |
| 33 |
1 |
0.00 |
19992 |
99.91 |
9 |
0.03 |
| 65 |
2 |
0.01 |
19994 |
99.92 |
8 |
0.03 |
| 84 |
3 |
0.01 |
19997 |
99.93 |
6 |
0.02 |
| 100 |
3 |
0.01 |
20000 |
99.94 |
3 |
0.01 |
| TOTAL |
20000 |
100.00 |
|
|
|
|
3.2 Tabla de frecuencias simplificada
# ==========================================
# simplificacion
# ==========================================
# Eliminar valores faltantes
Venue_tratado <- na.omit(Venue)
# Eliminar los valores iguales a 0
Venue_tratado <- Venue_tratado[Venue_tratado > 0]
# Conservar únicamente 10 intervalos
Venue_tratado <- Venue_tratado[
Venue_tratado >= 1 &
Venue_tratado <= 9
]
# ==========================================
# TABLA DE FRECUENCIAS SIMPLIFICADA
# ==========================================
tabla_freq_tratada <- as.data.frame(
table(Venue_tratado)
)
tabla_freq_tratada <- tabla_freq_tratada[
order(as.numeric(as.character(tabla_freq_tratada$Venue_tratado))),
]
colnames(tabla_freq_tratada) <- c(
"Venue",
"ni"
)
# Total
N_tratado <- sum(tabla_freq_tratada$ni)
# Frecuencia relativa
tabla_freq_tratada$hi <- round(
tabla_freq_tratada$ni / N_tratado * 100,
2
)
# Ajustar para que hi sume exactamente 100
tabla_freq_tratada$hi[nrow(tabla_freq_tratada)] <-
tabla_freq_tratada$hi[nrow(tabla_freq_tratada)] +
(100 - sum(tabla_freq_tratada$hi))
# Frecuencias acumuladas ascendentes
tabla_freq_tratada$Ni_asc <- cumsum(tabla_freq_tratada$ni)
tabla_freq_tratada$Hi_asc <- round(
cumsum(tabla_freq_tratada$hi),
2
)
# Frecuencias acumuladas descendentes
tabla_freq_tratada$Ni_dsc <- rev(cumsum(rev(tabla_freq_tratada$ni)))
tabla_freq_tratada$Hi_dsc <- round(
rev(cumsum(rev(tabla_freq_tratada$hi))),
2
)
# ------------------------------------------
# Fila TOTAL
# ------------------------------------------
fila_total <- data.frame(
Venue = "TOTAL",
ni = N_tratado,
hi = 100,
Ni_asc = "",
Hi_asc = "",
Ni_dsc = "",
Hi_dsc = ""
)
tabla_final_tratada <- rbind(
tabla_freq_tratada,
fila_total
)
# ------------------------------------------
# Tabla GT
# ------------------------------------------
tabla_final_tratada %>%
gt() %>%
tab_header(
title = md("**Tabla N°2**"),
subtitle = md(
"**Distribución de frecuencias simplificada del conteo de lugares
en el estudio de la calidad de agua en Europa (1991-2017)**"
)
) %>%
cols_label(
Venue = "Venue Count",
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 = Venue == "TOTAL"
)
) %>%
opt_row_striping()
| Tabla N°2 |
| Distribución de frecuencias simplificada del conteo de lugares
en el estudio de la calidad de agua en Europa (1991-2017) |
| Venue Count |
ni |
hi (%) |
Ni ↑ |
Hi ↑ (%) |
Ni ↓ |
Hi ↓ (%) |
| 1 |
129 |
22.87 |
129 |
22.87 |
564 |
100 |
| 2 |
113 |
20.04 |
242 |
42.91 |
435 |
77.13 |
| 3 |
77 |
13.65 |
319 |
56.56 |
322 |
57.09 |
| 4 |
114 |
20.21 |
433 |
76.77 |
245 |
43.44 |
| 5 |
65 |
11.52 |
498 |
88.29 |
131 |
23.23 |
| 6 |
38 |
6.74 |
536 |
95.03 |
66 |
11.71 |
| 7 |
17 |
3.01 |
553 |
98.04 |
28 |
4.97 |
| 8 |
5 |
0.89 |
558 |
98.93 |
11 |
1.96 |
| 9 |
6 |
1.07 |
564 |
100 |
6 |
1.07 |
| TOTAL |
564 |
100.00 |
|
|
|
|
tabla_freq_resumida <- tabla_freq_tratada
4. Graficas
4.1 Histograma (ni)
# =========================
# HISTOGRAMA (ni)
# =========================
barplot(
tabla_freq_resumida$ni,
main = "Gráfica N°1: Distribución del conteo de lugares
en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Venue Count",
ylab = "Cantidad",
col = "skyblue",
ylim = c(0, max(tabla_freq_resumida$ni) * 1.1),
names.arg = tabla_freq_resumida$Venue,
las = 2,
cex.names = 0.8
)

4.2 Histograma General (ni)
# =========================
# HISTOGRAMA GENERAL (ni)
# =========================
barplot(
tabla_freq_resumida$ni,
main = "Gráfica N°2: Distribución general del conteo de lugares
en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Venue Count",
ylab = "Cantidad",
col = "lightgreen",
ylim = c(0, 250),
names.arg = tabla_freq_resumida$Venue,
las = 2,
cex.names = 0.8
)

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

4.4 Histograma General (hi)
# =========================
# HISTOGRAMA GENERAL (hi)
# =========================
barplot(
tabla_freq_resumida$hi,
main = "Gráfica N°4: Distribución porcentual general del conteo de lugares en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Venue Count",
ylab = "Porcentaje",
col = "lightgreen",
ylim = c(0,100),
names.arg = tabla_freq_resumida$Venue,
las = 2,
cex.names = 0.8
)

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

#**Nota:** La caja del diagrama se observa muy próxima al valor 0 debido a que la mayor parte de las observaciones del conjunto de datos corresponde a este valor. En consecuencia, la distribución presenta una fuerte asimetría positiva y numerosos valores atípicos, los cuales se representan como puntos alejados de la caja.
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 del conteo de lugares en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Venue Count",
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$Venue,
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 del conteo de lugares en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Venue Count",
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$Venue,
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: Conteo de lugares
# =========================
# =========================
# MEDIDAS DE TENDENCIA CENTRAL
# =========================
# Media
media <- round(mean(Venue), 2)
# Moda
tabla_moda <- table(Venue)
max_frecuencia <- max(tabla_moda)
moda <- names(tabla_moda)[tabla_moda == max_frecuencia]
# Mediana
mediana <- median(Venue)
5.2 Dispersión
# =========================
# MEDIDAS DE DISPERSIÓN
# =========================
# Rango
rango <- max(Venue) - min(Venue)
# Varianza
varianza <- var(Venue)
# Desviación estándar
desviacion <- sd(Venue)
# Coeficiente de variación
cv <- round((desviacion / media) * 100, 2)
5.3 Asimetría
# =========================
# MEDIDAS DE FORMA
# =========================
n <- length(Venue)
# Asimetría
asimetria <- sum((Venue - media)^3) /
((n - 1) * desviacion^3)
# Curtosis
curtosis <- sum((Venue - media)^4) /
((n - 1) * desviacion^4) - 3
# =========================
# VALORES ATÍPICOS
# =========================
Q1 <- quantile(Venue, 0.25)
Q3 <- quantile(Venue, 0.75)
RIQ <- Q3 - Q1
LI <- Q1 - 1.5 * RIQ
LS <- Q3 + 1.5 * RIQ
atipicos <- Venue[
Venue < LI |
Venue > 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 = "Conteo de lugares",
Rango = paste0("[", min(Venue), " ; ", max(Venue), "]"),
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 ==
"Conteo de lugares"
)
tabla_indicadores_gt <- tabla_indicadores %>%
gt() %>%
tab_header(
title = md("**Tabla N°3**"),
subtitle = md(
"**Indicadores estadísticos del conteo de lugares 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
)
)
tabla_indicadores_gt
| Tabla N°3 |
| Indicadores estadísticos del conteo de lugares en el estudio
de la calidad de agua en Europa (1991-2017) |
| Variable |
Rango |
X |
Me |
Mo |
V |
Sd |
Cv |
As |
K |
Valores_Atipicos |
| Conteo de lugares |
[0 ; 100] |
0.14 |
0 |
0 |
3.7 |
1.92 |
1373.08 |
38.67 |
1777 |
590 |
| Autor: Grupo 3 |
6. Conclusión
# La variable conteo de lugares presenta valores entre 0 y 100, con una media de 0.14 y una mediana y moda iguales a 0, lo que evidencia que la mayoría de las observaciones se concentra en valores bajos. Además, muestra una alta variabilidad (Cv = 1373.08 %), una marcada asimetría positiva y 590 valores atípicos, indicando una distribución no homogénea influenciada por pocos valores elevados.