Wstęp

W niniejszej analizie badana będzie zależność dotyczących ilości sklepów rowerowych od długości ścieżek rowerowych w Polsce, zagęszczenia obietów noclegowych reprezentujących intensywność turystyczną oraz tego, czy jest to miasto na prawie powiatu. Głownym celem badania jest znalezienie odpowiedzi na pytanie, jakie są główne determinanty występowania sklepów rowerowych w powiatach i jak intesywnie czynniki te wpływają na ilość tychże sklepów.

Hipoteza badawcza: Więcej ścieżek rowerowych, obiektów noclegowych oraz status miasta na prawie powiatu zwiększają ilość sklepów rowerowych w powiecie, lecz negatywnie wpływają na ich ilość w powiatach sąsiednich.

Aby odpowiedzieć na postawioną hipotezę, przeprowadzono analizę szeregu modeli przestrzennych w celu zidentyfikowania najlepszego modelu opisującego zależności między zmiennymi.


Przygotowanie Danych

Zaczynamy od załadowania wymaganych do analizy paczek

# Ładownie bibiotek
library(osmdata)
library(sf)
library(tmap)
library(osmextract)
library(dplyr)
library(spdep)
library(tidyr)
library(stargazer)
library(spatialreg)
library(readxl)
library(spatialreg)

Następnie ładujemy potrzebne dane oraz dokonujemy ich wstępnej obróbki

# Ustawianie swojego WD
setwd("C:/yourwd_folder")
# Wczytanie danych dot. długości ścieżek oraz ilości hoteli w powiecie (Dane otrzymane z GUSu)
rower = read.csv2("rower.txt", encoding="UTF-8", header=TRUE)
hotels = read_excel("Hotels.xlsx")

# Wczytanie danych z pliku .pbf - niestety pobranie danych bezpośrednio przez paczkę przerastało możliwości obliczeniowe 
# mojego komputera - jeśli jest możliwośc polecam pominąć krok pobierania i bezpośrednio zaciągnąć odpowiednie dane
data = oe_read("poland-latest.osm.pbf", layer = "points")

# Filtrowanie jedynie sklepów rowerowych z danych z openmap
bike_shops = data[grepl('"shop"=>"bicycle"', data$other_tags, fixed = TRUE), ]
# Oczyszczenie i poprawa jakości danych
bike_shops = bike_shops[ , c(1,2,10,11)]
rower = rower[ ,c(1,2,3)]
rm(data)
colnames(rower)<- c("ID","Nazwa","drogi")
rower$ID = substr(rower$ID, 1, nchar(rower$ID) - 3)
rower$ID = as.numeric(rower$ID)
rower$ID = sprintf("%04d", rower$ID)

Dodajemy mapę z powiatami Polski i tworzymy macierz wag przestrzennych

POW = st_read("powiaty//powiaty.shp", stringsAsFactors = FALSE)
POW$jpt_nazwa_ = iconv(POW$jpt_nazwa_, "latin1", "UTF-8")
POW = st_transform(POW, 4326)   # konwersja 4326=WGS84 
POW = POW[ , c(5,30)]

rower = left_join(rower, POW, by = c("ID" = "jpt_kod_je"))

rower_sf = st_sf(rower)

#sprawdzenie, czy ten sam format współrzędnych
st_crs(rower_sf)
st_crs(bike_shops)

#maceirz wag przestrzennych
neighbors = poly2nb(rower_sf)
listw = nb2listw(neighbors, style = "W")

bike_shops$geometry = st_as_sfc(bike_shops$geometry, crs = 4326)

Końcowe czyszczenie danych, łączenie i tworzenie ostatecznej ramki danych z wszystkimi zmiennymi

#pomocnicza zmienna
sklepy_sf1 = st_join(bike_shops, rower_sf, join = st_within)

# Zliczanie liczby sklepów w każdym powiecie
sklepy_sf = sklepy_sf1 %>%
  group_by(ID) %>%  # Zastąp 'ID_powiat' odpowiednią nazwą kolumny z identyfikatorem powiatu
  summarise(liczba_sklepow = n())

# Połącz dane z liczbą sklepów z danymi o powiatach
rower_sf = st_join(rower_sf, sklepy_sf)
rower_sf = rower_sf[ , c(1,2,3,5,6)]
rower_sf[is.na(rower_sf$liczba_sklepow)] = 0

