Aceasta este a patra parte a unei serii de postări pe blog despre compararea tiparelor spațiale în datele raster. Mai multe informații despre întreaga serie pot fi găsite în prima parte.
Această postare de blog se concentrează pe compararea tiparelor spațiale în datele raster categorice pentru regiuni suprapuse. Cu alte cuvinte, aici avem două rastere cu același număr de rânduri și coloane și dorim să comparăm modelele lor spațiale.
Pentru această postare pe blog, folosim două seturi de date raster categorice: seturile de date CORINE Land Cover (CLC) pentru Tartu (Estonia) pentru anii 2000 și 2018.
library(terra)
clc2000_tartu = rast("https://github.com/Nowosad/comparing-spatial-patterns-2024/raw/refs/heads/main/data/clc2000_tartu.tif")
clc2018_tartu = rast("https://github.com/Nowosad/comparing-spatial-patterns-2024/raw/refs/heads/main/data/clc2018_tartu.tif")
plot(clc2000_tartu, main = "Tartu (2000)")
plot(clc2018_tartu, main = "Tartu (2018)")
Pe scurt, zonele roșii din raster reprezintă zone urbane, zonele verzi reprezintă păduri, zonele albastre reprezintă corpuri de apă, iar zonele galbene reprezintă terenuri agricole.
Context non-spațial
Rezultat raster
Diferența binară dintre două rastere
Cel mai simplu mod de a compara două rastere categorice este de a crea un raster binar care să indice dacă valorile celor două rastere sunt identice sau diferite. Aici, rezultatul evidențiază zonele în care valorile celor două rastere diferă (galben) și unde sunt aceleași (violet).
clc_diff = clc2018_tartu != clc2000_tartu plot(clc_diff)

Rezultat cu valori multiple
Pentru a obține o comparație mai detaliată, putem calcula matricea de confuzie (cunoscută și ca, de exemplu, tabelul de contingență) a celor două raster. Afișează numărul de pixeli care au aceeași valoare în ambele rastere (diagonale) și numărul de pixeli cu valori diferite (în afara diagonalei).
cm = table(values(clc2000_tartu), values(clc2018_tartu)) cm
1 2 3 4 6 7
1 4821 357 2 10 0 0
2 1342 67915 684 389 0 0
3 59 415 33670 2896 9 22
4 122 638 1435 7040 229 24
6 0 3 13 20 2177 37
7 0 0 0 0 3 1995
De exemplu, tabelul arată că există 4821 pixeli cu valoarea 1 în ambele raster și 357 pixeli cu valoarea 2 în primul raster și valoarea 1 în al doilea raster.
Matricele de confuzie sunt, de asemenea, un element de bază pentru multe alte statistici, inclusiv acuratețea, care pot fi calculate pentru a compara cele două seturi de date categorice.
Rezultat cu valoare unică
Proporția de pixeli modificați
Un raster de diferență binară poate fi folosit și pentru a calcula proporția de pixeli modificați prin împărțirea numărului de pixeli modificați la numărul total de pixeli non-NA.
clc_diff = clc2018_tartu != clc2000_tartu changed_pixels = freq(clc_diff)$count(2) na_pixels = freq(clc_diff, value = NA)$count total_pixels = ncell(clc_diff) - na_pixels proportion_changed = changed_pixels / total_pixels proportion_changed
Acest rezultat arată că aproximativ 0,07 dintre pixeli s-au modificat între cele două rastere.
Comparația generală
Comparația generală a celor două rastere se poate face prin calcularea diferenței dintre frecvențele valorilor celor două rastere (Pontiu 2002).
clc2000_tartu_freq = freq(clc2000_tartu) clc2018_tartu_freq = freq(clc2018_tartu) freq = merge(clc2000_tartu_freq, clc2018_tartu_freq, by = "value", all = TRUE) freq$diff = abs(freq$count.x - freq$count.y) sum_diff = sum(freq$diff) na_pixels = freq(clc_diff, value = NA)$count total_pixels = ncell(clc_diff) - na_pixels 1 - sum_diff / total_pixels
Comparația generală arată care este procentul de pixeli care au aceeași clasă în ambele rastere (cu toate acestea, nu ia în considerare dacă pixelii sunt în aceeași locație).
Statistica diferențelor dintre valorile rasterelor
Mai multe statistici despre diferențele dintre valorile celor două raster-uri pot fi calculate folosind difeR pachet (Pontius Jr. și Santacruz 2023). Aceste statistici se bazează pe matricea de confuzie și includ dezacordul general al alocării, diferența generală, dezacordul general privind schimbul, dezacordul general privind cantitatea și dezacordul general privind schimbarea.1
library(diffeR) clc_ct = crosstabm(clc2000_tartu, clc2018_tartu) diffeR_df = data.frame( overallAllocD = overallAllocD(clc_ct), overallDiff = overallDiff(clc_ct), overallExchangeD = overallExchangeD(clc_ct), overallQtyD = overallQtyD(clc_ct), overallShiftD = overallShiftD(clc_ct) ) diffeR_df
overallAllocD overallDiff overallExchangeD overallQtyD overallShiftD 1 6440 8709 5280 2269 1160
Contextul spațial
Rezultat raster
Diferența dintre o măsură focală a două raster (de exemplu, metrica peisaj selectată)
Pentru a include contextul spațial în comparație, putem calcula diferența dintre o măsură focală a două rastere. Un exemplu de astfel de măsură este informația reciprocă relativă (relmutinf), care cuantifică aglomerația peisajului – cu cât valoarea este mai mare, cu atât peisajul este mai aglomerat (^Vezi o postare pe blog despre această măsurătoare).
Porțiunea de cod de mai jos folosește peisajmetrică pachet (Hesselbarth și colab. 2019) pentru a specifica o fereastră în mișcare de 5 cu 5 și pentru a calcula relmutinf metrica pentru cele două rastere. Apoi, calculează diferența absolută dintre cele două rastere și grafică rezultatul.
library(landscapemetrics)
window = matrix(1, nrow = 5, ncol = 5)
clc2000_tartu_relmutinf_mw = window_lsm(clc2000_tartu, window = window,
what = "lsm_l_relmutinf")
clc2018_tartu_relmutinf_mw = window_lsm(clc2018_tartu, window = window,
what = "lsm_l_relmutinf")
clc2018_tartu_relmutinf_diff = abs(clc2018_tartu_relmutinf_mw((1))((1)) -
clc2000_tartu_relmutinf_mw((1))((1)))
plot(clc2018_tartu_relmutinf_diff)


