Praktikum 03 Regresi Spasial

2023-09-19

I. Setting

Abaikan bagian ini. Lansung saja loncat ke Tentang Data . Function biar gak perlu ganti backslash (\) jadi slash (/).

path <- function() gsub  ( "\\\\",  "/",  readClipboard ()  )
#Copy path, Panggil function di console
#Copy r path, paste ke var yang diinginkan

Function biar gak perlu repot buat install("") atau load() package.

#                      -=( Install & Load Package Function )=-
install_load <- function (package1, ...)  {   

   # convert arguments to vector
   packages <- c(package1, ...)

   # start loop to determine if each package is installed
   for(package in packages){

       # if package is installed locally, load
       if(package %in% rownames(installed.packages()))
          do.call('library', list(package))

       # if package is not installed locally, download, then load
       else {
          install.packages(package)
          do.call("library", list(package))
       }
   } 
}

SET Working Directory

A. Tentang Data

Data yang digunakan adalah Data Demografi Kabupaten Sukabumi tahun 2019 yang meliputi Jumlah Penduduk, Kepadatan Penduduk,  Jumlah Desa dan Kelurahan, Dan Luas Wilayah. Data bersumber dari Badan Pusat Statistik dengan jumlah kecamatan sebanyak \(47\) kecamatan.

Source :

Import Data Demografi Kabupaten Sukabumi

install_load('rio')
raw.data <- 
  import("https://raw.githubusercontent.com/Zen-Rofiqy/STA1352-RegSpas/main/03/data.csv")
install_load('dplyr','kableExtra')
## Warning: package 'dplyr' was built under R version 4.2.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
kable(head(raw.data)) %>% 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Kabupaten Kecamatan Kode BPS Kode Kemendagri Jumlah Penduduk Kepadatan Penduduk Jumlah Desa Luas Wilayah (km2/sq.km)
Kabupaten Sukabumi CIEMAS 3202010 32.02.22 51.361 163 7 314,14
Kabupaten Sukabumi CIRACAP 3202020 32.02.26 53.105 396 5 134,22
Kabupaten Sukabumi WALURAN 3202021 32.02.20 28.859 287 9 100,64
Kabupaten Sukabumi SURADE 3202030 32.02.24 78.801 659 6 119,59
Kabupaten Sukabumi CIBITUNG 3202031 32.02.25 28.094 309 9 90,76
Kabupaten Sukabumi JAMPANG KULON 3202040 32.02.21 46.133 662 6 69,66

Import Data Spasial

Shapefile diperoleh dari website data.humdata.org. Membaca data dapat dilakukan dengan menggunakan fungsi st_read() dari paket sf.

install_load('sf')
## Warning: package 'sf' was built under R version 4.2.3
## Linking to GEOS 3.9.3, GDAL 3.5.2, PROJ 8.2.1; sf_use_s2() is TRUE
map_indonesia <- st_read("idn_adm_bps_20200401_shp/idn_admbnda_adm3_bps_20200401.shp", quiet = TRUE)

Gambaran data.

