Qualcuno può suggerire un algoritmo per generare una mappa di calore per visualizzare la diversità dei punti? Un'applicazione di esempio potrebbe essere quella di mappare aree con elevata diversità di specie. Per alcune specie, ogni singola pianta è stata mappata, risultando in un conteggio dei punti alto, ma con un significato molto piccolo in termini di diversità dell'area. Altre aree hanno davvero un'alta diversità.
Considerare i seguenti dati di input:
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 mappa risultante:
Nel quadrante in alto a sinistra, c'è una patch molto diversificata, mentre nel quadrante in basso a destra, c'è un'area con alta concentrazione di punti, ma bassa diversità. Due modi per visualizzare la diversità potrebbero essere l'uso di una mappa di calore tradizionale o il conteggio del numero di categorie rappresentate in ciascun poligono. Come mostrano le immagini seguenti, questi approcci hanno un uso limitato, poiché la mappa di calore mostra la massima intensità in basso a destra, mentre l'approccio di binning sembrerebbe esattamente lo stesso se ci fosse una sola categoria (questo potrebbe essere risolto aumentando le dimensioni del bin poligonali, ma il risultato diventa inutilmente granulare).
Un approccio a cui ho pensato di fare questo sarebbe quello di innescare un algoritmo della mappa di calore tradizionale dal numero di punti di diverse categorie all'interno di un raggio definito, e quindi utilizzare quel conteggio come il peso per il punto quando si genera la mappa di calore. Tuttavia, penso che questo potrebbe essere soggetto a manufatti indesiderati, come il rinforzo reciproco che porta a risultati molto nitidi. Inoltre, punti dello stesso tipo strettamente mappati continuerebbero ad apparire come concentrazioni elevate, ma non nella stessa misura.
Un altro approccio (probabilmente migliore ma più costoso dal punto di vista computazionale) sarebbe:
- Calcola il numero totale di categorie nel set di dati
- Per ogni pixel nell'immagine di output:
- Per ogni categoria:
- calcola la distanza dal punto rappresentativo più vicino (r) [probabilmente limitando di un raggio oltre il quale l'influenza è trascurabile]
- aggiungere una ponderazione proporzionale a 1 / r 2
- Per ogni categoria:
Esistono già algoritmi di cui non sono a conoscenza o altri modi per visualizzare la diversità?
modificare
Seguendo il suggerimento di Tomislav Muic, ho calcolato le mappe di calore per ciascuna categoria e le ho normalizzate utilizzando la seguente formula (calcolatrice 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)
con il seguente risultato (commenti sotto la sua risposta):