Alguém pode sugerir um algoritmo para gerar um mapa de calor para visualizar a diversidade de pontos? Um exemplo de aplicação seria o mapeamento de áreas com alta diversidade de espécies. Para algumas espécies, todas as plantas foram mapeadas, resultando em uma contagem alta de pontos, mas com muito pouco significado em termos da diversidade da área. Outras áreas genuinamente têm alta diversidade.
Considere os seguintes dados 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
e mapa resultante:
No quadrante superior esquerdo, há uma área altamente diversificada, enquanto no quadrante inferior direito, há uma área com alta concentração de pontos, mas baixa diversidade. Duas maneiras de visualizar a diversidade podem ser usar um mapa de calor tradicional ou contar o número de categorias representadas em cada polígono. Como as imagens a seguir mostram, essas abordagens têm uso limitado, uma vez que o mapa de calor mostra a maior intensidade no canto inferior direito, enquanto a abordagem de bineamento seria exatamente a mesma se houvesse apenas uma categoria (isso poderia ser resolvido aumentando o tamanho do caixas de polígonos, mas o resultado se torna desnecessariamente granular).
Uma abordagem que pensei em fazer isso seria preparar um algoritmo tradicional de mapa de calor pelo número de pontos de categorias diferentes dentro de um raio definido e, em seguida, usar essa contagem como o peso do ponto ao gerar o mapa de calor. No entanto, acho que isso pode ser propenso a artefatos indesejados, como reforço mútuo, levando a resultados muito nítidos. Além disso, pontos mapeados de perto do mesmo tipo continuariam aparecendo como altas concentrações, mas não na mesma extensão.
Outra abordagem (provavelmente melhor, mas mais cara em termos de computação) seria:
- Calcular o número total de categorias no conjunto de dados
- Para cada pixel na imagem de saída:
- Para cada categoria:
- calcule a distância ao ponto representativo mais próximo (r) [provavelmente limitando por algum raio além do qual a influência é desprezível]
- adicione uma ponderação proporcional a 1 / r 2
- Para cada categoria:
Já existem algoritmos que não conheço para fazer isso ou outras maneiras de visualizar a diversidade?
Editar
Seguindo a sugestão de Tomislav Muic, calculei os mapas de calor para cada categoria e os normalizei usando a seguinte fórmula (calculadora raster 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)
com o seguinte resultado (comentários sob sua resposta):