Statystyki centrograficzne stanowią przestrzenną modyfikację statystyk opisowych w klasycznej statystyce. Są podstawową formą opisu rozkładu przestrzennego danych punktowych. Statystyki centrograficzne oblicza się za pomocą funkcji z pakietu sfdep.
Średnia centralna wyznaczona jest przez punkt o współrzędnych \(\overline{x_c}\), \(\overline{y_c}\) stanowiących średnią arytmetyczną długości i szerokości geograficznej obiektów rozproszonych w przestrzeni.
\[\overline{x_c} = \frac{\sum_{i=1}^{n} x_i}{n}\]
\[\overline{y_c} = \frac{\sum_{i=1}^{n} y_i}{n}\]
Statystyki centrograficzne (średnia centralna, odległość standardowa) mogą być obliczone na podstawie ramki danych zawierającej współrzędne x oraz y. Funkcja st_coordinates() z pakietu sf pozwala na wydobycie współrzędnych z obiektu punktowego klasy sf oraz stworzenie ramki danych zawierającej dwie kolumny: x oraz y.
library(sf)
Linking to GEOS 3.10.2, GDAL 3.4.1, PROJ 8.2.1; sf_use_s2() is TRUE
p2019 =read_sf("data/przestepstwa_2019.gpkg")#granica miasta Poznańpzn =read_sf("data/pzn_borders.gpkg")p2019_coords =st_coordinates(p2019)head(p2019_coords)
X Y
[1,] 361379.5 503546.3
[2,] 361691.3 503694.6
[3,] 360347.3 506216.0
[4,] 353099.3 504204.1
[5,] 361715.2 503305.9
[6,] 360260.9 510415.0
Średnią centralną obliczamy poprzez wyliczenie średniej wartości dla kolumny X oraz Y.
# mean centermc =apply(p2019_coords, 2, mean)mc
X Y
358716.4 506363.5
Wizualizacja średniej centralnej wymaga utworzenia obiektu przestrzennego w oparciu o współrzędne punktu. W tym celu wykorzystanie zostanie funkcja st_point() oraz st_sfc() z pakietu sf.
#Przekształcenie obiektu mc na obiekt przestrzenny klasy sfc_POINTmc_point =st_sfc(st_point(mc), crs =st_crs(p2019))
plot(mc_point)
5.1.2 Odległość standardowa
Odległość standardowa określa średnią odległość puntków (\(x_{i}\), \(y_{i}\)) od punktu centralnego (centroidu, (\(\overline{x_c}\), \(\overline{y_c}\))) i obliczana jest wg wzoru:
\(x_{i}\) oznacza współrzędną x dla każdego punktu (p2019_coords[,1] ),
\(y_{i}\) oznacza współrzędną y dla każdego punktu (p2019_coords[,2]),
\(\overline{x_c}\) to współrzędna x dla średniej centralnej (mc[1]),
\(\overline{y_c}\) to współrzędna y dla średniej centralnej (mc[2]).
# standard distancesd =sqrt(sum((p2019_coords[,1] - mc[1])^2+ (p2019_coords[,2] - mc[2])^2) /nrow(p2019_coords))sd
[1] 3886.935
Odległość standardowa graficznie przedstawiana jest jako koło o środku w punkcie wyznaczonym przez średnią centralną oraz promieniu równym odległości standardowej. Do stworzenia obiektu przestrzennego przedstawiającego zasięg odległości standardowej wykorzystana zostanie funkcja st_buffer() z pakietu sf.
#wyznaczenie strefy buforowej wokół średniej centralnej o promieniu równym odległości standardowejsd_buffer =st_buffer(mc_point, sd)
Wizualizacja średniej centralnej i odległości standardowej
Elipsa odchylenia standardowego pozwala na określenia kierunków rozrzutu obiektów (obserwacji) w przestrzeni. W R może być obliczona za pomocą funkcji std_dev_ellipse() z pakietu sfdep.
5.2 Statystyki centrograficzne w R
Statystyki centrograficzne w R oblicza sie z wykorzystaniem funkcji z pakietu sfdep. Pakiet sfdep pozwala na obliczanie różnych statystyk centrograficznych w oparciu o dane punktowe wczytane za pomocą pakietu sf:
W przykładzie 1 wykorzystano dane dotyczące przestępczości w Poznaniu (plik przestepstwa_2019.gpkg) wraz z granicą miasta Poznania (plik pzn_borders.gpkg). Do podsumowania rozkładu przestępczości wykorzystano statystyki centrograficzne. Plik przestepstwa_2019.gpkg zawiera tylko kolumnę geom bez dodatkowych atrybutów.
library(sf)# dane punktowep2019 =read_sf("data/przestepstwa_2019.gpkg")#granica miasta Poznańpzn =read_sf("data/pzn_borders.gpkg")
library(pracma)library(sfdep)# odległość standardowa sd2 =std_distance(p2019) #zwraca wartość z odległościąsd2_buffer =st_buffer(mc_point2, sd2) #zwraca obiekt przestrzenny
library(pracma)library(sfdep)# funkcja std_dev_ellipse zwraca parametry elipsy, st_ellipse tworzy na ich podstawie obiekt liniowy p2019_e =std_dev_ellipse(p2019)p2019_e =st_ellipse(p2019_e, sx = p2019_e$sx, sy = p2019_e$sy)
5.4 Przykład 2: Rozkład przestrzenny szkół w Poznaniu
5.4.1 Dane
W drugim przykładzie wykorzystano dane pozyskane z BDOT10k z warstwy przedstawiającej budynki (OT_BUBD_A) oraz granice administracyjne (OT_ADJA_A) do przeanalizowania rozkładu przestrzennego szkół podstawowych w Poznaniu.
Granica miasta Pozania została pozyskana z warstwy OT_ADJA_A.
granica =read_sf("data/bdot10k/PL.PZGiK.308.BDOT10k.3064__OT_ADJA_A.gpkg")granica = granica[granica$RODZAJ =="powiat", "geometria"]
Warstwa OT_BUBD_A jest warstwą poligonową zawierającą różne typy budynków.
budynki <-read_sf("data/bdot10k/PL.PZGiK.308.BDOT10k.3064__OT_BUBD_A.gpkg")
Informacje o typach budynków zapisane są w dwóch kolumnach: FUNKCJAOGOLNABUDYNKU oraz PRZEWAZAJACAFUNKCJABUDYNKU.
unique(budynki$FUNKCJAOGOLNABUDYNKU)
[1] "budynki szpitali i inne budynki opieki zdrowotnej"
[2] "budynki transportu i łączności"
[3] "budynki mieszkalne"
[4] "budynki produkcyjne, usługowe i gospodarcze dla rolnictwa"
[5] "zbiorniki, silosy i budynki magazynowe"
[6] "budynki przemysłowe"
[7] "budynki oświaty, nauki i kultury oraz budynki sportowe"
[8] "budynki handlowo-usługowe"
[9] "pozostałe budynki niemieszkalne"
[10] "budynki biurowe"
Deleting source `data/out_poznan_szkoly.gpkg' using driver `GPKG'
Writing layer `szkoly' to data source
`data/out_poznan_szkoly.gpkg' using driver `GPKG'
Writing 84 features with 0 fields and geometry type Point.
Wykorzystując funkcje z pakietu sfdep zostały obliczone statystyki centrograficzne: średnia centralna (funkcja center_mean()), odległość standardowa (funkcja std_distance()), elipsa odchylenia standardowego (std_dev_ellipse()).
library(pracma)library(sfdep)#srednia centralnamc_point2 =center_mean(szkoly_pkt)# odległość standardowa sd2 =std_distance(szkoly_pkt) #zwraca wartość z odległościąsd2_buffer =st_buffer(mc_point2, sd2) #zwraca obiekt przestrzenny# funkcja std_dev_ellipse zwraca parametry elipsy, st_ellipse tworzy na ich podstawie obiekt liniowy szkoly_pkt_e =std_dev_ellipse(szkoly_pkt)szkoly_pkt_e =st_ellipse(szkoly_pkt_e, sx = szkoly_pkt_e$sx, sy = szkoly_pkt_e$sy)