Lab
4:描述疾病擴散的時空趨勢
0. 套件載入
library(sf)
library(aspace)
library(tmap)
library(ggplot2)
library(dplyr)
library(RColorBrewer)
1. 讀取資料
setwd("D:/shp")
windowsFonts(TOP = windowsFont("Microsoft JhengHei"))
Dengue <- st_read("point_event.shp")
Reading layer `point_event' from data source `D:\shp\point_event.shp' using driver `ESRI Shapefile'
Simple feature collection with 5735 features and 5 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: 160412 ymin: 2427593 xmax: 328891 ymax: 2785873
CRS: NA
TW <- st_read("Popn_TWN2.shp", options = "ENCODING=BIG5")
options: ENCODING=BIG5
Reading layer `Popn_TWN2' from data source `D:\shp\Popn_TWN2.shp' using driver `ESRI Shapefile'
Simple feature collection with 368 features and 14 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -197572.5 ymin: 2295201 xmax: 606875.6 ymax: 2919551
Projected CRS: TWD97 / TM2 zone 121
st_crs(Dengue) <- st_crs(TW)
2. Task
1:探索不同時間尺度下的時間趨勢
Dengue$period <- ceiling((Dengue$WEEK + 1) / 8)
ggplot(Dengue) +
geom_bar(aes(x = period)) +
xlab("時段") +
ylab("病例數") +
scale_x_continuous(breaks = 1:7) +
theme_minimal() +
theme(text = element_text(family = "TOP"))

ggplot(Dengue) +
geom_bar(aes(x = WEEK)) +
xlab("週次") +
ylab("病例數") +
scale_x_continuous(breaks = seq(0, 55, 5)) +
theme_minimal() +
theme(text = element_text(family = "TOP"))

3. Task
2:探索不同時段下的空間趨勢
KH <- TW[TW$COUNTY == "高雄市", ]
IN <- st_contains(st_union(KH), Dengue, sparse = FALSE)
KH_Dengue <- Dengue[IN, ]
KD <- KH_Dengue %>%
st_drop_geometry()
4. Standard Distance
標準距離
col <- RColorBrewer::brewer.pal(7, "Reds")
map <- tm_shape(
KH,
xlim = c(16, 20) * 10^4,
ylim = c(249, 252) * 10^4
) +
tm_borders()
for (i in 1:7) {
KDi <- KD[KD$period == i, c(2, 3)]
if (nrow(KDi) == 0) next
sddatt <- calc_sdd(points = KDi)
CENTRE <- c(
sddatt$FORPLOTTING$CENTRE.x,
sddatt$FORPLOTTING$CENTRE.y
)
CENTRE.sf <- CENTRE %>%
st_point() %>%
st_sfc() %>%
st_sf()
st_crs(CENTRE.sf) <- st_crs(KH)
rad <- sddatt$ATTRIBUTES$SDD.radius
SDD <- st_buffer(CENTRE.sf, rad)
map <- map +
tm_shape(CENTRE.sf) +
tm_symbols(0.5, col[i]) +
tm_shape(SDD) +
tm_borders(col[i], 2)
}
map +
tm_layout(frame = FALSE)

5. Standard
Deviational Ellipse 標準差橢圓
col <- c("red", "orange", "gold", "green4", "deepskyblue", "blue", "purple")
map <- tm_shape(
KH,
xlim = c(16, 20) * 10^4,
ylim = c(249, 252) * 10^4
) +
tm_borders()
for (i in 1:7) {
KDi <- KD[KD$period == i, c(2, 3)]
if (nrow(KDi) == 0) next
sdeatt <- calc_sde(points = KDi)
CENTRE <- c(
sdeatt[["FORPLOTTING"]][["CENTRE.x"]],
sdeatt[["FORPLOTTING"]][["CENTRE.y"]]
)
CENTRE.sf <- CENTRE %>%
st_point() %>%
st_sfc() %>%
st_sf()
st_crs(CENTRE.sf) <- st_crs(KH)
SDE.data <- data.frame(
x = sdeatt$LOCATIONS$x,
y = sdeatt$LOCATIONS$y
)
SDE.pt.sf <- st_as_sf(SDE.data, coords = c("x", "y"))
st_crs(SDE.pt.sf) <- st_crs(KH)
SDE.poly <- st_cast(st_combine(SDE.pt.sf), "POLYGON")
SDE.sf <- st_sf(SDE.poly)
map <- map +
tm_shape(CENTRE.sf) +
tm_symbols(0.5, col[i]) +
tm_shape(SDE.sf) +
tm_borders(col[i], 2)
}
map +
tm_layout(frame = FALSE)

