Preguntas

    1. Utilizando los datos de clima de línea base a nivel global, genere un código en R que permita construir mapas de aptitud en términos climáticos para la caña de azúcar (con base en los rangos óptimos). Grafique los mapas con una escala de colores adecuada.
    1. Identifique 2 o 3 países con áreas de alto potencial para la caña de azúcar y realice un corte para estas zonas con el shape global. Grafique los mapas con una escala de colores adecuada.
    1. Identificar algunos puntos (2 o 3) al azar en la región del valle del cauca (use google maps) y extraer la información de clima. Grafique las series de tiempo de temperatura y precipitación.
    1. Por medio de alguna métrica de similaridad (ejemplo: distancia euclidiana) genere un código en R que permita identificar mapas de similaridad a nivel global para los sitios identificados en 3. Grafique los mapas con una escala de colores adecuada.
    1. Compare los mapas generados por ambas aproximaciones y concluya.

1. Entendimiento de los datos (Análisis exploratorio y preparación de datos).

1.1 Carga de Librerias

De acuerdo con la necesidad de análisis de información, se procede a cargar las siguientes librerias

library(sf)
library(terra)
library(readxl)
library(dplyr)
library(ggplot2)
library(janitor)
library(dplyr)
library(kableExtra)
library(formattable)

1.2 Importar BD y entendimiento de los datos

Con las librerias geodata y terra, procedemos a trabajar la información global que se necesita para conocer. Primero se recopilaron los datos mundiales de precipitación mensual y, posteriormente, los datos globales de temperatura mensual. Considerando que las condiciones ideales para el cultivo de caña de azúcar corresponden a una precipitación anual entre 1500 y 2500 mm y una temperatura entre 20 °C y 35 °C, se elaboró un mapa global promedio de aptitud climática para este cultivo. Además, se generaron doce mapas mundiales mensuales que identifican las zonas que cumplen simultáneamente con los rangos óptimos de precipitación y temperatura.

library(geodata)
library(terra)

# Descargar datos globales
temperatura_global <- worldclim_global(var = "tavg", res = 5, path = "Datos", version = 2.1)
precipitacion_global <- worldclim_global(var = "prec", res = 5, path = "Datos", version = 2.1)

# Calcular temperatura media anual y precipitación total anual
temp_media <- mean(temperatura_global)
prec_media <- sum(precipitacion_global)

# Definir rangos aptos para temperatura y precipitación
rango_t_apto <- (temp_media >= 22.5) & (temp_media <= 28)
rango_p_apto <- (prec_media >= 1500) & (prec_media <= 3500)


# Paleta de 7 colores para temperatura
my_palette_t <- colorRampPalette(c(
  "#313695",  # azul oscuro
  "#4575B4",  # azul
  "#74ADD1",  # azul claro
  "#ABDDA4",  # verde claro
  "#FFFFBF",  # amarillo
  "#FDAE61",  # naranja
  "#D73027"   # rojo
))

plot(
  temp_media,
  col = my_palette_t(100),
  main = "Temperatura media anual (°C)",
  legend.args = list(
    text = '°C',
    side = 4,
    font = 2,
    line = 2.5,
    cex = 0.8
  )
)

1) Utilizando los datos de clima de línea base a nivel global, genere un código en R que permita construir mapas de aptitud en términos climáticos para la caña de azúcar (con base en los rangos óptimos). Grafique los mapas con una escala de colores adecuada.

Los mapas de temperatura media anual y precipitación acumulada evidencian que las zonas más favorables para el cultivo de caña de azúcar se concentran principalmente en áreas con temperaturas entre 22,5 °C y 28 °C, y precipitaciones anuales de 1500 a 3500 mm. Estas condiciones climáticas favorecen el crecimiento y la productividad del cultivo. Las áreas aptas identificadas corresponden, en su mayoría, a regiones tropicales y subtropicales, donde existe un alto potencial para el desarrollo agrícola. Además, el uso de paletas de colores en los mapas permite reconocer fácilmente estas zonas, lo que contribuye a la planificación agrícola y al análisis del potencial productivo a escala global.

# Abrir dispositivo gráfico
dev.new()

# Graficar áreas aptas
plot(
  rango_t_apto,
  col = c("lightgrey", "forestgreen"),
  type = "classes",
  main = "Areas aptas por temperatura",
  plg = list(
    title = "Clasificacion",
    legend = c("No apto", "Apto"),
    x = "topright",
    cex = 0.8
  )
)
## Warning in .as.raster.classes(out, x): NAs introducidos por coerción
## Warning in min(diff(sort(levs))): ningún argumento finito para min; retornando
## Inf
# los mapas con precipitacion optima
prec_year_opt=rango_p_apto

# los mapas con temperatura optima
temp_year_opt=rango_t_apto

