Para identificar las zonas donde es factible un cultivo próspero de caña de azúcar, se realiza un análisis de las condiciones climáticas, en particular de la temperatura y la precipitación, para asegurar que se encuentren dentro de los rangos óptimos para el crecimiento de la planta.
En este proceso, se cargaron archivos .tif, se identificaron los rangos climáticos adecuados, se discriminaron los países óptimos, y finalmente se localizaron regiones con condiciones climáticas similares a las del Valle del Cauca, una región donde el cultivo de caña de azúcar ha demostrado ser exitoso.
En esta etapa, se realiza la integración de datos climáticos a través de archivos en formato .tif, los cuales contienen información geoespacial detallada sobre temperatura y precipitación en distintas regiones. Estos archivos permiten visualizar y analizar las condiciones ambientales con alta precisión y a escala geográfica. La carga de archivos .tif es fundamental, ya que proporciona los datos necesarios para identificar zonas con características climáticas favorables para el cultivo de caña de azúcar.
temp_files <- list.files(path = ruta, pattern = "wc2.1_10m_tavg_\\d{2}\\.tif$", full.names = TRUE)
precip_files <- list.files(path = ruta, pattern = "wc2.1_10m_prec_\\d{2}\\.tif$", full.names = TRUE)
global_shape <- st_read(shapefile_path)## Reading layer `ne_10m_admin_0_countries' from data source
## `C:\Users\vicod\Documents\Maestria\mapas\shapefile countries\ne_10m_admin_0_countries.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 258 features and 168 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -180 ymin: -90 xmax: 180 ymax: 83.6341
## Geodetic CRS: WGS 84
Creación de Rasters a partir de Archivos .tif A partir de los archivos .tif cargados, se generan rasters, que son representaciones de datos espaciales en una cuadrícula de celdas o píxeles. Cada celda en el raster contiene valores específicos de variables climáticas, como temperatura y precipitación, correspondientes a un área geográfica particular. La creación de rasters permite analizar y comparar estas variables de manera continua y detallada en el territorio.
Una vez cargados los archivos raster, se procede a graficar los datos correspondientes a uno de los meses disponibles. Esta visualización permite verificar los rangos de escala de las variables climáticas contenidas en el mapa, como temperatura y precipitación, para asegurarse de que se ajusten a los valores esperados.
Definición de Rangos Climáticos Óptimos para el Cultivo de Caña de Azúcar
En esta fase, se establecen los rangos climáticos ideales de temperatura y precipitación necesarios para que el cultivo de caña de azúcar prospere. A partir de estudios agronómicos, se ha determinado que la caña de azúcar presenta un crecimiento óptimo en temperaturas entre 22.5°C y 28°C y en zonas con una precipitación mensual entre 125 mm y 290 mm en promedio.
El primer mapa presentado muestra la capa binaria de los puntos óptimos según los rangos de temperatura para el mes de octubre.
El segundo mapa presentado muestra la capa binaria de los puntos óptimos según los rangos de precipitación para el mes de noviembre.
Finalmente, se presenta el mapa que combina todos las dos condicones (temperatura y precipitación) mediante una compuerta AND, lo cual garantiza que ambas se cumplan identificando los territorios óptimos para el cultivo de caña de azúcar.
En este punto, se realiza la suma de los valores binarios (1 y 0) para identificar, a lo largo del año, cuáles territorios presentan una mayor cantidad de meses óptimos para el cultivo de caña de azúcar. Los colores cálidos, como el rojo y el amarillo, indican las áreas más favorables, mientras que los colores fríos, como el verde y el azul, representan zonas menos óptimas.
optimo_suma <- sum(optimo, na.rm = TRUE)
colores <- colorRampPalette(c("blue", "green", "yellow", "red"))(13)
plot(optimo_suma, main="Número de Meses con Condiciones Óptimas para Caña de Azúcar", col=colores, breaks=0:12)Para identificar los países que cuentan con las condiciones adecuadas para el cultivo de caña de azúcar, es necesario cargar un archivo shapefile y aplicarlo como una máscara sobre el mapa previamente creado. Esto permite delimitar las áreas de interés y asociar las condiciones climáticas óptimas con los países correspondientes.
Se carga el archivo y se verifica que contenga la información requerida.
A continuacion se verifica si el sistema de coordenadas del archivo shapefile (global_shape) coincide con el del raster de temperatura (temp_stack). Si no coinciden, el archivo shapefile se transforma al sistema de coordenadas del raster utilizando la función st_transform(). Esto asegura que ambos conjuntos de datos tengan el mismo sistema de referencia espacial para permitir su análisis conjunto.
if (!st_crs(global_shape) == crs(temp_stack)) {
global_shape <- st_transform(global_shape, crs(temp_stack))
}A continuación, se aplica la máscara sobre el archivo shapefile para identificar los países que cumplen con las condiciones climáticas óptimas para el cultivo de caña de azúcar. Se destacan especialmente cuatro países, que se seleccionan para su análisis más detallado. Estos países serán graficados de manera independiente más adelante, lo que permitirá visualizarlos y analizar las zonas óptimas en cada uno, facilitando la comparación de sus condiciones climáticas.
paises_seleccionados <- global_shape
optimo_mascara <- crop(optimo_suma, vect(paises_seleccionados))
plot(optimo_mascara,
main="Áreas Óptimas para Cultivo de Caña de Azúcar por pais",
col=colores,
breaks=0:12)
plot(st_geometry(paises_seleccionados), add=TRUE, border="black", lwd=1)Se seleccionan Brasil, Perú y Colombia como países de interés. Luego, se filtran estos países del shapefile (global_shape) y se convierten a un objeto sf. Posteriormente, se aplica una máscara al mapa de condiciones óptimas (optimo_mascara) para aislar las áreas de estos países utilizando las funciones crop() y mask().
paises_seleccionados <- global_shape %>%
filter(NAME %in% paises_interes)
paises_seleccionados_sf <- st_as_sf(paises_seleccionados)
optimo_crop <- crop(optimo_mascara, vect(paises_seleccionados))
optimo_mascara_paises <- mask(optimo_crop, vect(paises_seleccionados))
optimo_df <- as.data.frame(optimo_mascara_paises, xy = TRUE, na.rm = TRUE)
names(optimo_df)[3] <- "layer" ggplot() +
geom_raster(data = optimo_df, aes(x = x, y = y, fill = layer)) +
geom_sf(data = paises_seleccionados_sf, fill = NA, color = "black") +
scale_fill_gradientn(colors = colores, na.value = "transparent", name = "Meses Óptimos") +
labs(title = "Áreas Óptimas para Cultivo de Caña de Azúcar en Países Seleccionados") +
theme_minimal() +
theme(
legend.position = "right",
plot.title = element_text(hjust = 0.5)
)Posteriormente, se realiza el mismo procedimiento para la República Democrática del Congo, la cual también muestra valores prometedores.
paises_interes <- c("Dem. Rep. Congo")
paises_seleccionados <- global_shape %>%
filter(NAME %in% paises_interes)
paises_seleccionados_sf <- st_as_sf(paises_seleccionados)
optimo_crop <- crop(optimo_mascara, vect(paises_seleccionados))
optimo_mascara_paises <- mask(optimo_crop, vect(paises_seleccionados))
optimo_df <- as.data.frame(optimo_mascara_paises, xy = TRUE, na.rm = TRUE)
names(optimo_df)[3] <- "layer"ggplot() +
geom_raster(data = optimo_df, aes(x = x, y = y, fill = layer)) +
geom_sf(data = paises_seleccionados_sf, fill = NA, color = "black") +
scale_fill_gradientn(colors = colores, na.value = "transparent", name = "Meses Óptimos") +
labs(title = "Áreas Óptimas para Cultivo de Caña de Azúcar en Países Seleccionados") +
theme_minimal() +
theme(
legend.position = "right",
plot.title = element_text(hjust = 0.5)
)Como siguiente ejercicio, se seleccionan tres puntos al azar en la región del Valle del Cauca, representados por las siguientes coordenadas. Luego, se realizan series de tiempo para identificar los cambios en temperatura y precipitación de estos puntos a lo largo del año:
#3.717613735446518, -76.40034096776617
#4.001345464494109, -76.16666318823805
#4.513056324179002, -75.97392524841074
puntos_valle_cauca <- data.frame(
id = c("Punto 1", "Punto 2", "Punto 3"),
lon = c(-76.40034096776617, -76.16666318823805, -75.97392524841074),
lat = c(3.717613735446518, 4.001345464494109, 4.513056324179002)
)puntos_sf <- vect(puntos_valle_cauca, geom = c("lon", "lat"), crs = crs(temp_stack))
temp_values <- terra::extract(temp_stack, puntos_sf, ID = TRUE)
precip_values <- terra::extract(precip_stack, puntos_sf, ID = TRUE)
#cambio de nombres
colnames(temp_values) <- c("ID", paste0("Temp_Mes_", 1:12))
colnames(precip_values) <- c("ID", paste0("Prec_Mes_", 1:12))
#combinacion de temperatura y precip
clima_data <- cbind(puntos_valle_cauca, temp_values[,-1], precip_values[,-1])
# formato long
temp_long <- clima_data %>%
select(id, starts_with("Temp")) %>%
pivot_longer(
cols = starts_with("Temp"),
names_to = "Mes",
values_to = "Temperatura"
) %>%
mutate(Mes = as.numeric(gsub("Temp_Mes_", "", Mes)))
# Convertir datos de precipitación a formato largo
precip_long <- clima_data %>%
select(id, starts_with("Prec")) %>%
pivot_longer(
cols = starts_with("Prec"),
names_to = "Mes",
values_to = "Precipitacion"
) %>%
mutate(Mes = as.numeric(gsub("Prec_Mes_", "", Mes)))La serie de tiempo para la temperatura se presenta en el siguiente gráfico, donde se pueden observar algunas variaciones para cada punto elegido.
# series de temperatura
ggplot(temp_long, aes(x = Mes, y = Temperatura, color = id)) +
geom_line(size = 1) +
geom_point() +
labs(
title = "Serie de Tiempo de Temperatura en Puntos Seleccionados",
x = "Mes",
y = "Temperatura (°C)",
color = "Punto"
) +
theme_minimal()Por otro lado, los valores de precipitación no varían tanto entre los puntos seleccionados.
# Graficar series de precipitación
ggplot(precip_long, aes(x = Mes, y = Precipitacion, color = id)) +
geom_line(size = 1) +
geom_point() +
labs(
title = "Serie de Tiempo de Precipitación en Puntos Seleccionados",
x = "Mes",
y = "Precipitación (mm)",
color = "Punto"
) +
theme_minimal()Ahora se realiza, se realiza un análisis de las distancias euclidianas para identificar la similitud climática entre diferentes ubicaciones.
Normalización de Datos: Primero, se normalizan
los datos de temperatura (temp_stack) y precipitación
(precip_stack) usando la función scale(), lo
que ajusta estos datos para que tengan una media de 0 y una desviación
estándar de 1.
Cálculo de Promedios Anuales: Luego, se calculan
los promedios anuales de temperatura y precipitación para cada punto en
clima_data, utilizando las columnas correspondientes de 4 a
15 para la temperatura y de 16 a 27 para la precipitación.
Normalización de los Promedios Anuales: Los
promedios anuales de temperatura y precipitación se normalizan de la
misma forma que los datos originales, usando
scale().
Cálculo de la Distancia Euclidiana: Se calcula
la distancia euclidiana entre cada punto del clima
(Temp_Anual_Norm y Prec_Anual_Norm) y cada
celda del raster normalizado de temperatura y precipitación. Para cada
punto en clima_data, se calculan las diferencias cuadradas
entre los valores normalizados y luego se suman para obtener la
distancia euclidiana.
Generación de Mapas de Similitud: Para cada
punto, se guarda la distancia euclidiana en una lista llamada
similarity_maps, que contiene los mapas de similitud para
cada ubicación.
Escala de Colores: Finalmente, se define una
escala de colores que va de azul a rojo usando
colorRampPalette(), lo que permite representar visualmente
las diferencias en las distancias euclidianas en los mapas de
similitud.
Este proceso permite visualizar y comparar las distancias climáticas entre las ubicaciones seleccionadas y las áreas del raster, facilitando la identificación de regiones con características climáticas similares.
temp_stack_norm <- scale(temp_stack)
precip_stack_norm <- scale(precip_stack)
# promedios anuales
clima_data$Temp_Anual <- rowMeans(clima_data[, 4:15], na.rm = TRUE)
clima_data$Prec_Anual <- rowMeans(clima_data[, 16:27], na.rm = TRUE)
# Normalizar promedios
clima_data$Temp_Anual_Norm <- scale(clima_data$Temp_Anual)
clima_data$Prec_Anual_Norm <- scale(clima_data$Prec_Anual)
# distancias euclidianas
similarity_maps <- list()
for (i in 1:nrow(clima_data)) {
temp_site_norm <- clima_data$Temp_Anual_Norm[i]
precip_site_norm <- clima_data$Prec_Anual_Norm[i]
temp_diff <- (temp_stack_norm - temp_site_norm)^2
precip_diff <- (precip_stack_norm - precip_site_norm)^2
euclidean_distance <- sqrt(temp_diff + precip_diff)
similarity_maps[[i]] <- euclidean_distance
}
colores <- colorRampPalette(c("blue", "green", "yellow", "red"))(50) # Escala de coloresA continuación, se presenta el mapa con las distancias euclidianas para cada uno de los meses, mostrando qué regiones se parecen más o menos en relación con cada uno de los tres puntos seleccionados al azar.
Al agrupar los datos de todos los meses, se observa que,
paradójicamente, los puntos seleccionados no muestran similitud con las
áreas identificadas como óptimas en cuanto a las condiciones de
climaticas. Esto puede deberse a factores climáticos específicos de los
puntos seleccionados, como microclimas o variaciones estacionales que
afectan la estabilidad de las condiciones climáticas en dichas áreas.
Otra posible causa es el tipo de distancia calculada: la distancia
euclidiana considera únicamente la magnitud de las diferencias en
temperatura y precipitación, sin tener en cuenta posibles variaciones no
lineales o patrones de estacionalidad que podrían influir en la
similitud climática real.
Además, el cálculo basado en promedios anuales puede no captar fluctuaciones o anomalías de corto plazo en los puntos de interés, lo que también afecta la comparación con áreas óptimas identificadas para el cultivo.
plot(app(similarity_maps[[1]], sum, na.rm = TRUE),
main = paste("Mapa de Similaridad -", clima_data$id[1]),
col = colores,
legend.args = list(text = "Distancia Euclidiana", side = 3, line = 1))plot(app(similarity_maps[[2]], sum, na.rm = TRUE),
main = paste("Mapa de Similaridad -", clima_data$id[2]),
col = colores,
legend.args = list(text = "Distancia Euclidiana", side = 3, line = 1))plot(app(similarity_maps[[3]], sum, na.rm = TRUE),
main = paste("Mapa de Similaridad -", clima_data$id[3]),
col = colores,
legend.args = list(text = "Distancia Euclidiana", side = 3, line = 1))A lo largo del análisis, se destaca la importancia de seleccionar cuidadosamente tanto los puntos de comparación como los métodos para medir la similitud climática. Los resultados muestran que, aunque se identificaron ciertas áreas con condiciones climáticas óptimas para el cultivo de caña de azúcar, la elección de puntos de referencia aleatorios puede no reflejar completamente las características de esas zonas ideales. Este hecho subraya la necesidad de definir con precisión los puntos de comparación, preferiblemente en regiones con datos sólidos y representativos de las condiciones climáticas que se desean replicar o analizar.
Asimismo, es fundamental evaluar diferentes tipos de métricas de distancia, más allá de la distancia euclidiana, para capturar patrones no lineales y variaciones estacionales que puedan afectar la similitud climática real entre regiones. En algunos casos, utilizar métricas adicionales, como la distancia de Mahalanobis o métodos basados en correlaciones temporales, podría proporcionar una visión más precisa y ajustada a las características propias de cada área.
En conclusión, para obtener resultados más confiables en la identificación de zonas climáticamente similares, es esencial contar con puntos de comparación bien definidos y explorar varias métricas de distancia. Esto permitirá una evaluación más exhaustiva de las condiciones climáticas óptimas y aumentará la precisión en la identificación de áreas viables para el cultivo.