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)

1. Leer datos

df <- read.csv(
  "waterPollution.csv",
  sep = ",",
  stringsAsFactors = FALSE
)

2. Extracción y depuración de la variable

# -------------------------
# Extraer variable
# -------------------------

Tiempo <- df$phenomenonTimeReferenceYear

# Eliminar valores faltantes
Tiempo <- na.omit(Tiempo)

3. Tabla de distribución de frecuencias

# -------------------------
# Tabla de frecuencias
# -------------------------

tabla_freq <- as.data.frame(
  table(Tiempo)
)

# Renombrar columnas
colnames(tabla_freq) <- c(
  "Tiempo",
  "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 de totales
# -------------------------

fila_total <- data.frame(
  Tiempo = "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 referencia de tiempo en el estudio de la calidad de agua en Europa (1991-2017)**"
    )
  ) %>%
  cols_label(
    Tiempo = "Referencia de tiempo",
    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 = Tiempo == "TOTAL"
    )
  ) %>%
  opt_row_striping()

tabla_gt
Tabla N°1
Distribución de frecuencias de la referencia de tiempo en el estudio de la calidad de agua en Europa (1991-2017)
Referencia de tiempo ni hi (%) Ni ↑ Hi ↑ (%) Ni ↓ Hi ↓ (%)
1991 1 0.00 1 0 20000 99.94
1992 3 0.01 4 0.01 19999 99.94
1995 1 0.00 5 0.01 19996 99.93
1996 1 0.00 6 0.01 19995 99.93
1997 1 0.00 7 0.01 19994 99.93
1999 1 0.00 8 0.01 19993 99.93
2000 4 0.02 12 0.03 19992 99.93
2001 1 0.00 13 0.03 19988 99.91
2003 1 0.00 14 0.03 19987 99.91
2004 5 0.03 19 0.06 19986 99.91
2005 13 0.06 32 0.12 19981 99.88
2006 983 4.92 1015 5.04 19968 99.82
2007 1216 6.08 2231 11.12 18985 94.9
2008 4938 24.69 7169 35.81 17769 88.82
2009 9356 46.78 16525 82.59 12831 64.13
2010 1797 8.98 18322 91.57 3475 17.35
2011 128 0.64 18450 92.21 1678 8.37
2012 264 1.32 18714 93.53 1550 7.73
2013 197 0.98 18911 94.51 1286 6.41
2014 236 1.18 19147 95.69 1089 5.43
2015 255 1.27 19402 96.96 853 4.25
2016 589 2.94 19991 99.9 598 2.98
2017 9 0.04 20000 99.94 9 0.04
TOTAL 20000 100.00

4 Gráficas

4.1 Histograma (ni)

# =========================
# HISTOGRAMA (ni)
# =========================

barplot(
  tabla_freq$ni,
  main = "Gráfica N°1: Distribución de la referencia de tiempo
  en el estudio de la calidad de agua en Europa (1991-2017)",
  xlab = "referencia de tiempo",
  ylab = "Cantidad",
  col = "skyblue",
  ylim = c(0, max(tabla_freq$ni)*1.1),
  names.arg = tabla_freq$Tiempo,
  las = 2,
  cex.names = 0.8
)

4.2 Histograma General (ni)

# =========================
# HISTOGRAMA GENERAL (ni)
# =========================

barplot(
  tabla_freq$ni,
  main = "Gráfica N°2: Distribución general de la referencia de tiempo
  en el estudio de la calidad de agua en Europa (1991-2017)",
  xlab = "Referencia de tiempo",
  ylab = "Cantidad",
  col = "lightgreen",
  ylim = c(0, 20000),
  names.arg = tabla_freq$Tiempo,
  las = 2,
  cex.names = 0.8
)

4.3 Histograma (hi)

# =========================
# HISTOGRAMA (hi)
# =========================

barplot(
  tabla_freq$hi,
  main = "Gráfica N°3: Distribución porcentual de la referencia de
  tiempo en el estudio de la calidad de agua en Europa (1991-2017)",
  xlab = "Referencia de tiempo",
  ylab = "Porcentaje",
  col = "skyblue",
  ylim = c(0, max(tabla_freq$hi) * 1.1),
  names.arg = tabla_freq$Tiempo,
  las = 2,
  cex.names = 0.8
)

4.4 Histograma General (hi)

# =========================
# HISTOGRAMA GENERAL (hi)
# =========================

barplot(
  tabla_freq$hi,
  main = "Gráfica N°4: Distribución porcentual general de la referencia
  de tiempo en el estudio de la calidad de agua en Europa (1991-2017)",
  xlab = "Referencia de tiempo",
  ylab = "Porcentaje",
  col = "lightgreen",
  ylim = c(0,100),
  names.arg = tabla_freq$Tiempo,
  las = 2,
  cex.names = 0.8
)

4.5 Diagrama de Caja

# =========================
# DIAGRAMA DE CAJA
# =========================

