Testing the functionality
st_voronoi()
library(dplyr)
library(ggplot2)
library(sf)
library(patchwork)
db <- combine_fude(
d,
b,
city = "松山市",
rcom = "由良|北浦|鷲ケ巣|門田|馬磯|泊|御手洗|船越"
)
db$fude_points <- db$fude |>
sf::st_drop_geometry() |>
dplyr::mutate(
geometry = purrr::map(centroid, \(d) sf::st_point(c(d[1], d[2])))
) |>
dplyr::mutate(
geometry = sf::st_sfc(geometry, crs = 4326)
) |>
sf::st_as_sf(crs = 4326)
fude_points_projected <- sf::st_transform(db$fude_points, crs = 6677)
rcom_union_projected <- sf::st_transform(db$rcom_union, crs = 6677)
voronoi <- fude_points_projected |>
sf::st_geometry() |>
sf::st_union() |>
sf::st_voronoi() |>
sf::st_collection_extract(type = "POLYGON") |>
sf::st_sf(crs = 6677) |>
sf::st_intersection(y = sf::st_geometry(rcom_union_projected)) |>
sf::st_join(y = fude_points_projected) |>
sf::st_cast("POLYGON") |>
sf::st_transform(crs = 4326)
map1 <- ggplot() +
geom_sf(
data = db$fude |> filter(rcom_name == "泊"),
aes(fill = rcom_name),
linewidth = .3
) +
geom_sf(data = db$fude_points |> filter(rcom_name == "泊"), size = .5) +
geom_sf(
data = db$rcom |> filter(rcom_name == "泊"),
aes(fill = rcom_name),
alpha = 0,
linewidth = 1
) +
theme_void() +
theme(legend.position = "none")
map2 <- ggplot() +
geom_sf(
data = voronoi |> filter(rcom_name == "泊"),
aes(fill = rcom_name),
linewidth = .3
) +
geom_sf(data = db$fude_points |> filter(rcom_name == "泊"), size = .5) +
geom_sf(
data = db$rcom |> filter(rcom_name == "泊"),
aes(fill = rcom_name),
alpha = 0,
linewidth = 1
) +
theme_void() +
theme(legend.position = "none")
map1 + map2
出典:農林水産省「筆ポリゴンデータ(2025年度公開)」および「農業集落境界データ(2020年度)」を加工して作成。
voronoi$area_voronoi <- sf::st_area(voronoi)
voronoi$a_voronoi <- as.numeric(units::set_units(voronoi$area_voronoi, "a"))
ggplot(data = voronoi, aes(x = a_voronoi, fill = land_type_jp)) +
geom_histogram(position = "identity", alpha = .5) +
labs(x = "面積(a)", y = "頻度") +
facet_wrap(~ rcom_name) +
labs(fill = "耕地の種類") +
theme_minimal() +
theme(text = element_text(family = "Hiragino Sans"))
spdep::poly2nb() and localmoran()
library(spdep)
coords <- sf::st_coordinates(sf::st_centroid(voronoi))
nb <- spdep::poly2nb(voronoi, queen = TRUE)
plot(nb, coords, cex = .01, col = "red")
lw <- spdep::nb2listw(nb, style = "W", zero.policy = TRUE)
(moran_test <- spdep::moran.test(voronoi$a, listw = lw))##
## Moran I test under randomisation
##
## data: voronoi$a
## weights: lw
## n reduced by no-neighbour observations
##
## Moran I statistic standard deviate = 15.07, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.2303867195 -0.0006510417 0.0002350355
localmoran <- spdep::localmoran(voronoi$a, listw = lw)
localmoran_df <- as.data.frame(localmoran)
voronoi$Ii <- localmoran_df$Ii
gI <- ggplot() +
geom_sf(data = voronoi, aes(fill = Ii), colour = "black", linewidth = 0) +
scale_fill_gradient2(
low = "blue",
mid = "white",
high = "red",
midpoint = 0,
space = "Lab",
na.value = "grey50",
guide = "colourbar",
aesthetics = "fill"
) +
theme_void()
voronoi$p_values <- localmoran_df[, "Pr(z != E(Ii))"]
sum(voronoi$p_values < 0.1, na.rm = TRUE) / nrow(voronoi)## [1] 0.1885566
gp <- ggplot() +
geom_sf(
data = voronoi,
aes(fill = p_values),
colour = "black",
linewidth = 0
) +
scale_fill_gradient2(
low = "blue",
mid = "white",
high = "red",
midpoint = 0.1,
space = "Lab",
na.value = "grey50",
guide = "colourbar",
aesthetics = "fill"
) +
theme_void()
gI + gp
出典:農林水産省「筆ポリゴンデータ(2025年度公開)」および「農業集落境界データ(2020年度)」を加工して作成。
spdep::knn2nb() and localmoran()
coords1 <- sf::st_coordinates(db$fude_points)
nb1 <- spdep::knn2nb(spdep::knearneigh(coords1, k = 4))
coords2 <- sf::st_coordinates(sf::st_centroid(voronoi))
nb2 <- spdep::knn2nb(spdep::knearneigh(coords2, k = 4))
par(mfrow = c(1, 2))
plot(nb1, coords1, cex = .010, col = "red")
plot(nb2, coords2, cex = .010, col = "red")
lw1 <- spdep::nb2listw(nb1, style = "W")
(moran_test1 <- spdep::moran.test(db$fude_points$a, listw = lw1))##
## Moran I test under randomisation
##
## data: db$fude_points$a
## weights: lw1
##
## Moran I statistic standard deviate = 13.71, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.2315772329 -0.0006506181 0.0002868963
lw2 <- spdep::nb2listw(nb2, style = "W")
(moran_test2 <- spdep::moran.test(voronoi$a, listw = lw2))##
## Moran I test under randomisation
##
## data: voronoi$a
## weights: lw2
##
## Moran I statistic standard deviate = 13.383, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.2254977438 -0.0006506181 0.0002855370
localmoran <- spdep::localmoran(db$fude_points$a, listw = lw1)
localmoran_df <- as.data.frame(localmoran)
db$fude2 <- db$fude
db$fude2$Ii <- localmoran_df$Ii
gI <- ggplot() +
geom_sf(data = db$fude2, aes(fill = Ii), colour = "black", linewidth = 0) +
scale_fill_gradient2(
low = "blue",
mid = "white",
high = "red",
midpoint = 0,
space = "Lab",
na.value = "grey50",
guide = "colourbar",
aesthetics = "fill"
) +
theme_void()
db$fude2$p_values <- localmoran_df[, "Pr(z != E(Ii))"]
sum(db$fude2$p_values < 0.1) / nrow(db$fude2)## [1] 0.1254876
gp <- ggplot() +
geom_sf(
data = db$fude2,
aes(fill = p_values),
colour = "black",
linewidth = 0
) +
scale_fill_gradient2(
low = "blue",
mid = "white",
high = "red",
midpoint = 0.1,
space = "Lab",
na.value = "grey50",
guide = "colourbar",
aesthetics = "fill"
) +
theme_void()
gI + gp
出典:農林水産省「筆ポリゴンデータ(2025年度公開)」および「農業集落境界データ(2020年度)」を加工して作成。
localmoran <- spdep::localmoran(voronoi$a, listw = lw2)
localmoran_df <- as.data.frame(localmoran)
voronoi$Ii <- localmoran_df$Ii
gI <- ggplot() +
geom_sf(data = voronoi, aes(fill = Ii), colour = "black", linewidth = 0) +
scale_fill_gradient2(
low = "blue",
mid = "white",
high = "red",
midpoint = 0,
space = "Lab",
na.value = "grey50",
guide = "colourbar",
aesthetics = "fill"
) +
theme_void()
voronoi$p_values <- localmoran_df[, "Pr(z != E(Ii))"]
sum(voronoi$p_values < 0.1) / nrow(voronoi)## [1] 0.1274382
gp <- ggplot() +
geom_sf(
data = voronoi,
aes(fill = p_values),
colour = "black",
linewidth = 0
) +
scale_fill_gradient2(
low = "blue",
mid = "white",
high = "red",
midpoint = 0.1,
space = "Lab",
na.value = "grey50",
guide = "colourbar",
aesthetics = "fill"
) +
theme_void()
gI + gp
出典:農林水産省「筆ポリゴンデータ(2025年度公開)」および「農業集落境界データ(2020年度)」を加工して作成。