kable(head(map_indonesia)) %>% 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM3_REF ADM3ALT1EN ADM3ALT2EN ADM2_EN ADM2_PCODE ADM1_EN ADM1_PCODE ADM0_EN ADM0_PCODE date validOn validTo geometry
0.2798656 0.0031076 2 X 11 Enam Lingkung ID1306050 NA NA NA Padang Pariaman ID1306 Sumatera Barat ID13 Indonesia ID 2019-12-20 2020-04-01 NA MULTIPOLYGON (((100.2811 -0…
0.7514001 0.0169255 2 X 11 Kayu Tanam ID1306052 NA NA NA Padang Pariaman ID1306 Sumatera Barat ID13 Indonesia ID 2019-12-20 2020-04-01 NA MULTIPOLYGON (((100.3317 -0…
0.6900061 0.0246364 Abab ID1612030 NA NA NA Penukal Abab Lematang Ilir ID1612 Sumatera Selatan ID16 Indonesia ID 2019-12-20 2020-04-01 NA MULTIPOLYGON (((104.2463 -3…
0.6483629 0.0107613 Abang ID5107050 NA NA NA Karang Asem ID5107 Bali ID51 Indonesia ID 2019-12-20 2020-04-01 NA MULTIPOLYGON (((115.6207 -8…
0.2437073 0.0011605 Abeli ID7471021 NA NA NA Kota Kendari ID7471 Sulawesi Tenggara ID74 Indonesia ID 2019-12-20 2020-04-01 NA MULTIPOLYGON (((122.5898 -3…
1.3541886 0.0699569 Abenaho ID9432030 NA NA NA Yalimo ID9432 Papua ID94 Indonesia ID 2019-12-20 2020-04-01 NA MULTIPOLYGON (((139.3201 -3…

Merged Data

Selanjutnya akan dilakukan merged data peubah Kode BPS raw.data degan tambahan ID di depannya dan peubah ADM3_PCODE dari map_indonesia.

mapSukabumi <- map_indonesia %>%
  inner_join(raw.data %>%
                mutate(`Kode BPS` = paste0("ID", `Kode BPS`))
             , by = c("ADM3_PCODE" = "Kode BPS"))

kable(head(mapSukabumi)) %>% 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM3_REF ADM3ALT1EN ADM3ALT2EN ADM2_EN ADM2_PCODE ADM1_EN ADM1_PCODE ADM0_EN ADM0_PCODE date validOn validTo Kabupaten Kecamatan Kode Kemendagri Jumlah Penduduk Kepadatan Penduduk Jumlah Desa Luas Wilayah (km2/sq.km) geometry
0.5634651 0.0062324 Bantargadung ID3202121 NA NA NA Sukabumi ID3202 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01 NA Kabupaten Sukabumi BANTARGADUNG 32.02.04 37.820 499 13 75,85 MULTIPOLYGON (((106.6952 -6…
0.3278686 0.0015397 Bojong Genteng ID3202261 NA NA NA Sukabumi ID3202 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01 NA Kabupaten Sukabumi BOJONG GENTENG 32.02.14 37.695 2177 6 17,32 MULTIPOLYGON (((106.7346 -6…
0.4201519 0.0030563 Caringin ID3202212 NA NA NA Sukabumi ID3202 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01 NA Kabupaten Sukabumi CARINGIN 32.02.31 48.102 1304 9 36,89 MULTIPOLYGON (((106.9068 -6…
0.4838461 0.0046070 Ciambar ID3202221 NA NA NA Sukabumi ID3202 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01 NA Kabupaten Sukabumi CIAMBAR 32.02.47 40.021 652 8 61,34 MULTIPOLYGON (((106.8788 -6…
0.4805193 0.0051767 Cibadak ID3202210 NA NA NA Sukabumi ID3202 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01 NA Kabupaten Sukabumi CIBADAK 32.02.11 118.284 1847 10 64,03 MULTIPOLYGON (((106.7069 -6…
0.5546292 0.0071685 Cibitung ID3202031 NA NA NA Sukabumi ID3202 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01 NA Kabupaten Sukabumi CIBITUNG 32.02.25 28.094 309 9 90,76 MULTIPOLYGON (((106.6076 -7…

Data spasial dan informasi Demografi Kabupaten Sukabumi sudah tersedia dalam satu dataframe. Untuk menyajikan dalam peta choropleth, beberapa paket R dapat digunakan, salah satunya paket ggplot2 dengan fungsi geom_sf().

B. Visualisasi Geospasial

1. Visualisasi Normal

Konsep dari ggplot2 dalam visualisasi data adalah dengan mengkombinasikan data, stat dan geom atau layer. Pada perintah berikut, ggplot() akan menginisiasi layer kosong yang siap ditambahkan layer-layer lain diatasnya. Lalu geom_sf() akan memetakan data data, di mana setiap area/poligon akan diberi gradasi warna sesuai nilai pada kolom JumlahPenduduk.

i. Jumlah Penduduk Kabupaten Sukabumi

install_load('ggplot2')
## Warning: package 'ggplot2' was built under R version 4.2.3
Jumlah_Penduduk <- ggplot() +  
  geom_sf(data=mapSukabumi, aes(fill=`Jumlah Penduduk`, geometry = geometry)) +
  theme_minimal()
Jumlah_Penduduk

Selain kolom Jumlah Penduduk, dapat digunakan kolom Kepadatan Penduduk untuk menggambarkan permasalahan kependudukan di Kabupaten Sukabumi.

ii. Kepadatan Penduduk Kabupaten Sukabumi

Kepadatan_Penduduk <- ggplot() +  
  geom_sf(data=mapSukabumi, aes(fill=`Kepadatan Penduduk`, geometry = geometry)) +
  theme_minimal()
Kepadatan_Penduduk

Sebagai tambahan, disajikan juga data Jumlah Desa dan Kelurahan yang ada di Kabupaten Sukabumi.

iii. Jumlah Desa & Kelurahan Kabupaten Sukabumi

DesaKelurahan <- ggplot() +  
  geom_sf(data=mapSukabumi, aes(fill=`Jumlah Desa`, geometry = geometry)) +
  theme_minimal()
DesaKelurahan

2. Visualisasi Modifikasi

ggplot2 dilengkapi dengan banyak opsi untuk mengatur tampilan dari output. Misalnya scale_fill_gradientn() untuk mengatur gradasi warna (secara otomatis ataupun costum), labs() untuk menambahkan judul grafik maupun keterangan sumbu, theme() untuk mengatur tema (legenda, jenis dan ukuran huruf, dan lain-lain), scale_**_continuous() pengaturan sumbu tegak maupun sumbu mendatar. Selain itu, juga terdapat color Palette yang dapat digunakan menggunakan library RColorBrewer dengan function brewer.pal(n,name). n adalah jumlah warna yang digunakan. Terdapat banyak name yang digunakan, beberapa contohnya antara lain BrBG, PRGn, PiYG, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral.

i. Jumlah Penduduk Kabupaten Sukabumi

install_load('RColorBrewer')
colorPalette1 <- brewer.pal(5, "RdYlBu")

Jumlah_Penduduk + scale_fill_gradientn(colors = colorPalette1,
                       name = "Jumlah Penduduk") +
  labs(title = "Jumlah Penduduk Kabupaten Sukabumi")  +
  theme(legend.text = element_text(size=7),
        legend.title = element_text(size=7),
        axis.text.x = element_text(size = 7),
        axis.text.y = element_text(size = 7),
        title = element_text(size=12, face='bold'))

ii. Kepadatan Penduduk Kabupaten Sukabumi

Kepadatan_Penduduk + scale_fill_gradientn(colors = colorPalette1,
                       name = "Kepadatan Penduduk") +
  labs(title = "Kepadatan Penduduk Kabupaten Sukabumi")  +
  theme(legend.text = element_text(size=7),
        legend.title = element_text(size=7),
        axis.text.x = element_text(size = 7),
        axis.text.y = element_text(size = 7),
        title = element_text(size=12, face='bold'))

iii. Jumlah Desa & Kelurahan Kabupaten Sukabumi

DesaKelurahan + scale_fill_gradientn(colors = colorPalette1,
                       name = "Kepadatan Penduduk") +
  labs(title = "Jumlah Desa/Kelurahan di Kabupaten Sukabumi")  +
  theme(legend.text = element_text(size=7),
        legend.title = element_text(size=7),
        axis.text.x = element_text(size = 7),
        axis.text.y = element_text(size = 7),
        title = element_text(size=12, face='bold')) 

3. Visualisasi Interaktif

Visualisasi geospasial interaktif dapat digunakan dengan packages leaflet . Untuk mendapatkan latitude dan longitude nya dapat dilihat pada Google Maps, Cari lokasi anda, lalu klik kanan.

i. Jumlah Penduduk Kabupaten Sukabumi

install_load('leaflet','htmltools')
## Warning: package 'leaflet' was built under R version 4.2.3
## Warning: package 'htmltools' was built under R version 4.2.3
# membuat custom palette warna
populationPalette1 <- colorNumeric(
  palette = "RdYlBu",
  domain = mapSukabumi$`Jumlah Penduduk`
)

# membuat custom popup
popupLabel <- paste0(
    "<b>Kecamatan ", mapSukabumi$Kecamatan,"</b><br/>", 
    "Jumlah Penduduk (jiwa): ", mapSukabumi$`Jumlah Penduduk`, "<br/>", 
    "Kepadatan Penduduk (jiwa/km2): ", mapSukabumi$`Kepadatan Penduduk`, "<br/>", 
    "Jumlah Desa: ", mapSukabumi$`Jumlah Desa`) %>%
  lapply(HTML)
# membuat peta leaflet
leaflet(mapSukabumi) %>% 
  addProviderTiles(providers$CartoDB.PositronNoLabels, group = "Light Mode") %>%
  addProviderTiles(providers$CartoDB.DarkMatterNoLabels, group = "Dark Mode") %>%
  
  addPolygons(weight = 1,
              opacity = 1, 
              fillOpacity = 0.9,
              label = popupLabel,
              color = ~populationPalette1(`Jumlah Penduduk`),
              highlightOptions = highlightOptions(color = "white", 
                                                  weight = 2, 
                                                  bringToFront = TRUE) ) %>%
  addLegend(position = "bottomright", 
            pal = populationPalette1, 
            values = ~`Jumlah Penduduk`,
            title = "Jumlah\nPenduduk",
            opacity = 1) %>%
  
  addLayersControl(position = 'topright',
                   baseGroups = c("Light Mode", "Dark Mode"),
                   options = layersControlOptions(collapsed = FALSE)) %>%
  
  setView(lat = -7, lng = 106.6, zoom = 9)

ii. Kepadatan Penduduk Kabupaten Sukabumi

# membuat custom palette warna
populationPalette2 <- colorNumeric(
  palette = "RdYlBu",
  domain = mapSukabumi$`Kepadatan Penduduk`
)
# membuat peta leaflet
leaflet(mapSukabumi) %>% 
  addProviderTiles(providers$CartoDB.PositronNoLabels, group = "Light Mode") %>%
  addProviderTiles(providers$CartoDB.DarkMatterNoLabels, group = "Dark Mode") %>%
  
  addPolygons(weight = 1,
              opacity = 1, 
              fillOpacity = 0.9,
              label = popupLabel,
              color = ~populationPalette2(`Kepadatan Penduduk`),
              highlightOptions = highlightOptions(color = "white", 
                                                  weight = 2, 
                                                  bringToFront = TRUE) ) %>%
  addLegend(position = "bottomright", 
            pal = populationPalette2, 
            values = ~`Kepadatan Penduduk`,
            title = "Kepadatan\nPenduduk",
            opacity = 1) %>%
  
  addLayersControl(position = 'topright',
                   baseGroups = c("Light Mode", "Dark Mode"),
                   options = layersControlOptions(collapsed = FALSE)) %>%
  
  setView(lat = -7, lng = 106.6, zoom = 9)

iii. Jumlah Desa & Kelurahan Kabupaten Sukabumi

# membuat custom palette warna
populationPalette3 <- colorNumeric(
  palette = "RdYlBu",
  domain = mapSukabumi$`Jumlah Desa`
)
# membuat peta leaflet
leaflet(mapSukabumi) %>% 
  addProviderTiles(providers$CartoDB.PositronNoLabels, group = "Light Mode") %>%
  addProviderTiles(providers$CartoDB.DarkMatterNoLabels, group = "Dark Mode") %>%
  
  addPolygons(weight = 1,
              opacity = 1, 
              fillOpacity = 0.9,
              label = popupLabel,
              color = ~populationPalette3(`Jumlah Desa`),
              highlightOptions = highlightOptions(color = "white", 
                                                  weight = 2, 
                                                  bringToFront = TRUE) ) %>%
  addLegend(position = "bottomright", 
            pal = populationPalette3, 
            values = ~`Jumlah Desa`,
            title = "Jumlah\nDesa",
            opacity = 1) %>%
  
  addLayersControl(position = 'topright',
                   baseGroups = c("Light Mode", "Dark Mode"),
                   options = layersControlOptions(collapsed = FALSE)) %>%
  
 setView(lat = -7, lng = 106.6, zoom = 9)