# condiciones optimas
aptitud_cana = temp_year_opt & prec_year_opt

2) Identifique 2 o 3 países con áreas de alto potencial para la caña de azúcar y realice un corte para estas zonas con el shape global. Grafique los mapas con una escala de colores adecuada.

# 1. Descargar shape global de países
paises <- world(path = "Datos")

# 2. Seleccionar países con alto potencial para caña de azúcar
# Puedes ajustar estos países según el resultado visual de tu mapa global
paises_cana <- paises[paises$NAME_0 %in% c("Brazil", "India", "Thailand"), ]

# 3. Recortar y enmascarar aptitud para estos países
aptitud_cana_paises <- crop(aptitud_cana, paises_cana)
aptitud_cana_paises <- mask(aptitud_cana_paises, paises_cana)

# 4. Graficar mapa
plot(
  aptitud_cana_paises,
  col = c("lightgrey", "forestgreen"),
  type = "classes",
  main = "Areas con alto potencial para cana de azucar",
  plg = list(
    title = "Aptitud",
    legend = c("No apto", "Apto"),
    x = "topright",
    cex = 0.8
  )
)
## Warning in .as.raster.classes(out, x): NAs introducidos por coerción
## Warning in min(diff(sort(levs))): ningún argumento finito para min; retornando
## Inf
# Agregar bordes de países
lines(paises_cana, col = "black", lwd = 1)

paises_seleccionados <- c("Brazil", "Thailand", "India")

for (pais in paises_seleccionados) {
  
  pais_shape <- paises[paises$NAME_0 == pais, ]
  
  aptitud_pais <- crop(aptitud_cana, pais_shape)
  aptitud_pais <- mask(aptitud_pais, pais_shape)
  
  plot(
    aptitud_pais,
    col = c("lightgrey", "forestgreen"),
    type = "classes",
    main = paste("Potencial para cana de azucar -", pais),
    plg = list(
      title = "Aptitud",
      legend = c("No apto", "Apto"),
      x = "topright",
      cex = 0.8
    )
  )
  
  lines(pais_shape, col = "black", lwd = 1)
}

En los tres países seleccionados —Brasil, India y Tailandia— y representados a partir del mapa global, se evidencia que algunas regiones de sus territorios cumplen durante todo el año con las condiciones climáticas óptimas para el cultivo de caña de azúcar. Esto se relaciona con su importancia en la producción mundial de este cultivo, ya que Brasil se destaca como uno de los principales productores, seguido por India y Tailandia, países que también poseen una industria cañera relevante. En general, la presencia de temperaturas adecuadas y niveles favorables de precipitación permite identificar zonas con alto potencial agrícola. Por lo tanto, los mapas elaborados confirman que estos países presentan condiciones propicias para el desarrollo del cultivo de caña de azúcar.

3) Identificar algunos puntos (2 o 3) al azar en la región del valle del cauca (use google maps) y extraer la información de clima. Grafique las series de tiempo de temperatura y precipitación.

library(terra)
library(geodata)
library(dplyr)
library(ggplot2)
library(tidyr)

# 1. Descargar datos WorldClim
temperatura <- worldclim_global(
  var = "tavg",
  res = 5,
  path = "Datos",
  version = 2.1
)

precipitacion <- worldclim_global(
  var = "prec",
  res = 5,
  path = "Datos",
  version = 2.1
)

# 2. Crear puntos de interés: Palmira, Tulua y Buga
puntos <- data.frame(
  municipio = c("Palmira", "Tulua", "Buga"),
  lon = c(-76.3036, -76.1954, -76.2978),
  lat = c(3.5394, 4.0847, 3.9009)
)

puntos_vect <- vect(
  puntos,
  geom = c("lon", "lat"),
  crs = "EPSG:4326"
)

# 3. Extraer información climática
temp_extraida <- terra::extract(temperatura, puntos_vect)
prec_extraida <- terra::extract(precipitacion, puntos_vect)

# 4. Organizar temperatura
temp_df <- temp_extraida %>%
  select(-ID) %>%
  mutate(municipio = puntos$municipio) %>%
  pivot_longer(
    cols = -municipio,
    names_to = "mes",
    values_to = "temperatura"
  ) %>%
  group_by(municipio) %>%
  mutate(mes_num = row_number()) %>%
  ungroup()

# 5. Organizar precipitación
prec_df <- prec_extraida %>%
  select(-ID) %>%
  mutate(municipio = puntos$municipio) %>%
  pivot_longer(
    cols = -municipio,
    names_to = "mes",
    values_to = "precipitacion"
  ) %>%
  group_by(municipio) %>%
  mutate(mes_num = row_number()) %>%
  ungroup()

# 6. Etiquetas de meses
meses <- c(
  "Ene", "Feb", "Mar", "Abr", "May", "Jun",
  "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"
)

