Análisis
Esto puede verse como un problema de identificación de regiones cilíndricas en un espaciotiempo de 2+1 dimensiones que contienen un número mínimo de eventos. Si se dispone de un sistema tridimensional (basado en vóxeles), se puede resolver con bastante facilidad mediante una suma focal tridimensional basada en esta vecindad cilíndrica: basta con elegir los vóxeles en los que la suma supere el umbral (de, por ejemplo, tres sucesos). Cada vóxel identifica un punto central (más todos los puntos en un radio de 1/2 km) y una hora central (más todas las horas hasta 15 días antes o después), localizando así grupos de sucesos simultáneamente en el espacio y el tiempo.
Solución
Con un SIG ordinario (2D), este método no está disponible, pero aún podemos utilizar el enfoque para guiarnos, porque podemos construir la suma focal 3D ensamblando una pila de cortes 2D (representados como rasters). No va a ser rápido, pero con una pequeña cantidad de scripting (para codificar un bucle en el tiempo) será bastante sencillo y no nos llevará demasiado tiempo. Aquí está el flujo de trabajo:
-
Para cada día cree un suma focal de los eventos empezando por el día más antiguo del conjunto de datos. Como los sucesos deben estar a un kilómetro de distancia unos de otros, utilice un vecindario circular de 1/2 km de radio. Así, el recuento en cada celda incluirá sólo los grupos de sucesos que estén definitivamente a menos de 2*(1/2) = 1 km de distancia entre sí.
Su región es lo suficientemente pequeña como para utilizar un tamaño de celda rasterizado mucho más fino que el radio de un kilómetro: 100 metros deberían dar una precisión y exactitud razonables.
-
A partir de 30 días, calcule un suma local de esas sumas focales . Los valores de este raster cuentan el número de eventos que se producen en un radio de 1 km en un plazo de 30 días. Identifique todas las celdas en las que los recuentos superen el umbral. (Registre sus ubicaciones, sus recuentos y el rango de días reflejado por este raster, que consiste en los días 1 a 30).
-
Para cada día sucesivo, añadir la siguiente suma focal al resultado anterior y restar la suma focal de hace 31 días . Como antes, identifique todas las celdas en las que los recuentos superen el umbral. Repita la operación hasta llegar al último día, y luego seguir adelante durante otros 29 días, hasta que la parrilla acumulada refleje sólo el último día, y luego se detenga.
Consideraciones computacionales
Se pueden calcular estas sumas focales sobre la marcha y tirarlas en el momento en que se utilicen por última vez, reduciendo así los requisitos de almacenamiento (o RAM) a sólo 33 rasters: 31 sumas focales diarias, la suma espacio-temporal acumulada y la memoria de trabajo para actualizarla. Con una memoria RAM limitada, podría ser incluso más rápido calcular cada suma focal diaria dos veces: una vez al añadirla y otra para restarla al final de cada ventana de 30 días. Esto reduce los requisitos de RAM a sólo tres rastreos a la vez. Con una resolución de 100 m, se puede cubrir todo Afganistán con una cuadrícula de 10.000 por 10.000 celdas, lo que requiere unos 0,4 GB de RAM, por lo que sólo se necesitan 1,2 GB de RAM. Las operaciones de suma focal y de suma/diferencia local son tan rápidas que, con un SIG eficiente basado en rásters, cada día puede procesarse como mucho en unos pocos segundos (quizá mucho más rápido si hay pocos eventos y los algoritmos subyacentes son buenos).
Este flujo de trabajo es lo suficientemente sencillo y utiliza operaciones básicas tan simples que puede codificarse directamente en Python, sin ningún soporte de rasterización incorporado. La clave es implementar una buena operación de suma focal. Si los eventos son escasos, hágalo haciendo un bucle sobre los eventos (y "repartiendo" sus recuentos en sus vecindades en la trama) en lugar de hacerlo por FFT o de otra manera.