boxplot(
  Tiempo,
  horizontal = TRUE,
  col = "orange",
  main = "Gráfica N°5: Distribución de la referencia de tiempo
  en el estudio de la calidad de agua en Europa (1991-2017)",
  xlab = "Referencia de tiempo"
)

points(
  mean(Tiempo),
  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:length(tabla_freq$Tiempo)

# Ojiva descendente
plot(
  x_pos,
  tabla_freq$Ni_dsc,
  main = "Gráfica N°6: Ojiva ascendente y descendente de la referencia
  de tiempo en el estudio de la calidad de agua en Europa (1991-2017)",
  xlab = "Referencia de tiempo",
  ylab = "Cantidad",
  col = "orange",
  type = "p",
  lwd = 3,
  xaxt = "n"
)

# Ojiva ascendente
lines(
  x_pos,
  tabla_freq$Ni_asc,
  col = "green",
  type = "p",
  lwd = 3
)

# Etiquetas del eje X
axis(
  side = 1,
  at = x_pos,
  labels = tabla_freq$Tiempo,
  las = 2,
  cex.axis = 0.75
)

# Leyenda
legend(
  "topright",
  legend = c("Descendente", "Ascendente"),
  col = c("orange", "green"),
  pch = 1
)

4.7 Ojivas ascendentes y descendentes (Hi)

# ======================================
# OJIVAS ASCENDENTES Y DESCENDENTES (Hi)
# ======================================

# Posiciones en el eje X
x_pos <- 1:length(tabla_freq$Tiempo)

# Ojiva descendente
plot(
  x_pos,
  tabla_freq$Hi_dsc,
  main = "Gráfica N°7: Ojiva ascendente y descendente de la referencia
  de tiempo en el estudio de la calidad de agua en Europa (1991-2017)",
  xlab = "Referencia de tiempo",
  ylab = "Porcentaje",
  col = "red",
  type = "p",
  lwd = 3,
  xaxt = "n",
  ylim = c(0, 100)
)

# Ojiva ascendente
lines(
  x_pos,
  tabla_freq$Hi_asc,
  col = "blue",
  type = "p",
  lwd = 3
)

# Etiquetas del eje X
axis(
  side = 1,
  at = x_pos,
  labels = tabla_freq$Tiempo,
  las = 2,
  cex.axis = 0.75
)

# Leyenda
legend(
  "topright",
  legend = c("Descendente", "Ascendente"),
  col = c("red", "blue"),
  pch = 1
)

5. Indicadores Estadísticos

5.1 Indicadores de Tendencia Central

# =========================
# INDICADORES ESTADÍSTICOS
# Variable: Referencia de tiempo
# =========================

# =========================
# MEDIDAS DE TENDENCIA CENTRAL
# =========================

# Media
media <- round(mean(Tiempo), 2)

# Moda
tabla_moda <- table(Tiempo)
max_frecuencia <- max(tabla_moda)
moda <- names(tabla_moda)[tabla_moda == max_frecuencia]

# Mediana
mediana <- median(Tiempo)

5.2 Dispersión

# =========================
# MEDIDAS DE DISPERSIÓN
# =========================

# Rango
rango <- max(Tiempo) - min(Tiempo)

# Varianza
varianza <- var(Tiempo)

# Desviación estándar
desviacion <- sd(Tiempo)

# Coeficiente de variación
cv <- round((desviacion / media) * 100, 2)

5.3 Asimetría

# =========================
# MEDIDAS DE FORMA
# =========================

n <- length(Tiempo)

# Asimetría
asimetria <- sum((Tiempo - media)^3) /
  ((n - 1) * desviacion^3)

# Curtosis
curtosis <- sum((Tiempo - media)^4) /
  ((n - 1) * desviacion^4) - 3

# =========================
# VALORES ATÍPICOS
# =========================

Q1 <- quantile(Tiempo, 0.25)

Q3 <- quantile(Tiempo, 0.75)

RIQ <- Q3 - Q1

LI <- Q1 - 1.5 * RIQ

LS <- Q3 + 1.5 * RIQ

atipicos <- Tiempo[
  Tiempo < LI |
  Tiempo > 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 = "Referencia de tiempo",
  Rango = paste0("[", min(Tiempo), " ; ", max(Tiempo), "]"),
  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 ==
    "Referencia de tiempo"
)

tabla_indicadores_gt <- tabla_indicadores %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°2**"),
    subtitle = md(
      "**Indicadores estadísticos de la referencia de tiempo 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°2
Indicadores estadísticos de la referencia de tiempo en el estudio de la calidad de agua en Europa (1991-2017)
Variable Rango X Me Mo V Sd Cv As K Valores_Atipicos
Referencia de tiempo [1991 ; 2017] 2009 2009 2009 3.68 1.92 0.1 1.7 6.61 2693
Autor: Grupo 3

6. conclusiones

#La variable referencia de tiempo fluctúa entre 1991 y 2017, y sus valores giran en torno al año 2009, con una desviación estándar de 1.92, siendo un conjunto de datos homogéneo. El conjunto de valores se concentra en los años más recientes y presenta 2693 valores atípicos.