temp_df$mes <- factor(meses[temp_df$mes_num], levels = meses)
prec_df$mes <- factor(meses[prec_df$mes_num], levels = meses)

# 7. Grafico temperatura
ggplot(temp_df, aes(x = mes, y = temperatura, group = municipio, color = municipio)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  labs(
    title = "Serie mensual de temperatura media",
    subtitle = "Palmira, Tulua y Buga",
    x = "Mes",
    y = "Temperatura media (C)",
    color = "Municipio"
  ) +
  theme_minimal()

# 8. Grafico precipitacion
ggplot(prec_df, aes(x = mes, y = precipitacion, group = municipio, color = municipio)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  labs(
    title = "Serie mensual de precipitacion",
    subtitle = "Palmira, Tulua y Buga",
    x = "Mes",
    y = "Precipitacion mensual (mm)",
    color = "Municipio"
  ) +
  theme_minimal()

La serie temporal evidencia un comportamiento relativamente estable de la temperatura media mensual en Palmira, Tulua y Buga, característico de climas tropicales. Tuluá presenta las temperaturas más altas durante la mayor parte del año, seguida por Palmira y finalmente Buga, que registra los valores más bajos del grupo.

Asimismo, se observa una disminución general de la temperatura entre octubre y noviembre en los tres municipios, posiblemente asociada a periodos de mayor nubosidad y precipitación. En términos generales, las condiciones térmicas observadas son favorables para el desarrollo del cultivo de caña de azúcar en estas zonas del Valle del Cauca.

library(terra)
library(geodata)

# 1. Shape de países
paises <- world(path = "Datos")

# 2. Seleccionar Colombia
colombia <- paises[paises$NAME_0 == "Colombia", ]

# 3. Crear raster de aptitud
aptitud_cana <- rango_t_apto & rango_p_apto
aptitud_cana <- as.numeric(aptitud_cana)

# 4. Recortar y enmascarar solo Colombia
aptitud_colombia <- crop(aptitud_cana, colombia)
aptitud_colombia <- mask(aptitud_colombia, colombia)

# 5. Puntos: Palmira, Tulua y Buga
municipios <- data.frame(
  municipio = c("Palmira", "Tulua", "Buga"),
  lon = c(-76.3036, -76.1954, -76.2978),
  lat = c(3.5394, 4.0847, 3.9009)
)

municipios_vect <- vect(
  municipios,
  geom = c("lon", "lat"),
  crs = "EPSG:4326"
)

# 6. Mapa
plot(
  aptitud_colombia,
  col = c("lightgrey", "forestgreen"),
  type = "classes",
  main = "Aptitud para cana de azucar en Colombia",
  plg = list(
    title = "Aptitud",
    legend = c("No apto", "Apto"),
    x = "bottomleft",
    cex = 0.8
  )
)

# Bordes de Colombia
lines(colombia, col = "black", lwd = 1)

# Agregar municipios
points(
  municipios_vect,
  pch = 21,
  bg = "red",
  col = "black",
  cex = 1.3
)

# Etiquetas
text(
  x = municipios$lon,
  y = municipios$lat,
  labels = municipios$municipio,
  pos = 4,
  cex = 0.8,
  col = "black"
)

4) Por medio de alguna métrica de similaridad (ejemplo: distancia euclidiana) genere un código en R que permita identificar mapas de similaridad a nivel global para los sitios identificados en 3. Grafique los mapas con una escala de colores adecuada.

library(terra)
library(geodata)

# 1. Descargar datos climáticos
temperatura <- worldclim_global(var = "tavg", res = 5, path = "Datos", version = 2.1)
precipitacion <- worldclim_global(var = "prec", res = 5, path = "Datos", version = 2.1)

# 2. Unir variables climáticas
clima_global <- c(temperatura, precipitacion)

# 3. Puntos de análisis
puntos <- data.frame(
  municipio = c("Palmira", "Tulua", "Buga"),
  lon = c(-76.3036, -76.1954, -76.2978),
  lat = c(3.5394, 4.0847, 3.9009)
)

puntos_vect <- vect(puntos, geom = c("lon", "lat"), crs = "EPSG:4326")

# 4. Extraer clima de los puntos
clima_puntos <- terra::extract(clima_global, puntos_vect)[, -1]

# 5. Estandarizar clima global
media_global <- global(clima_global, "mean", na.rm = TRUE)[, 1]
sd_global <- global(clima_global, "sd", na.rm = TRUE)[, 1]

clima_global_std <- (clima_global - media_global) / sd_global
## |---------|---------|---------|---------|=========================================                                          |---------|---------|---------|---------|=========================================                                          
# 6. Estandarizar puntos
clima_puntos_std <- sweep(clima_puntos, 2, media_global, "-")
clima_puntos_std <- sweep(clima_puntos_std, 2, sd_global, "/")

# 7. Función de distancia euclidiana
calcular_distancia <- function(raster_std, vector_punto_std) {
  diferencia <- raster_std - as.numeric(vector_punto_std)
  sqrt(sum(diferencia^2))
}

# 8. Mapas de similaridad
dist_palmira <- calcular_distancia(clima_global_std, clima_puntos_std[1, ])
## |---------|---------|---------|---------|=========================================                                          |---------|---------|---------|---------|=========================================                                          |---------|---------|---------|---------|=========================================                                          
dist_tulua   <- calcular_distancia(clima_global_std, clima_puntos_std[2, ])
## |---------|---------|---------|---------|=========================================                                          |---------|---------|---------|---------|=========================================                                          |---------|---------|---------|---------|=========================================                                          
dist_buga    <- calcular_distancia(clima_global_std, clima_puntos_std[3, ])
## |---------|---------|---------|---------|=========================================                                          |---------|---------|---------|---------|=========================================                                          |---------|---------|---------|---------|=========================================                                          
sim_palmira <- 1 / (1 + dist_palmira)
sim_tulua   <- 1 / (1 + dist_tulua)
sim_buga    <- 1 / (1 + dist_buga)

# 9. Shape Valle del Cauca
deptos_col <- gadm(country = "COL", level = 1, path = "Datos")
valle <- deptos_col[deptos_col$NAME_1 == "Valle del Cauca", ]

# 10. Recortar al Valle del Cauca
sim_palmira_valle <- mask(crop(sim_palmira, valle), valle)
sim_tulua_valle   <- mask(crop(sim_tulua, valle), valle)
sim_buga_valle    <- mask(crop(sim_buga, valle), valle)

# 11. Paleta
pal_sim <- colorRampPalette(c(
  "#F7FBFF",
  "#C6DBEF",
  "#6BAED6",
  "#2171B5",
  "#08306B"
))

# 12. Graficar Palmira
plot(
  sim_palmira_valle,
  col = pal_sim(100),
  main = "Similaridad climatica con Palmira - Valle del Cauca"
)
lines(valle, col = "black", lwd = 1)
points(puntos_vect[1, ], pch = 21, bg = "red", col = "black", cex = 1.4)

# 13. Graficar Tulua
plot(
  sim_tulua_valle,
  col = pal_sim(100),
  main = "Similaridad climatica con Tulua - Valle del Cauca"
)
lines(valle, col = "black", lwd = 1)
points(puntos_vect[2, ], pch = 21, bg = "red", col = "black", cex = 1.4)

# 14. Graficar Buga
plot(
  sim_buga_valle,
  col = pal_sim(100),
  main = "Similaridad climatica con Buga - Valle del Cauca"
)
lines(valle, col = "black", lwd = 1)
points(puntos_vect[3, ], pch = 21, bg = "red", col = "black", cex = 1.4)

Los mapas de similaridad climática permiten identificar zonas del Valle del Cauca con condiciones ambientales semejantes a las observadas en Palmira, Tulua y Buga. Para ello, se utilizó una métrica de distancia euclidiana aplicada sobre variables mensuales de temperatura y precipitación previamente estandarizadas, permitiendo comparar el comportamiento climático entre diferentes regiones.

Los resultados evidencian que gran parte del Valle del Cauca presenta altos niveles de similaridad climática con los municipios analizados, especialmente en las zonas planas y cálidas del departamento. Esto confirma que la región posee condiciones agroclimáticas favorables para el cultivo de caña de azúcar, particularmente en términos de estabilidad térmica y disponibilidad de precipitación a lo largo del año.

5) Compare los mapas generados por ambas aproximaciones y concluya.

Los mapas obtenidos mediante la aproximación basada en rangos climáticos permitieron identificar de manera general las zonas aptas para el cultivo de caña de azúcar a partir de umbrales específicos de temperatura y precipitación. Esta metodología resulta útil para reconocer áreas potencialmente favorables bajo criterios climáticos definidos, mostrando principalmente las regiones cálidas y húmedas del Valle del Cauca como zonas aptas para el desarrollo del cultivo.

Por otro lado, los mapas de similaridad climática proporcionan un análisis más detallado, ya que comparan el comportamiento climático completo de Palmira, Tuluá y Buga frente al resto del territorio utilizando distancia euclidiana. Esta aproximación no solo considera rangos de aptitud, sino también patrones mensuales de variabilidad climática, permitiendo identificar regiones con condiciones ambientales más similares a los municipios analizados. En consecuencia, los mapas de similaridad ofrecen una representación más precisa y robusta para evaluar potencial agroclimático, mientras que los mapas por umbrales funcionan como una herramienta exploratoria inicial más sencilla de interpretar.