
Bajar las diecinueve variables bioclimáticas de WorldClim toma cinco minutos; conseguir que Maxent las acepte sin escupir un error de extensión puede tomarte una tarde entera de nada. Ese contraste es lo primero que descubre cualquiera que empieza a hacer modelado de nicho con Maxent en R: las capas se ven perfectamente alineadas en el mapa, pero para el algoritmo un desfase de un solo píxel entre dos rasters las vuelve archivos incompatibles. Antes de llegar a este punto probé de todo un poco, seguí un tutorial de Python que daba por hecho que yo ya sabía programar, y me quedé estancada en la primera línea, así que cuando finalmente aterricé en R para hacer teledetección desde el sur de Chile, decidí ir despacio y anotar cada paso que me costaba. Lo que sigue es justamente eso: cómo dejar tus variables bioclimáticas listas para Maxent sin que la proyección te haga perder la tarde.
La respuesta corta, si vienes apurada, es esta: todas tus capas, las de WorldClim y las tuyas propias, necesitan compartir extensión, resolución y el mismo Código EPSG para WGS84 antes de pensar siquiera en correr el modelo, y el orden en que arreglas eso importa tanto como el resultado. Cómo corregir una proyección que viene torcida desde el origen merece su propio artículo aparte, así que aquí me concentro en lo que pasa después: por qué las capas fallan aunque se vean iguales, y qué hacer para que dejen de fallar.
Por qué Maxent rechaza capas que en el mapa se ven idénticas
Las WorldClim vienen a 30 segundos de arco, que en términos prácticos equivale a más o menos 1 km por píxel en el ecuador -- ese dato no significa nada hasta que empiezas a cruzar esas capas con datos tuyos, tomados en otra escala. Ahí aparece el mensaje que cualquiera que use Maxent en R termina viendo tarde o temprano: rasters have different extents. R no está siendo tiquismiquis porque sí. Maxent necesita que cada celda de cada capa corresponda exactamente a la misma celda en todas las demás, como si fuera una grilla de cuaderno cuadriculado donde ninguna línea puede quedar corrida ni un tantito.
Un desfase de 0.00001 en la extensión, algo invisible a simple vista en el mapa, basta para que el ajuste falle por completo. Yo probé primero con la función crop(), pensando que cortar el cuadrado de mi zona de estudio ya resolvía el problema, pero crop() solo garantiza que el área coincida a grandes rasgos -- no que las celdas calcen una por una. Ese es el error más común, y también el más fácil de arrastrar sin darse cuenta hasta que el modelo ya falló.

El orden que evita el sesgo de interpolación al remuestrear
Acá está lo que casi ningún tutorial rápido menciona: el orden en que remuestreas y recortas cambia el resultado, no solo el tiempo que te toma. La tentación es dejar todo en la resolución más fina hasta el final y recién ahí forzar el reescalado al tamaño del raster más grueso, justo antes de cortar -- pero eso introduce un sesgo de interpolación que después es casi imposible de rastrear en el mapa de idoneidad final.
La regla práctica es la contraria: si tienes una capa de elevación muy detallada y las bioclimáticas a 1 km, remuestrea primero la capa fina a la resolución gruesa (o al revés, según lo que tu estudio necesite), y solo después recorta todo al mismo extent. Hacerlo al revés no ahorra tiempo real -- solo mueve el problema más adelante, donde cuesta más caro detectarlo.
Arma una capa maestra antes de tocar resample()
Lo que a mí me funcionó fue crear lo que llamo una capa maestra: eliges una sola capa, la que tenga la extensión y resolución que quieres que tengan todas las demás, y la usas como molde. El paquete terra (más rápido que el viejo raster cuando trabajas con las diecinueve bioclimáticas a la vez) tiene la función resample(), y ahí es donde de verdad se ordenan los píxeles: resample(capa_problema, capa_maestra, method='bilinear') fuerza a cualquier capa a adoptar exactamente la grilla de la maestra, decimales incluidos.
El método bilinear tiene sentido para variables continuas como temperatura o precipitación, que es justo lo que son casi todas las bioclimáticas; si alguna vez remuestreas una capa categórica -- tipos de suelo, por ejemplo -- ahí el método cambia, porque promediar categorías no tiene ningún sentido. Se lo expliqué una tarde a Boris, el vecino de mi edificio que trabaja en servidores y no tiene idea de sistemas de información geográfica pero le interesa el software libre, cuando me preguntó por qué no bastaba con que las capas "se vieran iguales" en la pantalla -- y tener que ponerlo en palabras para alguien que parte de cero me obligó a entender mejor por qué el método de remuestreo no es un detalle menor.

Cinco puntos para revisar antes de correr tu modelo de nicho en Maxent
Antes de darle play a Maxent, reviso siempre lo mismo: que todas las capas compartan el mismo sistema de referencia, que la extensión sea idéntica hasta varios decimales y no solo "parecida", que la resolución sea una sola para todo el stack, que el manejo de valores nulos sea consistente entre capas -- una celda sin dato en una variable y con dato en otra genera huecos silenciosos en el mapa final -- y que, al apilarlas todas en un solo SpatRaster, R no tire ningún error de dimensión antes de exportar a Maxent. Si los cinco puntos calzan, lo que sigue ya es una ejecución más bien aburrida, que es exactamente lo que uno quiere de un modelo.
El primer mapa sin corrimientos me sorprendió más que cualquier fórmula
Fue una tarde gris y pareja, de esas donde la luz casi no cambia entre las tres y las seis, cuando el mapa de idoneidad para el arrayán que crece cerca del Faro de Niebla finalmente salió sin ninguna franja corrida ni borde descuadrado. Le mandé una captura a mi hermana y, de pasada, me di cuenta de que podía explicarle qué significaba cada color del semáforo de idoneidad sin ir a revisar mis apuntes ni una sola vez.
Si estás por tu cuenta metiéndote en esto, lo que más te va a servir no es memorizar comandos, sino asumir que el orden importa: primero el sistema de referencia, después la resolución vía una capa maestra, y solo al final el recorte -- nunca al revés. Ya escribí en otro lado sobre lo que aprendí usando Maxent en R para modelar especies, por si quieres el contexto completo de cómo llegué hasta acá, y también sobre por qué usar modelado de nicho ecológico con Maxent en R para conservación, que es, al final, la razón de fondo por la que vale la pena dejar las variables bien preparadas antes de correr cualquier cosa.