Cele mai mari valori din ieșire indică zonele în care aglomerația peisajului s-a schimbat cel mai mult între cele două raster.
Alternativ, dacă calculăm diferența regulată, rezultatul va afișa zonele în care aglomerația peisajului a crescut (valori pozitive) și a scăzut (valori negative).
plot_div = function(r, ...){
r_range = range(values(r), na.rm = TRUE, finite = TRUE)
max_abs = max(abs(r_range))
new_range = c(-max_abs, max_abs)
plot(r, col = hcl.colors(100, palette = "prgn"), range = new_range, ...)
}
clc2018_tartu_relmutinf_diff2 = clc2018_tartu_relmutinf_mw((1))((1)) -
clc2000_tartu_relmutinf_mw((1))((1))
plot_div(clc2018_tartu_relmutinf_diff2)


Funcția de pierdere a entropiei încrucișate
Abordarea ferestrei mobile este, de asemenea, utilizată în raster.change() funcția de la spatialEco pachet (Evans și Murphy 2023). Primele două argumente ale sale sunt cele două raster de comparat, the s argument specifică dimensiunea ferestrei în mișcare și stat argument specifică statistica de calculat. De exemplu, stat = "cross-entropy" calculează funcția de pierdere a entropiei încrucișate, unde cu cât valoarea este mai mare, cu atât cele două rastere sunt mai diferite.
library(spatialEco)
clc_ce = raster.change(clc2000_tartu, clc2018_tartu, s = 5,
stat = "cross-entropy")
plot(clc_ce)


