4. Tabla de distribución de frecuencia
4.1 Tabla general con Sturges
TDF_GDP_Cientifico <- TDF_GDP
# Convertimos los límites y marca de clase a formato científico en texto limpio
TDF_GDP_Cientifico$Li <- formatC(TDF_GDP$Li, format = "e", digits = 2)
TDF_GDP_Cientifico$Ls <- formatC(TDF_GDP$Ls, format = "e", digits = 2)
TDF_GDP_Cientifico$MC <- formatC(TDF_GDP$MC, format = "e", digits = 2)
TDF_GDP_Completo <- rbind(
TDF_GDP_Cientifico,
data.frame(
Li = "Total",
Ls = " ",
MC = " ",
ni = sum(TDF_GDP$ni),
hi = 100,
Niasc = " ",
Nidsc = " ",
Hiasc = " ",
Hidsc = " "
)
)
# ================================
# TABLA GT
# ================================
tabla_GDP <- TDF_GDP_Completo %>%
gt() %>%
tab_header(
title = md("*Tabla Nº1*"),
subtitle = md("**Distribución de frecuencias de GDP 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.color = "black",
row.striping.include_table_body = TRUE
)
tabla_GDP
| Tabla Nº1 |
| Distribución de frecuencias de GDP en el estudio de la calidad de agua en Europa (1991-2017) |
| Li |
Ls |
MC |
ni |
hi |
Niasc |
Nidsc |
Hiasc |
Hidsc |
| 2.89e+10 |
2.79e+11 |
1.54e+11 |
1789 |
8.99 |
1789 |
19893 |
9 |
100 |
| 2.79e+11 |
5.29e+11 |
4.04e+11 |
505 |
2.54 |
2294 |
18104 |
12 |
91 |
| 5.29e+11 |
7.79e+11 |
6.54e+11 |
194 |
0.98 |
2488 |
17599 |
13 |
88 |
| 7.79e+11 |
1.03e+12 |
9.05e+11 |
4 |
0.02 |
2492 |
17405 |
13 |
87 |
| 1.28e+12 |
1.53e+12 |
1.40e+12 |
3141 |
15.79 |
5633 |
17401 |
28 |
87 |
| 2.03e+12 |
2.28e+12 |
2.16e+12 |
101 |
0.51 |
5734 |
14260 |
29 |
72 |
| 2.53e+12 |
2.78e+12 |
2.66e+12 |
3957 |
19.89 |
9691 |
14159 |
49 |
71 |
| 2.78e+12 |
3.03e+12 |
2.91e+12 |
9661 |
48.56 |
19352 |
10202 |
97 |
51 |
| 3.53e+12 |
3.78e+12 |
3.66e+12 |
541 |
2.72 |
19893 |
541 |
100 |
3 |
| Total |
|
|
19893 |
100.00 |
|
|
|
|
| Autor: Grupo 3 |
# Nota: Debido a la gran magnitud de los valores de la variable, los datos se presentan en notación científica para facilitar su visualización, comprensión y análisis.
4.2 Tabla Simplificada
# =============================================
# TABLA SIMPLIFICADA (BASADA EN EL HISTOGRAMA)
# =============================================
# 1. Calcular el histograma
histoP <- hist(
GDP,
breaks = 10,
plot = FALSE
)
# 2. Extraer datos del histograma para la tabla
Limites <- histoP$breaks
LimInf <- Limites[1:(length(Limites) - 1)]
LimSup <- Limites[2:length(Limites)]
Mc <- histoP$mids
ni <- histoP$counts
hi <- round((ni / sum(ni)) * 100, 2)
# 3. Crear el DataFrame base
TDF_Histo_GDP <- data.frame(
LimInf,
LimSup,
Mc,
ni,
hi
)
# Eliminar intervalos vacíos
TDF_Histo_GDP <- TDF_Histo_GDP[TDF_Histo_GDP$ni > 0, ]
# 4. Recalcular frecuencias acumuladas
TDF_Histo_GDP$Ni_asc <- cumsum(TDF_Histo_GDP$ni)
TDF_Histo_GDP$Ni_dsc <- rev(cumsum(rev(TDF_Histo_GDP$ni)))
TDF_Histo_GDP$Hi_asc <- round((TDF_Histo_GDP$Ni_asc / sum(TDF_Histo_GDP$ni)) * 100, 2)
TDF_Histo_GDP$Hi_dsc <- round((TDF_Histo_GDP$Ni_dsc / sum(TDF_Histo_GDP$ni)) * 100, 2)
# Convertir límites a notación científica en texto limpio
TDF_Histo_GDP_Cientifico <- TDF_Histo_GDP
TDF_Histo_GDP_Cientifico$LimInf <- formatC(TDF_Histo_GDP$LimInf, format = "e", digits = 2)
TDF_Histo_GDP_Cientifico$LimSup <- formatC(TDF_Histo_GDP$LimSup, format = "e", digits = 2)
TDF_Histo_GDP_Cientifico$Mc <- formatC(TDF_Histo_GDP$Mc, format = "e", digits = 2)
# 5. Crear fila de totales
TDF_Histo_GDP_Completo <- rbind(
TDF_Histo_GDP_Cientifico,
data.frame(
LimInf = "Total",
LimSup = " ",
Mc = " ",
ni = sum(TDF_Histo_GDP$ni),
hi = 100.00,
Ni_asc = " ",
Ni_dsc = " ",
Hi_asc = " ",
Hi_dsc = " "
)
)
# 6. Generar y mostrar la Tabla con 'gt'
tabla_Histo_GDP <- TDF_Histo_GDP_Completo %>%
gt() %>%
tab_header(
title = md("*Tabla Nº2*"),
subtitle = md("**Distribución simplificada de frecuencias de GDP 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.color = "black",
row.striping.include_table_body = TRUE
)
tabla_Histo_GDP
| Tabla Nº2 |
| Distribución simplificada de frecuencias de GDP en el estudio de la calidad de agua en Europa (1991-2017) |
| LimInf |
LimSup |
Mc |
ni |
hi |
Ni_asc |
Ni_dsc |
Hi_asc |
Hi_dsc |
| 0.00e+00 |
5.00e+11 |
2.50e+11 |
2033 |
10.22 |
2033 |
19893 |
10.22 |
100 |
| 5.00e+11 |
1.00e+12 |
7.50e+11 |
459 |
2.31 |
2492 |
17860 |
12.53 |
89.78 |
| 1.00e+12 |
1.50e+12 |
1.25e+12 |
3141 |
15.79 |
5633 |
17401 |
28.32 |
87.47 |
| 2.00e+12 |
2.50e+12 |
2.25e+12 |
101 |
0.51 |
5734 |
14260 |
28.82 |
71.68 |
| 2.50e+12 |
3.00e+12 |
2.75e+12 |
13618 |
68.46 |
19352 |
14159 |
97.28 |
71.18 |
| 3.50e+12 |
4.00e+12 |
3.75e+12 |
541 |
2.72 |
19893 |
541 |
100 |
2.72 |
| Total |
|
|
19893 |
100.00 |
|
|
|
|
| Autor: Grupo 3 |
# Nota: Al igual que en la Tabla Nº1, debido a la gran magnitud de los valores de la variable, los datos se presentan en notación científica para facilitar su visualización, comprensión y análisis.
5. Gráficas
5.1 Histograma (ni)
# =========================================
# Histograma generado por RStudio
# =========================================
par(mar = c(10, 4, 7, 2))
# 1. Unimos todos los límites inferiores
limites_etiquetas_gdp <- c(TDF_Histo_GDP$LimInf, tail(TDF_Histo_GDP$LimSup, 1))
# 2. Convertimos esos límites a notación científica
limites_cientificos <- formatC(limites_etiquetas_gdp, format = "e", digits = 2)
bp <- barplot(
TDF_Histo_GDP$ni,
col = "salmon",
border = "black",
main = "Gráfica Nº1: Distribución de frecuencias de GDP en el estudio de \nla calidad de agua en Europa (1991-2017)",
xlab = "",
ylab = "Cantidad",
space = 0,
xaxt = "n",
ylim = c(0, max(TDF_Histo_GDP$ni) * 1.2)
)
axis(
side = 1,
at = 0:length(TDF_Histo_GDP$ni),
labels = limites_cientificos,
las = 2,
cex.axis = 0.8
)
mtext("GDP", side = 1, line = 6.5, font = 2)
grid()

5.2 Histograma General (ni)
# ===========================================================
# Histograma con relación a la totalidad de los datos
# ===========================================================
par(mar = c(10, 4, 7, 2))
# 1. Unimos todos los límites inferiores
limites_etiquetas_gdp2 <- c(TDF_Histo_GDP$LimInf, tail(TDF_Histo_GDP$LimSup, 1))
# 2. Convertimos esos límites a notación científica
limites_cientificos2 <- formatC(limites_etiquetas_gdp2, format = "e", digits = 2)
bp2 <- barplot(
TDF_Histo_GDP$ni,
col = "lightsalmon2",
border = "black",
main = "Gráfica Nº2: Distribución de frecuencias de GDP en el estudio \nde la calidad de agua en Europa (1991-2017)",
xlab = "",
ylab = "Cantidad",
space = 0,
xaxt = "n",
yaxt = "n",
ylim = c(0, 20000)
)
axis(
side = 2,
at = seq(0, 20000, by = 5000),
las = 1
)
axis(
side = 1,
at = 0:length(TDF_Histo_GDP$ni),
labels = limites_cientificos2,
las = 2,
cex.axis = 0.8
)
mtext("GDP", side = 1, line = 6.5, font = 2)
grid(nx = NA, ny = NULL)

5.3 Histograma Porcentual (hi)
# ======================================
# Histograma porcentual que genera RStudio
# ======================================
par(mar = c(10, 4, 7, 2))
# 1. Unimos todos los límites inferiores
limites_etiquetas_gdp3 <- c(TDF_Histo_GDP$LimInf, tail(TDF_Histo_GDP$LimSup, 1))
# 2. Convertimos esos límites a notación científica
limites_cientificos3 <- formatC(limites_etiquetas_gdp3, format = "e", digits = 2)
bp3 <- barplot(
TDF_Histo_GDP$hi,
col = "salmon",
border = "black",
main = "Gráfica Nº3: Distribución porcentual de frecuencias de GDP en el estudio
de la calidad de agua en Europa (1991-2017)",
xlab = "",
ylab = "Porcentaje (%)",
space = 0,
xaxt = "n",
ylim = c(0, max(TDF_Histo_GDP$hi) * 1.2)
)
axis(
side = 1,
at = 0:length(TDF_Histo_GDP$hi),
labels = limites_cientificos3,
las = 2,
cex.axis = 0.8
)
mtext("GDP", side = 1, line = 6.5, font = 2)
grid()

5.4 Histograma Porcentual General (hi)
# ===========================================================
# Histograma porcentual con relación a la totalidad
# ===========================================================
par(mar = c(10, 4, 7, 2))
# 1. Unimos todos los límites inferiores
limites_etiquetas_gdp4 <- c(TDF_Histo_GDP$LimInf, tail(TDF_Histo_GDP$LimSup, 1))
# 2. Convertimos esos límites a notación científica
limites_cientificos4 <- formatC(limites_etiquetas_gdp4, format = "e", digits = 2)
bp4 <- barplot(
TDF_Histo_GDP$hi,
col = "lightsalmon2",
border = "black",
main = "Gráfica Nº4: Distribución porcentual general de GDP en el estudio \nde la calidad de agua en Europa (1991-2017)",
xlab = "",
ylab = "Porcentaje (%)",
space = 0,
xaxt = "n",
yaxt = "n",
ylim = c(0, 100)
)
axis(
side = 2,
at = seq(0, 100, by = 20),
las = 1
)
axis(
side = 1,
at = 0:length(TDF_Histo_GDP$hi),
labels = limites_cientificos4,
las = 2,
cex.axis = 0.8
)
mtext("GDP", side = 1, line = 6.5, font = 2)
grid(nx = NA, ny = NULL)

5.5 Polígono de frecuencias (hi)
par(mar = c(10, 4, 7, 2))
# 1. Unimos todos los límites inferiores
limites_etiquetas_gdp5 <- c(TDF_Histo_GDP$LimInf, tail(TDF_Histo_GDP$LimSup, 1))
# 2. Convertimos esos límites a notación científica
limites_cientificos5 <- formatC(limites_etiquetas_gdp5, format = "e", digits = 2)
bp <- barplot(
TDF_Histo_GDP$hi,
col = "salmon",
border = "black",
main = "Gráfica Nº5: Polígono de frecuencia de la distribución porcentual de
GDP en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "",
ylab = "Porcentaje (%)",
space = 0,
xaxt = "n",
ylim = c(0, max(TDF_Histo_GDP$hi) * 1.2)
)
lines(
bp,
TDF_Histo_GDP$hi,
type = "o",
pch = 16,
lwd = 2,
col = "darkred"
)
# 5. Etiquetas de texto
text(
bp,
TDF_Histo_GDP$hi,
labels = round(TDF_Histo_GDP$hi, 2),
pos = 3,
cex = 0.8,
col = "black"
)
# 6. Dibujamos el eje X
axis(
side = 1,
at = 0:length(TDF_Histo_GDP$hi),
labels = limites_cientificos5,
las = 2,
cex.axis = 0.8
)
mtext("GDP", side = 1, line = 6.5, font = 2)
grid()

5.6 Boxplot
# =============================
# BOXPLOT
# =============================
boxplot(
GDP,
horizontal = TRUE,
col = "coral1",
main = "Gráfica Nº6: Diagrama de caja de GDP en el estudio de la calidad
de agua en Europa (1991-2017)",
xlab = "GDP"
)
points(
mean(GDP),
1,
pch = 19,
col = "red"
)
legend(
"topright",
legend = "Media",
pch = 19,
col = "red"
)

5.7 Ojiva ascendente y descendente (Ni)
# =========================
# OJIVAS Ni
# =========================
par(mar = c(10, 4, 7, 2))
# 1. Crear eje X con límites concatenados
eje_x <- c(TDF_Histo_GDP$LimInf, TDF_Histo_GDP$LimSup[length(TDF_Histo_GDP$LimSup)])
# 2. Convertir los límites a notación científica
limites_cientificos_ojiva <- formatC(eje_x, format = "e", digits = 2)
ni_asc_plot <- c(0, TDF_Histo_GDP$Ni_asc)
ni_dsc_plot <- c(TDF_Histo_GDP$Ni_dsc, 0)
# 4. Graficar Ojiva Descendente
plot(
eje_x, ni_dsc_plot,
main = "Gráfica Nº7: Ojiva ascendente y descendente de GDP en el estudio \nde la calidad de agua en Europa (1991-2017)",
xlab = "",
ylab = "Frecuencia acumulada",
col = "coral1",
type = "o",
lwd = 2,
pch = 16,
xaxt = "n",
ylim = c(0, max(ni_asc_plot) * 1.1)
)
lines(
eje_x, ni_asc_plot,
col = "orange3",
type = "o",
lwd = 2,
pch = 16
)
axis(
side = 1,
at = eje_x,
labels = limites_cientificos_ojiva,
las = 2,
cex.axis = 0.8
)
mtext("GDP", side = 1, line = 6.5, font = 2)
legend(
"topright",
legend = c("Ojiva descendente", "Ojiva ascendente"),
col = c("coral1", "orange3"),
pch = 16,
lty = 1,
bty = "n"
)
grid()

5.8 Ojiva ascendente y descendente (Hi)
# =========================
# OJIVAS PORCENTUALES
# =========================
par(mar = c(10, 4, 7, 2))
# 1. Crear eje X con límites
eje_x <- c(TDF_Histo_GDP$LimInf, TDF_Histo_GDP$LimSup[length(TDF_Histo_GDP$LimSup)])
# 2. Convertir los límites a notación científica
limites_cientificos_ojiva8 <- formatC(eje_x, format = "e", digits = 2)
hi_asc_plot <- c(0, TDF_Histo_GDP$Hi_asc)
hi_dsc_plot <- c(TDF_Histo_GDP$Hi_dsc, 0)
# 4. Graficar Ojiva Porcentual Ascendente
plot(
eje_x, hi_asc_plot,
type = "o",
col = "lightsalmon2",
pch = 16,
lwd = 2,
main = "Gráfica Nº8: Ojivas porcentuales de GDP en el estudio de la calidad \nde agua en Europa (1991-2017)",
xlab = "",
ylab = "Porcentaje acumulado (%)",
xaxt = "n",
yaxt = "n",
ylim = c(0, 100)
)
lines(
eje_x, hi_dsc_plot,
type = "o",
col = "goldenrod2",
pch = 17,
lwd = 2
)
axis(
side = 2,
at = seq(0, 100, by = 20),
las = 1
)
axis(
side = 1,
at = eje_x,
labels = limites_cientificos_ojiva8,
las = 2,
cex.axis = 0.8
)
mtext("GDP", side = 1, line = 6.5, font = 2)
# 9. Agregar la leyenda
legend(
"topright",
legend = c("Ojiva Ascendente (%)", "Ojiva Descendente (%)"),
col = c("lightsalmon2", "goldenrod2"),
pch = c(16, 17),
lty = 1,
bty = "n"
)
grid(nx = NA, ny = NULL)

6 Indicadores Estadísticos
6.1 Indicadores de Tendencia Central
# =========================
# INDICADORES ESTADISTICOS
# =========================
# Obtener valores atípicos según el criterio del boxplot
atipicos <- boxplot.stats(GDP)$out
n_atipicos <- length(atipicos)
# Calcular el rango de los valores atípicos con notación científica y la cantidad al lado
if (n_atipicos > 0) {
rango_atipicos <- paste0(
"[", formatC(min(atipicos), format = "e", digits = 2),
" ; ", formatC(max(atipicos), format = "e", digits = 2), "] (Valores: ", n_atipicos, ")"
)
} else {
rango_atipicos <- "No existen valores atípicos"
}
media <- mean(GDP)
mediana <- median(GDP)
# Moda basada en Intervalo Modal
fila_modal <- which.max(TDF_Histo_GDP$ni)
moda_intervalar <- paste0(
"[", formatC(TDF_Histo_GDP$LimInf[fila_modal], format = "e", digits = 2),
" ; ", formatC(TDF_Histo_GDP$LimSup[fila_modal], format = "e", digits = 2), "]"
)
6.2 Dispersión
varianza <- var(GDP)
desv_est <- sd(GDP)
cv <- round((desv_est / media) * 100, 2)
6.3 Asimetría
library(e1071)
asimetria <- skewness(GDP, type = 2)
curtosis <- kurtosis(GDP)
6.4 Tabla de Indicadores
# =========================
# TABLA RESUMEN FINAL
# =========================
tabla_indicadores <- data.frame(
Variable = "GDP",
Rango = paste0("[", formatC(min(GDP), format = "e", digits = 2), " ; ", formatC(max(GDP), format = "e", digits = 2), "]"),
Media = formatC(media, format = "e", digits = 2),
Mediana = formatC(mediana, format = "e", digits = 2),
Moda = moda_intervalar,
Varianza = formatC(varianza, format = "e", digits = 2),
Desv_Est = formatC(desv_est, format = "e", digits = 2),
CV_porc = paste0(cv, "%"),
Asimetria = round(asimetria, 2),
Curtosis = round(curtosis, 2),
Atipicos_Rango = rango_atipicos
)
# Construcción de la tabla con el paquete gt
library(gt)
tabla_indicadores_gt <- tabla_indicadores %>%
gt() %>%
tab_header(
title = md("*Tabla Nº3*"),
subtitle = md("**Indicadores estadísticos de la variable GDP en el estudio de la calidad de agua en Europa (1991-2017)**")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 3")
)
tabla_indicadores_gt
| Tabla Nº3 |
| Indicadores estadísticos de la variable GDP en el estudio de la calidad de agua en Europa (1991-2017) |
| Variable |
Rango |
Media |
Mediana |
Moda |
Varianza |
Desv_Est |
CV_porc |
Asimetria |
Curtosis |
Atipicos_Rango |
| GDP |
[2.89e+10 ; 3.78e+12] |
2.29e+12 |
2.81e+12 |
[2.50e+12 ; 3.00e+12] |
8.68e+23 |
9.32e+11 |
40.75% |
-1.23 |
0.34 |
No existen valores atípicos |
| Autor: Grupo 3 |