¿Alguien puede sugerir un algoritmo para generar un mapa de calor para visualizar la diversidad de puntos? Un ejemplo de aplicación sería para mapear áreas de alta diversidad de especies. Para algunas especies, cada planta ha sido mapeada, lo que resulta en un recuento de puntos alto, pero con muy poco significado en términos de la diversidad del área. Otras áreas realmente tienen una gran diversidad.
Considere los siguientes datos de entrada:
x y cat
0.8 8.1 B
1.1 8.9 A
1.6 7.7 C
2.2 8.2 D
7.5 0.9 A
7.5 1.2 A
8.1 1.5 A
8.7 0.3 A
1.9 2.1 B
4.5 7.0 C
3.8 4.0 D
6.6 4.8 A
6.2 2.4 B
2.2 9.1 B
1.7 4.7 C
7.5 7.3 D
9.2 1.2 A
y mapa resultante:
En el cuadrante superior izquierdo, hay un parche muy diverso, mientras que en el cuadrante inferior derecho, hay un área con alta concentración de puntos, pero baja diversidad. Dos formas de visualizar la diversidad podrían ser usar un mapa de calor tradicional o contar el número de categorías representadas en cada polígono. Como muestran las siguientes imágenes, estos enfoques tienen un uso limitado, ya que el mapa de calor muestra la mayor intensidad en la esquina inferior derecha, mientras que el enfoque de agrupamiento se vería exactamente igual si hubiera una sola categoría (esto podría abordarse aumentando el tamaño de contenedores de polígonos, pero luego el resultado se vuelve innecesariamente granular).
Un enfoque que pensé para hacer esto sería preparar un algoritmo tradicional de mapa de calor por el número de puntos de diferentes categorías dentro de un radio definido, y luego usar esa cuenta como el peso para el punto al generar el mapa de calor. Sin embargo, creo que esto podría ser propenso a los artefactos no deseados, como el refuerzo mutuo que conduce a resultados muy agudos. Además, los puntos del mismo tipo estrechamente mapeados continuarían apareciendo como altas concentraciones, pero no en la misma medida.
Otro enfoque (probablemente mejor pero más costoso computacionalmente) sería:
- Calcular el número total de categorías en el conjunto de datos
- Para cada píxel en la imagen de salida:
- Para cada categoria:
- calcular la distancia al punto representativo más cercano (r) [probablemente limitado por un radio más allá del cual la influencia es insignificante]
- agregar una ponderación proporcional a 1 / r 2
- Para cada categoria:
¿Existen algoritmos que no conozco para hacer esto u otras formas de visualizar la diversidad?
Editar
Siguiendo la sugerencia de Tomislav Muic, calculé los mapas de calor para cada categoría y los normalicé usando la siguiente fórmula (calculadora ráster QGIS):
((heatmap_A@1 >= 1) + (heatmap_A@1 < 1) * heatmap_A@1) +
((heatmap_B@1 >= 1) + (heatmap_B@1 < 1) * heatmap_B@1) +
((heatmap_C@1 >= 1) + (heatmap_C@1 < 1) * heatmap_C@1) +
((heatmap_D@1 >= 1) + (heatmap_D@1 < 1) * heatmap_D@1)
con el siguiente resultado (comentarios bajo su respuesta):