LS0tDQp0aXRsZTogIkxhYiA077ya5o+P6L+w55a+55eF5pO05pWj55qE5pmC56m66Lao5YuiIg0KYXV0aG9yOiAiR0VPRzIwMTcg56m66ZaT5YiG5p6QIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KLS0tDQoNCiMgTGFiIDTvvJrmj4/ov7Dnlr7nl4Xmk7TmlaPnmoTmmYLnqbrotqjli6INCg0KIyMgMC4g5aWX5Lu26LyJ5YWlDQoNCmBgYHtyIHNldHVwLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShzZikNCmxpYnJhcnkoYXNwYWNlKQ0KbGlicmFyeSh0bWFwKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KYGBgDQoNCiMjIDEuIOiugOWPluizh+aWmQ0KDQpgYGB7cn0NCnNldHdkKCJEOi9zaHAiKQ0KDQp3aW5kb3dzRm9udHMoVE9QID0gd2luZG93c0ZvbnQoIk1pY3Jvc29mdCBKaGVuZ0hlaSIpKQ0KDQpEZW5ndWUgPC0gc3RfcmVhZCgicG9pbnRfZXZlbnQuc2hwIikNClRXIDwtIHN0X3JlYWQoIlBvcG5fVFdOMi5zaHAiLCBvcHRpb25zID0gIkVOQ09ESU5HPUJJRzUiKQ0KDQpzdF9jcnMoRGVuZ3VlKSA8LSBzdF9jcnMoVFcpDQpgYGANCg0KIyMgMi4gVGFzayAx77ya5o6i57Si5LiN5ZCM5pmC6ZaT5bC65bqm5LiL55qE5pmC6ZaT6Lao5YuiDQoNCmBgYHtyfQ0KRGVuZ3VlJHBlcmlvZCA8LSBjZWlsaW5nKChEZW5ndWUkV0VFSyArIDEpIC8gOCkNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChEZW5ndWUpICsNCiAgZ2VvbV9iYXIoYWVzKHggPSBwZXJpb2QpKSArDQogIHhsYWIoIuaZguautSIpICsNCiAgeWxhYigi55eF5L6L5pW4IikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMTo3KSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlRPUCIpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KERlbmd1ZSkgKw0KICBnZW9tX2JhcihhZXMoeCA9IFdFRUspKSArDQogIHhsYWIoIumAseasoSIpICsNCiAgeWxhYigi55eF5L6L5pW4IikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDU1LCA1KSkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJUT1AiKSkNCmBgYA0KDQojIyAzLiBUYXNrIDLvvJrmjqLntKLkuI3lkIzmmYLmrrXkuIvnmoTnqbrplpPotqjli6INCg0KYGBge3J9DQpLSCA8LSBUV1tUVyRDT1VOVFkgPT0gIumrmOmbhOW4giIsIF0NCg0KSU4gPC0gc3RfY29udGFpbnMoc3RfdW5pb24oS0gpLCBEZW5ndWUsIHNwYXJzZSA9IEZBTFNFKQ0KS0hfRGVuZ3VlIDwtIERlbmd1ZVtJTiwgXQ0KDQpLRCA8LSBLSF9EZW5ndWUgJT4lDQogIHN0X2Ryb3BfZ2VvbWV0cnkoKQ0KYGBgDQoNCiMjIDQuIFN0YW5kYXJkIERpc3RhbmNlIOaomea6lui3nembog0KDQpgYGB7cn0NCmNvbCA8LSBSQ29sb3JCcmV3ZXI6OmJyZXdlci5wYWwoNywgIlJlZHMiKQ0KDQptYXAgPC0gdG1fc2hhcGUoDQogIEtILA0KICB4bGltID0gYygxNiwgMjApICogMTBeNCwNCiAgeWxpbSA9IGMoMjQ5LCAyNTIpICogMTBeNA0KKSArDQogIHRtX2JvcmRlcnMoKQ0KDQpmb3IgKGkgaW4gMTo3KSB7DQogIA0KICBLRGkgPC0gS0RbS0QkcGVyaW9kID09IGksIGMoMiwgMyldDQogIA0KICBpZiAobnJvdyhLRGkpID09IDApIG5leHQNCiAgDQogIHNkZGF0dCA8LSBjYWxjX3NkZChwb2ludHMgPSBLRGkpDQogIA0KICBDRU5UUkUgPC0gYygNCiAgICBzZGRhdHQkRk9SUExPVFRJTkckQ0VOVFJFLngsDQogICAgc2RkYXR0JEZPUlBMT1RUSU5HJENFTlRSRS55DQogICkNCiAgDQogIENFTlRSRS5zZiA8LSBDRU5UUkUgJT4lDQogICAgc3RfcG9pbnQoKSAlPiUNCiAgICBzdF9zZmMoKSAlPiUNCiAgICBzdF9zZigpDQogIA0KICBzdF9jcnMoQ0VOVFJFLnNmKSA8LSBzdF9jcnMoS0gpDQogIA0KICByYWQgPC0gc2RkYXR0JEFUVFJJQlVURVMkU0RELnJhZGl1cw0KICBTREQgPC0gc3RfYnVmZmVyKENFTlRSRS5zZiwgcmFkKQ0KICANCiAgbWFwIDwtIG1hcCArDQogICAgdG1fc2hhcGUoQ0VOVFJFLnNmKSArDQogICAgdG1fc3ltYm9scygwLjUsIGNvbFtpXSkgKw0KICAgIHRtX3NoYXBlKFNERCkgKw0KICAgIHRtX2JvcmRlcnMoY29sW2ldLCAyKQ0KfQ0KDQptYXAgKw0KICB0bV9sYXlvdXQoZnJhbWUgPSBGQUxTRSkNCmBgYA0KDQojIyA1LiBTdGFuZGFyZCBEZXZpYXRpb25hbCBFbGxpcHNlIOaomea6luW3ruapouWckw0KDQpgYGB7cn0NCmNvbCA8LSBjKCJyZWQiLCAib3JhbmdlIiwgImdvbGQiLCAiZ3JlZW40IiwgImRlZXBza3libHVlIiwgImJsdWUiLCAicHVycGxlIikNCg0KbWFwIDwtIHRtX3NoYXBlKA0KICBLSCwNCiAgeGxpbSA9IGMoMTYsIDIwKSAqIDEwXjQsDQogIHlsaW0gPSBjKDI0OSwgMjUyKSAqIDEwXjQNCikgKw0KICB0bV9ib3JkZXJzKCkNCg0KZm9yIChpIGluIDE6Nykgew0KICANCiAgS0RpIDwtIEtEW0tEJHBlcmlvZCA9PSBpLCBjKDIsIDMpXQ0KICANCiAgaWYgKG5yb3coS0RpKSA9PSAwKSBuZXh0DQogIA0KICBzZGVhdHQgPC0gY2FsY19zZGUocG9pbnRzID0gS0RpKQ0KICANCiAgQ0VOVFJFIDwtIGMoDQogICAgc2RlYXR0W1siRk9SUExPVFRJTkciXV1bWyJDRU5UUkUueCJdXSwNCiAgICBzZGVhdHRbWyJGT1JQTE9UVElORyJdXVtbIkNFTlRSRS55Il1dDQogICkNCiAgDQogIENFTlRSRS5zZiA8LSBDRU5UUkUgJT4lDQogICAgc3RfcG9pbnQoKSAlPiUNCiAgICBzdF9zZmMoKSAlPiUNCiAgICBzdF9zZigpDQogIA0KICBzdF9jcnMoQ0VOVFJFLnNmKSA8LSBzdF9jcnMoS0gpDQogIA0KICBTREUuZGF0YSA8LSBkYXRhLmZyYW1lKA0KICAgIHggPSBzZGVhdHQkTE9DQVRJT05TJHgsDQogICAgeSA9IHNkZWF0dCRMT0NBVElPTlMkeQ0KICApDQogIA0KICBTREUucHQuc2YgPC0gc3RfYXNfc2YoU0RFLmRhdGEsIGNvb3JkcyA9IGMoIngiLCAieSIpKQ0KICBzdF9jcnMoU0RFLnB0LnNmKSA8LSBzdF9jcnMoS0gpDQogIA0KICBTREUucG9seSA8LSBzdF9jYXN0KHN0X2NvbWJpbmUoU0RFLnB0LnNmKSwgIlBPTFlHT04iKQ0KICBTREUuc2YgPC0gc3Rfc2YoU0RFLnBvbHkpDQogIA0KICBtYXAgPC0gbWFwICsNCiAgICB0bV9zaGFwZShDRU5UUkUuc2YpICsNCiAgICB0bV9zeW1ib2xzKDAuNSwgY29sW2ldKSArDQogICAgdG1fc2hhcGUoU0RFLnNmKSArDQogICAgdG1fYm9yZGVycyhjb2xbaV0sIDIpDQp9DQoNCm1hcCArDQogIHRtX2xheW91dChmcmFtZSA9IEZBTFNFKQ0KYGBg