# Zastąpienie NA w kolumnie liczba_sklepow na 0
rower_sf <- rower_sf %>%
  mutate(liczba_sklepow = replace_na(liczba_sklepow, 0))

#Stworzenie zmiennej miasto na prawie powiatu
rower_sf$mnpp <- ifelse(grepl("^Powiat m\\.", rower_sf$Nazwa), 1, 0)

#dodatnie liczby hoteli w powiecie
rower_sf <- merge(rower_sf, hotels[, c("Kod", "Wartosc")], by.x = "ID.x", by.y = "Kod", all.x = TRUE)

# Zastąpienie NA w kolumnie Wartosc na 0
rower_sf <- rower_sf %>%
  mutate(Wartosc = replace_na(Wartosc, 0))

Mapy wizualizujące dane

Wykres mapowy długości dróg rowerowych
Wykres mapowy długości dróg rowerowych
Wykres mapowy ilosci sklepów
Wykres mapowy ilosci sklepów
Wykres ilości hoteli
Wykres ilości hoteli

Podsumowanie modeli i wyciągnięcie wniosków

W tej części estymowany będzie szereg modeli przestrzennych, w celu wyłonienia modelu najlepiej dopasowanego

y = rower_sf$liczba_sklepow
x1 = rower_sf$drogi
x2 = rower_sf$mnpp
x3 = rower_sf$Wartosc

eq = y ~ x1 + x2 + x3

#Test morana
moran_test <- moran.test(rower_sf$liczba_sklepow, listw = listw)
#Moran I statistic standard deviate = 3.07, p-value = 0.00107
#Wyniki testu morana potwierdzają autokorelację przestrzenną liczby sklepów w powiecie 

#GNS
model_gns = sacsarlm(eq, data = rower_sf, listw=listw, type="sacmixed", method="LU")

#SAC
model_sac = sacsarlm(eq, data = rower_sf, listw=listw)

#SDM
model_sdm <- sacsarlm(eq, data = rower_sf, listw = listw, type = "lag", Durbin = TRUE, method = "LU")

#SLM
model_slm = lagsarlm(eq, data = rower_sf, listw = listw)

#SEM
model_sem = errorsarlm(eq, data = rower_sf, listw = listw)

#SDEM
model_sdem = errorsarlm(eq, data = rower_sf, listw = listw, etype="emixed")

#SAR
model_sar <- lagsarlm(eq, data = rower_sf, listw = listw, method = "LU")

#SLX
model_slx<-lmSLX(eq, data = rower_sf, listw = listw)

models <- list(SDEM = model_sdem, SEM = model_sem, SLM = model_slm, SLX = model_slx, SAC = model_sac, SDM = model_sdm)

screenreg(models)

Podsumowanie

Tabela podsumowująca
Tabela podsumowująca

Zarówno wartości AIC, jak i Log Likelihood wskazują, że model SDM charakteryzuje się najlepszym dopasowaniem spośród analizowanych modeli i to właśnie ten model zostanie użyty do podsumowania wyników i wyciągnięcia wniosków.

Współczynniki modelu sugerują pozytywny wpływ długości ścieżek rowerowych, liczby hoteli w powiecie oraz faktu, czy miasto posiada status miasta na prawach powiatu, na analizowaną zmienną zależną. Ponadto, zauważono istotny pozytywny wpływ długości ścieżek rowerowych oraz liczby ośrodków noclegowych w sąsiednich powiatach.

Z drugiej strony, status miasta na prawach powiatu wywiera silny, negatywny wpływ przestrzenny. Może to wynikać z faktu, że takie miasta, będąc głównymi ośrodkami urbanistycznymi w okolicy, często koncentrują znaczną część infrastruktury, takiej jak sklepy, ścieżki rowerowe czy hotele, co ogranicza rozwój podobnych udogodnień w sąsiednich powiatach.

Podsumowując, hipoteza badawcza została częściowo potwierdzona. Negatywny wpływ zależności przestrzennych zaobserwowano jedynie w przypadku zmiennej Miasto na prawach powiatu. W pozostałych przypadkach uzyskane wyniki były zgodne z oczekiwaniami sformułowanymi w hipotezie.

Przeprowadzona analiza może stanowić punkt wyjścia do dalszych badań, które mogłyby uwzględniać dodatkowe zmienne lub bardziej szczegółowe dane. Zebrane wnioski mają również potencjał praktycznego wykorzystania w planowaniu rozwoju infrastruktury rowerowej w Polsce.