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"))

La línea de referencia normativa (65 dB) es superada en prácticamente la totalidad de las mediciones en la Zona Central (96.6%), en casi la mitad en Facultad de Ciencias, y en apenas un 13.5 % en la Estación Experimental.

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.
  • Nivel de significancia:α = 0.05

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"))

El rombo blanco indica la media aritmética. Las cruces fuera de los bigotes son valores atípicos.

4 Conclusiones

La Zona Central es la más ruidosa

Con una media de 79.4 dB, supera en 14.4 dB el límite normativo de 65 dB. El 96.6 % de sus mediciones están por encima del umbral permitido, configurando una situación de contaminación sonora sostenida.

Facultad de Ciencias en zona límite

La media de 65.8 dB se encuentra apenas 0.8 dB por encima del límite normativo. El 41.6 % de sus mediciones superan los 65 dB, con valores máximos puntuales de hasta 86 dB posiblemente asociados a eventos transitorios.

Estación Experimental cumple la norma

Con una media de 63.3 dB y una desviación estándar muy baja (±2.8 dB), esta zona presenta el ambiente acústico más controlado y homogéneo del campus, con solo un 13.5 % de excedencias puntuales.

5 Integrantes

  • Mariana de los Ángeles Lozano Díaz

  • Nathaly Montero Sánchez

  • Madeleine Montoya Rodallega