Rețineți că calculul de mai sus poate dura câteva minute.
Rezultat cu valori multiple
Diverse statistici din date categorice pot fi calculate la mai multe scale cu ajutorul mai înțelept pachet (Mahoney 2023). Aici, ww_multi_scale() funcția calculează acuratețea celor două rastere la scări diferite de la 500 la 3000 de metri (unități de hartă).
library(waywiser)
cell_sizes = seq(500, 3000, by = 500)
clc_multi_scale = ww_multi_scale(truth = as.factor(clc2000_tartu),
estimate = as.factor(clc2018_tartu),
metrics = list(yardstick::accuracy),
cellsize = cell_sizes,
progress = FALSE)
clc_multi_scale
# A tibble: 6 × 6 .metric .estimator .estimate .grid_args .grid .notes
1 accuracy multiclass 0.781
2 accuracy multiclass 0.607 3 accuracy multiclass 0.453 4 accuracy multiclass 0.358 5 accuracy multiclass 0.246 6 accuracy multiclass 0.270
Ieșirea arată acuratețea celor două rastere la fiecare scară: cea mai mare valoare este la scara de 500 de metri, iar cea mai mică valoare este la scara de 3000 de metri. Arată că odată cu creșterea scalei, acordul dintre cele două rastere scade – ambele rastere sunt similare la scară locală, dar diferă la cea regională.
Rezultat cu valoare unică
Asocierea spațială între regionalizări folosind măsura V
The sabie pachet (Nowosad și Stepinski 2018) oferă o funcție pentru a calcula câteva măsuri de asociere spațială între două hărți categoriale.2
library(sabre) clc_sabre = vmeasure_calc(clc2000_tartu, clc2018_tartu) clc_sabre
The SABRE results: V-measure: 0.77 Homogeneity: 0.78 Completeness: 0.76 The spatial objects can be retrieved with: $map1 - the first map $map2 - the second map
Ieșirea sa returnează trei valori: omogenitatea, completitudinea și măsura V. Omogenitatea măsoară cât de bine se potrivesc regiunile de pe prima hartă în regiunile de pe cea de-a doua hartă, completitudinea măsoară cât de bine se potrivesc regiunile de pe a doua hartă în interiorul regiunilor de pe prima hartă, iar măsura V este media armonică ponderată a omogenității și completitudine. Toate variază de la 0 la 1, unde valorile mai mari indică o mai bună concordanță spațială.
În plus, rezultatul conține două seturi de hărți de neomogenități ale regiunilor (rih): primul set arată modul în care regiunile de pe prima hartă sunt neomogene în ceea ce privește regiunile de pe a doua hartă, iar al doilea set arată cum regiunile de pe harta a doua hartă sunt neomogene în ceea ce privește regiunile de pe prima hartă.
plot(clc_sabre$map1((2))) plot(clc_sabre$map2((2)))
Referințe
Evans, Jeffrey S. și Melanie A. Murphy. 2023. spatialEco. Manual.
Hesselbarth, Maximilian HK, Marco Sciaini, Kimberly A. With, Kerstin Wiegand și Jakub Nowosad. 2019. „Peisajometrie : O sursă deschisă R Instrument pentru a calcula metrica peisajului.” Ecografie 42 (10): 1648–57. https://doi.org/gf4n9j.
Mahoney, Michael J. 2023. „Mai înțelept: Ergonomic Metode de evaluare a modelelor spațiale.” https://doi.org/10.48550/arXiv.2303.11312.
Nowosad, J. și TF Stepinski. 2018. „Asociere spațială între regionalizări folosind informația-teoretică V -Măsură.” Jurnalul Internațional de Știința Informației Geografice 32 (12): 2386–2401. https://doi.org/gf283f.
Pontius Jr., Robert Gilmore și Ali Santacruz. 2023. difeR: Metrici de diferență pentru compararea perechilor de hărți sau a perechilor de variabile. Manual.
Pontius, R Gil. 2002. „Statistic Metode la Efecte de partiție de Cantitate şi Locația în timpul comparației de Hărți categoriale la Rezoluții multiple.” Inginerie fotogrametrică.
Reutilizați
Citare
citare BibTeX:
@online{nowosad2024,
author = {Nowosad, Jakub},
title = {Comparison of Spatial Patterns in Categorical Raster Data for
Overlapping Regions Using {R}},
date = {2024-11-03},
url = {https://jakubnowosad.com/posts/2024-11-03-spatcomp-bp4/},
langid = {en}
}
Pentru atribuire, vă rugăm să citați această lucrare ca:
Nowosad, Jakub. 2024. „Comparație de modele spațiale în datele raster categorice pentru regiuni suprapuse folosind R.”
3 noiembrie 2024. https://jakubnowosad.com/posts/2024-11-03-spatcomp-bp4/.
