cat('
<link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,600;1,400&family=DM+Sans:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>
*{box-sizing:border-box}
body,.main-container{
  font-family:"DM Sans",sans-serif;font-size:15px;line-height:1.7;
  color:#1A1A18;background:#FAFAF8;max-width:960px;margin:0 auto;padding:0 1.5rem
}




/* ── Tabla de contenidos (TOC) estilos ── */
.list-group-item {
  font-family: "DM Sans", sans-serif !important;
  font-size: 14px !important;
  color: #1A1A18 !important;
  border: none !important;
  padding: 6px 12px !important;
}
.list-group-item.active {
  color: #C0392B !important;
  background-color: transparent !important;
  font-weight: 600 !important;
  border-left: 3px solid #C0392B !important;
}
.list-group-item:hover {
  color: #C0392B !important;
  background-color: #f5f5f5 !important;
}
.tocify-subheader .list-group-item {
  padding-left: 24px !important;
  font-size: 13px !important;
}
.tocify-header {
  font-weight: 600 !important;
  color: #C0392B !important;
  font-family: "Lora", serif !important;
}




/* ── portada ── */
.cover{text-align:center;padding:5rem 2rem 4rem;border-bottom:2px solid #E8E5DF;margin-bottom:3rem}
.cover-badge{display:inline-block;font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:#C0392B;border:1px solid #C0392B;border-radius:20px;padding:4px 14px;margin-bottom:1.2rem}
.cover h1{font-family:"Lora",serif;font-size:2.6rem;font-weight:600;line-height:1.25;margin-bottom:.8rem;color:#1A1A18}
.cover h1 em{font-style:italic;color:#C0392B}
.cover .sub{font-size:1rem;color:#6B6B65;max-width:520px;margin:0 auto 2rem}
.meta-row{display:flex;justify-content:center;gap:2.5rem;flex-wrap:wrap}
.meta-item{font-size:13px;color:#6B6B65}
.meta-item strong{display:block;color:#1A1A18;font-weight:500;font-size:14px}
/* ── secciones ── */
section{margin-bottom:3.5rem}
h2,.h2{font-family:"Lora",serif;font-size:1.5rem;font-weight:600;
  padding-bottom:.5rem;border-bottom:2px solid #C0392B;margin:2rem 0 .8rem;color:#1A1A18}
  .title {
  font-family: "Lora", serif;
  font-weight: 600;
  color: #C0392B;
  border: 2px solid #C0392B;
  border-radius: 12px;
  padding: 20px 25px;
  margin: 2rem auto;
  background-color: white;
  text-align: center;
  font-size: 2rem;
  box-shadow: 0 4px 12px rgba(192, 57, 43, 0.15);
  }
p{margin-bottom:1rem;color:#2a2a28}

/* ── Botones de code_folding ── */
.btn-code-folding {
  cursor: pointer !important;
  background-color: #f5f5f5 !important;
  border: 1px solid #ddd !important;
  border-radius: 4px !important;
  padding: 4px 12px !important;
  font-size: 12px !important;
  font-family: "DM Sans", sans-serif !important;
  margin-bottom: 8px !important;
  transition: all 0.2s ease !important;
}

.btn-code-folding:hover {
  background-color: #e0e0e0 !important;
  border-color: #C0392B !important;
}

.btn-code-folding:active {
  transform: scale(0.98) !important;
}

.code-folding-btn {
  display: inline-block !important;
  visibility: visible !important;
}

pre code {
  font-family: monospace !important;
  font-size: 13px !important;
}

</style>
')

1 Introducción

El presente informe documenta una campaña de monitoreo de ruido ambiental realizada el 13 de febrero de 2026 en tres zonas del campus de la Universidad del Valle (Cali, Colombia). Los datos fueron recolectados mediante caminatas instrumentadas con un teléfono móvil equipado con sensor de micrófono, registrando el nivel de presión sonora en decibeles (dB) cada segundo junto con coordenadas GPS de alta precisión.

Las tres zonas evaluadas presentan características de uso del suelo marcadamente distintas:

  • Comedor Central: Núcleo del campus con alta densidad peatonal interno y externo. Recorrido de ~10 minutos (n = 624 mediciones).

  • Facultad de Ciencias: Área académica con laboratorios, aulas y corredores internos. Recorrido de ~10 minutos (n = 577 mediciones).

  • Estación Experimental: Zona agrícola-investigativa periférica, con menor actividad humana. Recorrido de ~13 minutos (n = 762 mediciones).

El marco normativo empleado es la Resolución 0627 de 2006 del Ministerio de Ambiente y Desarrollo Sostenible (MADS), que establece un límite máximo de 65 dB para zonas de uso institucional y mixto en horario diurno.

Los mapas interactivos muestran la trayectoria GPS de cada recorrido. Los marcadores están coloreados según el nivel de ruido registrado: verde (<65 dB), naranja (65–79 dB) y rojo (≥80 dB).

db_color<-function(v){ ifelse(v<65,"#27AE60",ifelse(v<80,"#F39C12","#C0392B"))}

# Paleta de colores por zona
pal_zona<-c("Central"="#C0392B",
              "Facultad de Ciencias"="#2980B9",
              "Estacion Experimental"="#27AE60")
leaflet(central) %>%
  addProviderTiles(providers$OpenStreetMap) %>%
  addPolylines(lng= ~Lon, lat = ~Lat,
               color= "#555", weight = 1.2, opacity = 0.4) %>%
  addCircleMarkers( lng= ~Lon, lat= ~Lat,
    radius=6,
    fillColor=~db_color(dB),
    fillOpacity=0.9,
    stroke= TRUE,color="#fff", weight=0.5,
    popup= ~paste0("<b>", dB, " dB</b><br>",Timestamp)
  ) %>%
  addLegend("bottomright",
    colors= c("#27AE60","#F39C12","#C0392B"),
    labels= c("< 65 dB","65–79 dB","≥ 80 dB"),
    title= "Nivel de ruido", opacity = 1)

Figura 1. Concentración de ruido en el comedor central

leaflet(facultad) %>%
  addProviderTiles(providers$OpenStreetMap) %>%
  addPolylines(lng= ~Lon, lat = ~Lat,
               color= "#555", weight= 1.2, opacity= 0.4) %>%
  addCircleMarkers(
    lng= ~Lon, lat = ~Lat,
    radius= 6,
    fillColor= ~db_color(dB),
    fillOpacity= 0.9,
    stroke= TRUE, color = "#fff", weight = 0.5,
    popup= ~paste0("<b>", dB, " dB</b><br>", Timestamp)
  ) %>%
  addLegend("bottomright",
    colors= c("#27AE60","#F39C12","#C0392B"),
    labels= c("< 65 dB","65–79 dB","≥ 80 dB"),
    title= "Nivel de ruido", opacity= 1)

Figura 2. Concentración de ruido en facultad de ciencias

leaflet(estacion) %>%
  addProviderTiles(providers$OpenStreetMap) %>%
  addPolylines(lng= ~Lon, lat= ~Lat,
               color= "#555", weight= 1.2, opacity= 0.4) %>%
  addCircleMarkers(
    lng= ~Lon, lat= ~Lat,
    radius= 6,
    fillColor= ~db_color(dB),
    fillOpacity= 0.9,
    stroke= TRUE, color = "#fff", weight = 0.5,
    popup= ~paste0("<b>", dB, " dB</b><br>", Timestamp)) %>%
  addLegend("bottomright",
    colors= c("#27AE60","#F39C12","#C0392B"),
    labels= c("< 65 dB","65–79 dB","≥ 80 dB"),
    title= "Nivel de ruido", opacity= 1)

Figura 3. Concentración de ruido en estación experimental

Mapa comparativo

leaflet() %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  
  # Central
  addPolylines(
    data= central,
    lng= ~Lon, lat= ~Lat,
    color= "#C0392B",
    weight= 2, opacity= 0.7
  ) %>%
  addCircleMarkers(
    data= central,
    lng= ~Lon, lat= ~Lat,
    radius= 3,
    fillColor= "#C0392B",
    fillOpacity= 0.85,
    stroke= TRUE, color= "#fff", weight= 0.3,
    popup= ~paste0("<b>Central: ", dB, " dB</b>")
  ) %>%
  # Facultad de Ciencias
  addPolylines(
    data= facultad,
    lng= ~Lon, lat = ~Lat,
    color= "#2980B9",
    weight= 2, opacity = 0.7
  ) %>%
  addCircleMarkers(
    data= facultad,
    lng= ~Lon, lat= ~Lat,
    radius= 3,
    fillColor= "#2980B9",
    fillOpacity= 0.85,
    stroke= TRUE, color= "#fff", weight= 0.3,
    popup= ~paste0("<b>Facultad: ", dB, " dB</b>")
  ) %>%
  
  # Estacion Experimental
  addPolylines(
    data    = estacion,
    lng     = ~Lon, lat = ~Lat,
    color   = "#27AE60",
    weight  = 2, opacity = 0.7
  ) %>%
  addCircleMarkers(
    data        = estacion,
    lng         = ~Lon, lat = ~Lat,
    radius      = 3,
    fillColor   = "#27AE60",
    fillOpacity = 0.85,
    stroke      = TRUE, color = "#fff", weight = 0.3,
    popup       = ~paste0("<b>Estacion: ", dB, " dB</b>")
  ) %>%
  
  addLegend(
    position= "bottomright",
    colors= c("#C0392B", "#2980B9", "#27AE60"),
    labels= c("Central", "Facultad de Ciencias", "Estacion Experimental"),
    title= "Zona",
    opacity = 1)

2 Exploración de datos

En primer lugar, se obtuvieron las mediciones de sonido en decibeles a través de la aplicación AirCasting. Para entender el comportamiento del ruido en las tres zonas, se calcularon algunas estadísticas descriptivas que permiten identificar tendencias centrales, variabilidad y cumplimiento normativo.

datos$Categoria<- factor(
  ifelse(datos$dB<= 65, "Dentro del limite (≤ 65 dB)",
                         "Sobre el limite (> 65 dB)"))

# Etiqueta para la variable dB
label(datos$dB)<- "Nivel de ruido (dB)"
label(datos$Categoria)<- "Cumplimiento normativo"

# Tabla resumen con table1
table1(~ dB + Categoria | Zona, data= datos,
       caption= "Tabla 1. Estadisticas descriptivas por zona")
Tabla 1. Estadisticas descriptivas por zona
Central
(N=624)
Facultad de Ciencias
(N=577)
Estacion Experimental
(N=762)
Overall
(N=1963)
Nivel de ruido (dB)
Mean (SD) 79.4 (6.75) 65.7 (5.25) 63.3 (2.80) 69.1 (8.69)
Median [Min, Max] 79.0 [58.0, 94.0] 65.0 [54.0, 86.0] 63.0 [58.0, 85.0] 65.0 [54.0, 94.0]
Cumplimiento normativo
Dentro del limite (≤ 65 dB) 21 (3.4%) 337 (58.4%) 659 (86.5%) 1017 (51.8%)
Sobre el limite (> 65 dB) 603 (96.6%) 240 (41.6%) 103 (13.5%) 946 (48.2%)

La Tabla 1 resume estos hallazgos. En cuanto a los niveles sonoros, la zona central presenta el promedio mas alto (79.4 dB) y la mayor variabilidad (SD=6.75), con valores que alcanzan hasta 94 dB. Por el contrario, la estación experimental registra la media mas baja (63.3 dB) y la menor variabilidad (SD=2.80), lo que sugiere condiciones acústicas mas controladas. La facultad de ciencias ocupa una posición intermedia, con una media de 65.7 dB y una variabilidad de 5.25.

Comparativo en histograma

require(ggplot2)
ggplot(datos, aes(x= dB, fill= Zona)) +
  geom_histogram(binwidth= 3, color= "white", alpha = 0.85) +
  geom_vline(xintercept= 65, linetype= "dashed",
             color= "red", linewidth = 0.8) +
  annotate("text", x= 67, y= Inf,
           label= "Limite 65 dB",
           vjust= 1.5, hjust = 0,
           size= 3, color= "red") +
  facet_wrap(~Zona, scales= "free_y") +
  scale_fill_manual(values= pal_zona) +
  labs(title= "Distribucion del nivel de ruido por zona",
       x= "Nivel de ruido (dB)", y = "Frecuencia") +
  theme_minimal(base_size= 11) + 
  theme(plot.title = element_text(hjust = 0.5))+
  theme(legend.position= "none",
        strip.text= element_text(face= "bold"),
        panel.grid.minor= element_blank())

El histograma muestra la forma en la que se distribuyen los datos. En la zona central se observa una concentración de datos por encima de los 80 dB, mientras que en ciencias los valores se agrupan alrededor del límite normativo. En la estación experimental, la distribución está por debajo de los 65 dB, lo que refleja condiciones más estables y tranquilas.

require(ggplot2)
excedencias<- aggregate(dB ~ Zona, data= datos,
  FUN= function(x) round(mean(x > 65) * 100, 1))
colnames(excedencias)[2]<- "pct"

ggplot(excedencias, aes(x= Zona, y= pct, fill= Zona)) +
  geom_col(width= 0.55, alpha= 0.85) +
  geom_text(aes(label= paste0(pct, "%")),
            vjust= -0.5, fontface= "bold", size = 4) +
  geom_hline(yintercept= 65, linetype= "dashed",
             color= "red", linewidth= 0.8) +
  scale_fill_manual(values= pal_zona) +
  scale_y_continuous(limits= c(0, 108),
                     labels= function(x) paste0(x, "%")) +
  labs(title= "% de mediciones que superan el limite de 65 dB",
       x= NULL, y= "Porcentaje (%)") +
  theme_minimal(base_size= 11) +
   theme(plot.title = element_text(hjust = 0.5))+
  theme(legend.position= "none",
        panel.grid.major.x= element_blank(),
        panel.grid.minor= element_blank(),
        axis.text.x= element_text(face= "bold"))

3 Evaluación de hipótesis

Se plantean las siguientes hipótesis:

  • H₀: Las medianas del nivel de ruido son iguales en las tres zonas.
  • H₁: Al menos una zona tiene una mediana de ruido significativamente diferente.

El boxplot a continuación permite visualizar simultáneamente la mediana, los cuartiles, el rango intercuartílico y los valores atípicos de cada zona. La línea roja punteada indica el límite normativo de 65 dB.

require(boxplotdbl)
require(ggplot2)
ggplot(datos, aes(x= Zona, y= dB, fill= Zona)) +
  geom_boxplot(alpha= 0.6,
               outlier.shape= 21,
               outlier.size= 1.5,
               outlier.alpha= 0.4,
               outlier.fill= NA,
               linewidth= 0.7) +
  stat_summary(fun= mean,
               geom= "point",
               shape= 23, size = 4,
               fill= "white", color= "black") +
  geom_hline(yintercept= 65,
             linetype= "dashed",
             color= "red",
             linewidth= 1) +
  annotate("text", x= 3.45, y= 66.5,
           label= "Limite 65 dB",
           hjust= 1, size= 3.3, color= "red") +
  scale_fill_manual(values= pal_zona) +
  labs(title= "Distribucion del nivel de ruido por zona",
       subtitle= "Rombo blanco = media | Linea roja = limite normativo (65 dB)",
       x= NULL, y= "Nivel de ruido (dB)") +
  theme_minimal(base_size= 12) +theme(plot.title = element_text(hjust = 0.5),
      plot.subtitle = element_text(hjust = 0.5, size = 10, color = "gray50"))+
  theme(legend.position= "none",
        panel.grid.minor= element_blank(),
        axis.text.x= element_text(face= "bold", size= 11),
        plot.subtitle= element_text(size= 10, color= "gray50"))

A partir del boxplot se observan diferencias claras en la distribución del nivel de ruido entre las tres zonas (Central, Facultad de Ciencias y Estación Experimental), lo que permite evaluar las hipótesis planteadas.

En primer lugar, la hipótesis (H₀) se descarta porque las medianas (línea dentro de cada caja) no coinciden entre sí. La zona Central presenta una mediana considerablemente más alta (alrededor de 79–80 dB), mientras que la Facultad de Ciencias tiene una mediana intermedia (≈65–66 dB) y la Estación Experimental una mediana más baja (≈63–64 dB). Además, las cajas (rangos intercuartílicos) muestran poca superposición entre Central y las otras zonas, lo que indica diferencias sistemáticas en los niveles de ruido. Estas discrepancias visuales sugieren que los datos no provienen de poblaciones con la misma distribución central.

Por otro lado, la hipótesis (H₁) es consistente con el gráfico, ya que se evidencia una separación clara, especialmente entre la zona Central y las otras dos. La Central no solo tiene una mediana más alta, sino también una mayor dispersión, lo que refuerza la idea de que su comportamiento acústico es distinto. Incluso entre Facultad de Ciencias y Estación Experimental se aprecia una ligera diferencia en sus medianas.

4 Conclusiones

Los resultados muestran diferencias claras en los niveles de ruido entre las zonas del campus, donde cada una presenta condiciones acústicas diferenciadas.

La Zona Central se consolida como un punto crítico de contaminación sonora, no solo por superar ampliamente el límite normativo, sino por la alta frecuencia con la que se presentan estos excedentes, lo que sugiere una exposición continua a niveles perjudiciales.

En contraste, la Facultad de Ciencias se ubica en una condición intermedia, cercana al umbral permitido, pero con variaciones importantes que indican episodios ocasionales de ruido elevado, posiblemente asociados a actividades puntuales.

Por su parte, la Estación Experimental presenta un ambiente acústico estable y controlado, manteniéndose en general dentro de los niveles aceptables, lo que la convierte en la zona con mejores condiciones sonoras del campus.

5 Integrantes

  • Mariana de los Ángeles Lozano Díaz

  • Nathaly Montero Sánchez

  • Madeleine Montoya Rodallega