
La consola de RStudio parpadea congelada, con el cursor clavado a la mitad de una línea, y yo le sigo dando clic al botón de detener como si eso fuera a servir de algo. Tengo cargadas las capas climáticas de todo Centroamérica a la resolución más fina que existe, convencido de que más detalle iba a darme un mapa perfecto para el mosquero que anoté en una salida por el Cerro de la Muerte. Terco, como buen aficionado que aprendió modelado de nicho a puro tropezón — hasta la tecla Tab de mi teclado tiene la pintura comida de tanto apretarla para que RStudio me complete el nombre de la función.
Esto es modelado de nicho con MaxEnt en R, no teledetección satelital pura — son parientes, pero esa comparación completa la dejo para otro texto. Lo que sí puedo contarles hoy, después de romper el código más veces de las que admito, es cómo decidí qué resolución de capas climáticas de WorldClim usar sin que la laptop terminara oliendo a quemado: una pregunta de biogeografía más simple de lo que parece, y que casi nadie explica claro.
Tres horas después, la pantalla me tiró el aviso que todo el que usa R en una laptop modesta termina odiando: no hay memoria para procesar el raster. Perdí el script completo por no guardarlo antes de correr el 'plot'. Ahí entendí, a la mala, que en la biogeografía —como en mi trabajo de logística entre semana— más volumen de datos no es sinónimo de mejor resultado.
El pixel más chico no es el que gana
Cuando alguien descubre WorldClim por primera vez quiere agarrarlo todo: son 19 variables bioclimáticas y las podés bajar en varias resoluciones (cuál mide qué y qué libro te las explica bien es catálogo para otro texto del blog). Lo que importa hoy es la resolución. La más fina, de 30 segundos de arco, ronda el kilómetro cuadrado en el ecuador, y uno se imagina que va a marcar el árbol exacto donde se posó el ave.

Pero ese pixel de un kilómetro miente si tus datos no aguantan esa precisión. Los puntos que uno baja de eBird o iNaturalist suelen traer un margen de error de varios kilómetros —el observador anotó dónde estacionó el carro, no dónde estaba parado el pájaro—, y ahí la resolución fina no ayuda: solo agrega ruido estadístico que sobreajusta las predicciones a errores de interpolación climática local que el modelo termina confundiendo con señal real.
Antes de meterme con R en serio, probé instalar Maxent standalone tal cual (ni sabía que existían parámetros para calibrar, la verdad sea dicha), sin tocar el multiplicador de regularización ('beta') ni hacerle un thinning espacial a los puntos —dos ajustes que también tienen su propia explicación en otro lado—. El modelo corrió, sí, pero escupió un mapa de nicho tan disperso que no servía para nada; ahí quedó claro que la resolución de las capas es solo una pieza del problema, no la solución completa.
Las cuatro resoluciones de WorldClim, en corto
WorldClim ofrece cuatro resoluciones y aprender la diferencia entre ellas me ahorró varias madrugadas de frustración. La de 30 segundos de arco, cerca de un kilómetro cuadrado, sirve si trabajás en una reserva chica o una isla, pero exige RAM potente y datos de campo muy precisos. La de 2.5 minutos, unos 21 kilómetros cuadrados, es el punto medio que casi nadie usa y que resulta una joya para estudios regionales. La de 5 minutos, cerca de 85 kilómetros cuadrados, es la que más uso para modelos a nivel país —Costa Rica, Panamá— porque corre rápido y perdona errores de ubicación en los datos de biodiversidad. Y la de 10 minutos de arco, unos 340 kilómetros cuadrados, sirve para escalas continentales, si vas a seguir la migración de una especie desde Canadá hasta Argentina.
Si tus archivos le siguen tirando errores raros a MaxEnt, antes de tocar la resolución revisá esta comparativa de cursos para aprender a limpiar datos de biodiversidad en R: muchas veces el problema no es el tamaño del pixel, sino la basura que le metemos al modelo desde el inicio.

¿Qué pasa cuando el mapa se pone todo rojo?
Por ahí de la semana diez de estar puliendo el mismo modelo, corrí una proyección a futuro para ver cómo se movería el rango de la especie con el cambio climático, y la pantalla me devolvió medio país pintado del mismo rojo parejo, sin matices (para qué le voy a mentir, por un segundo pensé que había encontrado algo importante). Ni un valle, ni una diferencia entre la costa y la montaña: todo 'apto' por igual. Ese mapa uniforme no significa que la especie vaya a estar en todos lados; casi siempre significa que la resolución elegida no combina con la escala de la pregunta, y el modelo terminó promediando todo el paisaje en una sola respuesta plana.
Cómo elijo la resolución antes de correr el modelo
Hoy aplico una regla simple: la resolución la dicta la pregunta biológica y la precisión de los datos, no la capacidad del procesador. Si tus puntos de presencia son de esos registros viejos que dicen apenas 'colectado en Heredia', usar capas de un kilómetro es un pecado estadístico (uno que yo cometí más de una vez, para qué negarlo): le estás dando al modelo una falsa sensación de precisión que tus datos no tienen.
Un detalle práctico que aprendí a las malas: el paquete 'terra' le ganó terreno a 'raster' para manejar archivos pesados de forma eficiente, y si seguís usando funciones viejas con capas de alta resolución vas a pasar más tiempo mirando la barra de carga que revisando el mapa.
A un amigo que practica escalada en roca en los peñascos del Valle Central le tocó preguntarme una vez por qué no uso siempre el mapa 'más nítido posible', igual que él no siempre busca agarrarse del saliente más chico de la pared. Le expliqué que en ambos casos manda el objetivo: no se trata de lucirse con el detalle, sino de responder la pregunta que tenés enfrente con lo que en verdad necesitás.
Ya que estamos, aclaro varias preguntas que me hacen seguido y que no son el tema de hoy. Lo del AUC como medida de qué tan bien salió el modelo es otro cuento aparte. Tampoco voy a comparar MaxEnt contra un modelo lineal generalizado, ni la pelea entre correrlo desde la interfaz de Java original o desde RStudio, discusión que para mí ya perdió sentido. Si la duda es con qué paquete de R armar todo el flujo —hay varios pensados justo para modelar distribución de especies— o si te conviene más quedarte en QGIS a puro clic en vez de código, eso también queda pendiente para otro texto. Lo mismo con meter variables sacadas directo de sensores satelitales además de las capas de WorldClim, o con qué hacer cuando la especie que estás mapeando tiene apenas un puñado de registros: ese problema de muestra chica se trata distinto y merece su propio espacio.
Para los que no somos biólogos ni estadísticos de oficio, sino aficionados tercos que solo queremos responder nuestra propia pregunta, hay mejores programas de formación en MaxEnt para aficionados a la ornitología que explican todo esto con menos fórmula y más sentido común. Eso sí, un curso genérico de estadística espacial que recomendaba antes lo saqué de mi lista: enseñaba a bajar siempre la resolución más alta 'porque sí', sin pasar primero por la pregunta biológica, y ese consejo le hizo más daño que bien a más de uno. Perdí semanas peleando para que R leyera capas pesadísimas, solo para notar que el resultado final casi no cambiaba frente a una resolución más liviana.
Usar una resolución 'baja' no es rendirse ni conformarse. Lo que buscamos, en el fondo, es un mapa que diga algo real sobre dónde puede aparecer la especie, no una imagen impecable que tardó media semana en renderizar y que igual está llena de artefactos por falta de datos de campo. Si notás que la laptop empieza a calentarse de más, es buena señal para parar, respirar, y bajar un escalón en la resolución de las capas: el modelo —y tu equipo— lo van a agradecer.