library(spdep) # Analisis data spasial: spatial autocorrelation, spatial regression
## Warning: package 'spdep' was built under R version 4.5.3
## Loading required package: spData
## Warning: package 'spData' was built under R version 4.5.3
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
## Loading required package: sf
## Warning: package 'sf' was built under R version 4.5.3
## Linking to GEOS 3.14.1, GDAL 3.12.1, PROJ 9.7.1; sf_use_s2() is TRUE
library(sp) # Struktur data untuk manipulasi data spasial (poligon, titik, dll)
## Warning: package 'sp' was built under R version 4.5.3
library(sf) # Mengelola data spasial dengan standar Simple Features (sf)
library(readxl) # Membaca file Excel (format .xls dan .xlsx)
library(openxlsx) # Membuat, membaca, dan menulis file Excel (lebih cepat dari readxl)
## Warning: package 'openxlsx' was built under R version 4.5.3
library(corrplot) # Membuat visualisasi korelasi dalam bentuk plot
## Warning: package 'corrplot' was built under R version 4.5.3
## corrplot 0.95 loaded
library(DescTools) # Kumpulan fungsi statistik deskriptif dan inferensial
## Warning: package 'DescTools' was built under R version 4.5.3
library(nortest) # Melakukan uji normalitas (Anderson-Darling, Lilliefors, dll)
library(car) # Fungsi regresi linear dan diagnostik model (vif, durbinWatsonTest, dll)
## Warning: package 'car' was built under R version 4.5.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.5.3
##
## Attaching package: 'car'
## The following object is masked from 'package:DescTools':
##
## Recode
library(spatialreg) # Estimasi model regresi spasial (SAR, SEM, SLM)
## Warning: package 'spatialreg' was built under R version 4.5.3
## Loading required package: Matrix
##
## Attaching package: 'spatialreg'
## The following objects are masked from 'package:spdep':
##
## get.ClusterOption, get.coresOption, get.mcOption,
## get.VerboseOption, get.ZeroPolicyOption, set.ClusterOption,
## set.coresOption, set.mcOption, set.VerboseOption,
## set.ZeroPolicyOption
library(lmtest) # Fungsi untuk menguji model regresi (heteroskedastisitas, serial correlation)
## Warning: package 'lmtest' was built under R version 4.5.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.5.3
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(dplyr) # Manipulasi data seperti filter, select, mutate, dan summarise
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
##
## recode
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(RColorBrewer) # Skema palet warna yang dapat digunakan dalam visualisasi
library(ggplot2) # Membuat grafik statistik dengan pendekatan Grammar of Graphics
## Warning: package 'ggplot2' was built under R version 4.5.3
Data yang digunakan adalah data sosial ekonomi dari kab/kota di Provinsi Sumatera Utara. Peubah - peubah yang digunakan adalah Y = Persentase penduduk miskin X1 = Rata - rata lama sekolah X2 = Pengeluaran per kapita X3 = Umur harapan hidup X4 = Harapan lama sekolah
data <- read_excel("C:\\Users\\ASUS\\Downloads\\Sumut.xlsx")
head(data)
## # A tibble: 6 × 8
## `NAMA KABUPATEN` PPM RLS PPK UHH HLS lat long
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Asahan 8.21 8.83 11795 73.4 12.6 2.82 99.6
## 2 Batu Bara 11.4 8.5 10933 72.6 13.1 3.17 99.5
## 3 Dairi 7.47 9.88 10969 74.1 13.3 2.87 98.3
## 4 Deli Serdang 3.44 10.3 12890 73.6 13.4 3.42 98.7
## 5 Humbang Hasundutan 8.69 10.0 8476 74.1 13.3 2.20 98.6
## 6 Karo 7.98 10.0 12779 74.2 13.2 3.11 98.3
dim(data)
## [1] 33 8
Data terdiri dari 33 kab/kota di Provinsi Sumatera Utara
Berikut ini adalah peta Provinsi Sumatera Utara:
peta <- st_read("D:/Sem 5/RegSpas/Tugas/UAS/RBI_50K_2023_Sumatera Utara.x26272")
## Reading layer `RBI_50K_2023_Sumatera Utara' from data source
## `D:\Sem 5\RegSpas\Tugas\UAS\RBI_50K_2023_Sumatera Utara.x26272'
## using driver `ESRI Shapefile'
## Simple feature collection with 38 features and 25 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 97.05747 ymin: -0.6387974 xmax: 100.4345 ymax: 4.302547
## Geodetic CRS: WGS 84
# Filter data untuk menghapus entri dengan NAMOBJ "Sumatera Utara"
peta <- subset(peta, NAMOBJ != "Sumatera Utara")
peta
## Simple feature collection with 33 features and 25 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 97.05747 ymin: -0.6387974 xmax: 100.4345 ymax: 4.302547
## Geodetic CRS: WGS 84
## First 10 features:
## NAMOBJ FCODE REMARK METADATA SRS_ID
## 1 Asahan BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 2 Batu Bara BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 3 Dairi BA03050040 <Null> TASWIL5000020230907KABKOTA 4326
## 4 Deli Serdang BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 5 Humbang Hasundutan BA03050040 <Null> TASWIL5000020230907KABKOTA 4326
## 6 Karo BA03050040 <Null> TASWIL5000020230907KABKOTA 4326
## 7 Kota Binjai BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 8 Kota Gunungsitoli BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 9 Kota Medan BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 10 Kota Padang Sidempuan BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## KDBBPS KDCBPS KDCPUM KDEBPS KDEPUM KDPBPS KDPKAB KDPPUM LUASWH TIPADM
## 1 <NA> <NA> <NA> <NA> <NA> <NA> 12.09 12 3737.82989 4
## 2 <NA> <NA> <NA> <NA> <NA> <NA> 12.19 12 888.14237 4
## 3 <NA> <NA> <NA> <NA> <NA> <NA> 12.11 12 2083.60430 4
## 4 <NA> <NA> <NA> <NA> <NA> <NA> 12.07 12 2581.23236 4
## 5 <NA> <NA> <NA> <NA> <NA> <NA> 12.16 12 2351.51422 4
## 6 <NA> <NA> <NA> <NA> <NA> <NA> 12.06 12 2206.87627 4
## 7 <NA> <NA> <NA> <NA> <NA> <NA> 12.75 12 93.77007 5
## 8 <NA> <NA> <NA> <NA> <NA> <NA> 12.78 12 208.68440 5
## 9 <NA> <NA> <NA> <NA> <NA> <NA> 12.71 12 279.29043 5
## 10 <NA> <NA> <NA> <NA> <NA> <NA> 12.77 12 159.29837 5
## WADMKC WADMKD WADMKK WADMPR WIADKC WIADKK
## 1 <NA> <NA> Asahan Sumatera Utara <NA> <NA>
## 2 <NA> <NA> Batu Bara Sumatera Utara <NA> Asahan
## 3 <NA> <NA> Dairi Sumatera Utara <NA> <NA>
## 4 <NA> <NA> Deli Serdang Sumatera Utara <NA> <NA>
## 5 <NA> <NA> Humbang Hasundutan Sumatera Utara <NA> Tapanuli Utara
## 6 <NA> <NA> Karo Sumatera Utara <NA> <NA>
## 7 <NA> <NA> Kota Binjai Sumatera Utara <NA> <NA>
## 8 <NA> <NA> Kota Gunungsitoli Sumatera Utara <NA> Nias
## 9 <NA> <NA> Kota Medan Sumatera Utara <NA> <NA>
## 10 <NA> <NA> Kota Padang Sidempuan Sumatera Utara <NA> Tapanuli Selatan
## WIADPR WIADKD SHAPE_Leng SHAPE_Area geometry
## 1 <NA> 0 3.7686895 0.304020059 MULTIPOLYGON (((99.73741 3....
## 2 <NA> 0 2.4191333 0.072265659 MULTIPOLYGON (((99.72279 3....
## 3 <NA> 0 2.3768296 0.169476903 MULTIPOLYGON (((98.57832 2....
## 4 <NA> 0 4.5635597 0.210079808 MULTIPOLYGON (((98.74528 3....
## 5 <NA> 0 2.3376370 0.191184267 MULTIPOLYGON (((98.84978 2....
## 6 <NA> 0 2.7342061 0.179547636 MULTIPOLYGON (((98.47139 3....
## 7 <NA> 0 0.6512809 0.007632627 MULTIPOLYGON (((98.49823 3....
## 8 <NA> 0 0.9416521 0.016957951 MULTIPOLYGON (((97.65328 1....
## 9 <NA> 0 1.7186495 0.022734196 MULTIPOLYGON (((98.74528 3....
## 10 <NA> 0 0.4740388 0.012945257 MULTIPOLYGON (((99.31969 1....
plot(peta, main = "Peta Provinsi Sumatera Utara")
## Warning: plotting the first 10 out of 25 attributes; use max.plot = 25 to plot
## all
plot(peta[1], main = "Peta Provinsi Sumatera Utara (Kab/Kota)")
data[!complete.cases(data),]
## # A tibble: 0 × 8
## # ℹ 8 variables: NAMA KABUPATEN <chr>, PPM <dbl>, RLS <dbl>, PPK <dbl>,
## # UHH <dbl>, HLS <dbl>, lat <dbl>, long <dbl>
Hasil pengecekan missing value menunjukkan bahwa tidak terdapat missing value pada data.
summary(data)
## NAMA KABUPATEN PPM RLS PPK
## Length:33 Min. : 3.440 Min. : 6.140 Min. : 6382
## Class :character 1st Qu.: 7.870 1st Qu.: 8.840 1st Qu.: 9395
## Mode :character Median : 8.540 Median : 9.510 Median :11632
## Mean : 9.925 Mean : 9.387 Mean :10911
## 3rd Qu.:11.420 3rd Qu.:10.090 3rd Qu.:12115
## Max. :22.810 Max. :11.620 Max. :15674
## UHH HLS lat long
## Min. :71.52 Min. :12.64 Min. :0.7086 Min. : 97.39
## 1st Qu.:72.30 1st Qu.:13.25 1st Qu.:1.5759 1st Qu.: 98.31
## Median :73.65 Median :13.42 Median :2.3466 Median : 99.06
## Mean :73.25 Mean :13.48 Mean :2.2944 Mean : 98.89
## 3rd Qu.:74.10 3rd Qu.:13.70 3rd Qu.:2.9782 3rd Qu.: 99.37
## Max. :74.76 Max. :14.78 Max. :3.8654 Max. :100.17
# Menunjukkan kab/kota dengan Y/PPM tertinggi
wilayah_max <- data %>%
arrange(desc(data$PPM)) %>%
slice(1)
print(paste("Kabupaten/kota dengan Y tertinggi adalah", wilayah_max$`NAMA KABUPATEN`))
## [1] "Kabupaten/kota dengan Y tertinggi adalah Nias Barat"
# Menunjukkan kab/kota dengan Y/PPM terendah
wilayah_min <- data %>%
arrange(data$PPM) %>%
slice(1)
print(paste("Kabupaten/kota dengan Y terendah adalah", wilayah_min$`NAMA KABUPATEN`))
## [1] "Kabupaten/kota dengan Y terendah adalah Deli Serdang"
Berdasarkan output di atas diketahui bahwa Y/PPM tertinggi di Provinsi Sumatera Utara adalah Nias Barat sebesar 22.81, sedangkan Y/PPM terendah adalah Deli Serdang sebesar 3.44. Rata-rata Y/PPM kab/kota di Provinsi Sumatera Utara adalah 9.925.
par(mfrow=c(1,5))
boxplot(data$PPM,main = "Sebaran Y/PPM", col="dodgerblue")
boxplot(data$RLS,main = "Sebaran X1/RLS", col="dodgerblue")
boxplot(data$PPK,main = "Sebaran X2/PPK", col="dodgerblue")
boxplot(data$UHH,main = "Sebaran X3/UHH", col="dodgerblue")
boxplot(data$HLS,main = "Sebaran X4/HLS", col="dodgerblue")
Berdasarkan boxplot di atas dapat diketahui bahwa pada PPM, RLS, dan HLS terdapat pencilan.
Scatter plot ini untuk melihat pola hubungan Y dengan masing-masing peubah X1, X2, X3, dan X4 serta pola hubungan antar peubah X.
pairs(data[,2:6], pch = 19, lower.panel = NULL)
Berdasarkan scatter plot di atas, hubungan antara peubah independent dengan dependent serta antar peubah independent kurang terlihat jelas polanya.
corrplot(cor(data[,2:6]), method = "number")
Berdasarkan scatter plot ini, diperoleh nilai korelasi antara PPM atau peubah dependent dengan peubah independent yaitu ada hubungan negatif. Lalu, hubungan antar peubah independent bernilai positif.
cor(data[,2:6])
## PPM RLS PPK UHH HLS
## PPM 1.0000000 -0.7441833 -0.7214875 -0.3481624 -0.3068192
## RLS -0.7441833 1.0000000 0.7722856 0.6529525 0.5728017
## PPK -0.7214875 0.7722856 1.0000000 0.5691507 0.2973662
## UHH -0.3481624 0.6529525 0.5691507 1.0000000 0.2446364
## HLS -0.3068192 0.5728017 0.2973662 0.2446364 1.0000000
# Gabungkan Data
combined_data <- peta %>%
left_join(data, by = c("NAMOBJ" = "NAMA KABUPATEN"))
combined_data
## Simple feature collection with 33 features and 32 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 97.05747 ymin: -0.6387974 xmax: 100.4345 ymax: 4.302547
## Geodetic CRS: WGS 84
## First 10 features:
## NAMOBJ FCODE REMARK METADATA SRS_ID
## 1 Asahan BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 2 Batu Bara BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 3 Dairi BA03050040 <Null> TASWIL5000020230907KABKOTA 4326
## 4 Deli Serdang BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 5 Humbang Hasundutan BA03050040 <Null> TASWIL5000020230907KABKOTA 4326
## 6 Karo BA03050040 <Null> TASWIL5000020230907KABKOTA 4326
## 7 Kota Binjai BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 8 Kota Gunungsitoli BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 9 Kota Medan BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## 10 Kota Padang Sidempuan BA03050040 <NA> TASWIL5000020230907KABKOTA 4326
## KDBBPS KDCBPS KDCPUM KDEBPS KDEPUM KDPBPS KDPKAB KDPPUM LUASWH TIPADM
## 1 <NA> <NA> <NA> <NA> <NA> <NA> 12.09 12 3737.82989 4
## 2 <NA> <NA> <NA> <NA> <NA> <NA> 12.19 12 888.14237 4
## 3 <NA> <NA> <NA> <NA> <NA> <NA> 12.11 12 2083.60430 4
## 4 <NA> <NA> <NA> <NA> <NA> <NA> 12.07 12 2581.23236 4
## 5 <NA> <NA> <NA> <NA> <NA> <NA> 12.16 12 2351.51422 4
## 6 <NA> <NA> <NA> <NA> <NA> <NA> 12.06 12 2206.87627 4
## 7 <NA> <NA> <NA> <NA> <NA> <NA> 12.75 12 93.77007 5
## 8 <NA> <NA> <NA> <NA> <NA> <NA> 12.78 12 208.68440 5
## 9 <NA> <NA> <NA> <NA> <NA> <NA> 12.71 12 279.29043 5
## 10 <NA> <NA> <NA> <NA> <NA> <NA> 12.77 12 159.29837 5
## WADMKC WADMKD WADMKK WADMPR WIADKC WIADKK
## 1 <NA> <NA> Asahan Sumatera Utara <NA> <NA>
## 2 <NA> <NA> Batu Bara Sumatera Utara <NA> Asahan
## 3 <NA> <NA> Dairi Sumatera Utara <NA> <NA>
## 4 <NA> <NA> Deli Serdang Sumatera Utara <NA> <NA>
## 5 <NA> <NA> Humbang Hasundutan Sumatera Utara <NA> Tapanuli Utara
## 6 <NA> <NA> Karo Sumatera Utara <NA> <NA>
## 7 <NA> <NA> Kota Binjai Sumatera Utara <NA> <NA>
## 8 <NA> <NA> Kota Gunungsitoli Sumatera Utara <NA> Nias
## 9 <NA> <NA> Kota Medan Sumatera Utara <NA> <NA>
## 10 <NA> <NA> Kota Padang Sidempuan Sumatera Utara <NA> Tapanuli Selatan
## WIADPR WIADKD SHAPE_Leng SHAPE_Area PPM RLS PPK UHH HLS lat
## 1 <NA> 0 3.7686895 0.304020059 8.21 8.83 11795 73.39 12.64 2.8175
## 2 <NA> 0 2.4191333 0.072265659 11.38 8.50 10933 72.63 13.11 3.1741
## 3 <NA> 0 2.3768296 0.169476903 7.47 9.88 10969 74.13 13.32 2.8676
## 4 <NA> 0 4.5635597 0.210079808 3.44 10.28 12890 73.65 13.39 3.4202
## 5 <NA> 0 2.3376370 0.191184267 8.69 10.01 8476 74.07 13.32 2.1989
## 6 <NA> 0 2.7342061 0.179547636 7.98 10.03 12779 74.16 13.25 3.1053
## 7 <NA> 0 0.6512809 0.007632627 4.79 11.19 11567 74.18 14.17 3.6135
## 8 <NA> 0 0.9416521 0.016957951 14.78 8.65 8635 74.03 13.78 1.2805
## 9 <NA> 0 1.7186495 0.022734196 8.00 11.62 15674 74.76 14.78 3.5952
## 10 <NA> 0 0.4740388 0.012945257 6.85 11.12 11552 73.54 14.59 1.3722
## long geometry
## 1 99.6341 MULTIPOLYGON (((99.73741 3....
## 2 99.5006 MULTIPOLYGON (((99.72279 3....
## 3 98.2651 MULTIPOLYGON (((98.57832 2....
## 4 98.7041 MULTIPOLYGON (((98.74528 3....
## 5 98.5721 MULTIPOLYGON (((98.84978 2....
## 6 98.2651 MULTIPOLYGON (((98.47139 3....
## 7 98.5025 MULTIPOLYGON (((98.49823 3....
## 8 97.6147 MULTIPOLYGON (((97.65328 1....
## 9 98.6722 MULTIPOLYGON (((98.74528 3....
## 10 99.2730 MULTIPOLYGON (((99.31969 1....
library(tmap)
## Warning: package 'tmap' was built under R version 4.5.3
## Registered S3 method overwritten by 'stars':
## method from
## st_interpolate_aw.stars sf
combined_data <- st_make_valid(combined_data)
tmap_mode("plot")
## ℹ tmap modes "plot" - "view"
## ℹ toggle with `tmap::ttm()`
## This message is displayed once per session.
# Membuat peta dengan jumlah PPM dengan label nama kabupaten/kota
tm_shape(combined_data) +
tm_polygons("PPM", style = "quantile", n = 4,
title = "Jumlah PPM Sumatera Utara") +
tm_text("NAMOBJ", size = 0.4, col = "black") + # Tambahkan nama kabupaten/kota
tm_layout(title = "Peta Jumlah PPM Sumatera Utara",
legend.outside = TRUE,
legend.title.size = 1,
legend.text.size = 0.8)
##
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_polygons()`: instead of `style = "quantile"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style', 'n' to 'tm_scale_intervals(<HERE>)'[v3->v4] `tm_polygons()`: migrate the argument(s) related to the legend of the
## map variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'[v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(title = )`[plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.
Berdasarkan plot di atas, dapat dilihat adanya kecenderungan pola bergerombol dengan wilayah tetangganya pada peubah PPM/Y di Provinsi Sumatera Utara. Hal ini tampak dari gradasi warna yang cenderung mengumpul. Artinya terdapat kemiripan antar kabupaten/kota terhadap sebaran PPM/Y sehingga terindikasi adanya autokorelasi spasial positif.
# Membuat peta dengan jumlah RLS dengan label nama kabupaten/kota
tm_shape(combined_data) +
tm_polygons("RLS", style = "quantile", n = 4,
title = "Jumlah RLS Sumatera Utara") +
tm_text("NAMOBJ", size = 0.4, col = "black") + # Tambahkan nama kabupaten/kota
tm_layout(title = "Peta Jumlah RLS Sumatera Utara",
legend.outside = TRUE,
legend.title.size = 1,
legend.text.size = 0.8)
##
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_polygons()`: instead of `style = "quantile"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style', 'n' to 'tm_scale_intervals(<HERE>)'
## [v3->v4] `tm_polygons()`: migrate the argument(s) related to the legend of the
## map variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'
## [v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(title = )`
## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.
# Membuat peta dengan jumlah PPK dengan label nama kabupaten/kota
tm_shape(combined_data) +
tm_polygons("PPK", style = "quantile", n = 4,
title = "Jumlah PPK Sumatera Utara") +
tm_text("NAMOBJ", size = 0.4, col = "black") + # Tambahkan nama kabupaten/kota
tm_layout(title = "Peta Jumlah PPK Sumatera Utara",
legend.outside = TRUE,
legend.title.size = 1,
legend.text.size = 0.8)
##
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_polygons()`: instead of `style = "quantile"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style', 'n' to 'tm_scale_intervals(<HERE>)'
## [v3->v4] `tm_polygons()`: migrate the argument(s) related to the legend of the
## map variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'
## [v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(title = )`
## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.
# Membuat peta dengan jumlah UHH dengan label nama kabupaten/kota
tm_shape(combined_data) +
tm_polygons("UHH", style = "quantile", n = 4,
title = "Jumlah UHH Sumatera Utara") +
tm_text("NAMOBJ", size = 0.4, col = "black") + # Tambahkan nama kabupaten/kota
tm_layout(title = "Peta Jumlah UHH Sumatera Utara",
legend.outside = TRUE,
legend.title.size = 1,
legend.text.size = 0.8)
##
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_polygons()`: instead of `style = "quantile"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style', 'n' to 'tm_scale_intervals(<HERE>)'
## [v3->v4] `tm_polygons()`: migrate the argument(s) related to the legend of the
## map variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'
## [v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(title = )`
## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.
# Membuat peta dengan jumlah HLS dengan label nama kabupaten/kota
tm_shape(combined_data) +
tm_polygons("HLS", style = "quantile", n = 4,
title = "Jumlah HLS Sumatera Utara") +
tm_text("NAMOBJ", size = 0.4, col = "black") + # Tambahkan nama kabupaten/kota
tm_layout(title = "Peta Jumlah HLS Sumatera Utara",
legend.outside = TRUE,
legend.title.size = 1,
legend.text.size = 0.8)
##
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_polygons()`: instead of `style = "quantile"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style', 'n' to 'tm_scale_intervals(<HERE>)'
## [v3->v4] `tm_polygons()`: migrate the argument(s) related to the legend of the
## map variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'
## [v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(title = )`
## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.
Matriks pembobot spasial dapat berdasarkan aspek ketetanggaan dan aspek jarak. Matriks ketetanggaan yang dicobakan dalam analisis ini yaitu rook contiguity dan queen contiguity sedangkan berdasarkan aspek jarak digunakan k-nearest neighbor (KNN), radial distance weight (RDW), inverse distance weight (IDW), dan exponential distance weight (IDW).
Matriks pembobot spasial queen contiguity lebih luas daripada rook contiguity karena wilayah-wilayah dianggap bertetangga jika mereka berbagi sisi atau titik sudut.
Karakteristik:
Dua poligon dianggap bertetangga jika mereka berbagi batas (baik sisi maupun titik sudut).
Jika dua wilayah memiliki titik atau sisi yang bersinggungan, maka elemen matriks pembobot diberi nilai 1.
# Memvalidasi geometri dalam objek sf
peta <- st_make_valid(peta)
# Konversi objek sf ke objek sp
sp.peta <- as(peta, "Spatial")
# Mengakses slot polygons dari objek sp
sp.polygons <- SpatialPolygons(sp.peta@polygons)
queen <- poly2nb(sp.peta, queen = T)
## Warning in poly2nb(sp.peta, queen = T): neighbour object has 2 sub-graphs;
## if this sub-graph count seems unexpected, try increasing the snap argument.
queen
## Neighbour list object:
## Number of regions: 33
## Number of nonzero links: 118
## Percentage nonzero weights: 10.83563
## Average number of links: 3.575758
## 2 disjoint connected subgraphs
W.queen <- nb2listw(queen, style='W',zero.policy=TRUE)
qc = moran.test(data$PPM, W.queen,randomisation=T,
alternative="greater", zero.policy = TRUE)
qc
##
## Moran I test under randomisation
##
## data: data$PPM
## weights: W.queen
##
## Moran I statistic standard deviate = 6.2127, p-value = 2.604e-10
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.76773982 -0.03125000 0.01653951
moran.mc(data$PPM, listw = W.queen, zero.policy = TRUE, nsim = 99)
##
## Monte-Carlo simulation of Moran I
##
## data: data$PPM
## weights: W.queen
## number of simulations + 1: 100
##
## statistic = 0.76774, observed rank = 100, p-value = 0.01
## alternative hypothesis: greater
Matriks pembobot spasial rook contiguity didasarkan pada konsep bahwa dua wilayah dianggap bertetangga jika mereka berbagi sisi batas.
Karakteristik:
Dua poligon dianggap bertetangga jika mereka memiliki batas yang bersinggungan di sepanjang sisi yang sama (tidak hanya di titik sudut).
Jika dua wilayah bertetangga, nilai elemen matriks pembobot adalah 1; jika tidak, maka nilai elemen tersebut adalah 0.
rook <- poly2nb(sp.peta, queen = F)
## Warning in poly2nb(sp.peta, queen = F): neighbour object has 2 sub-graphs;
## if this sub-graph count seems unexpected, try increasing the snap argument.
rook
## Neighbour list object:
## Number of regions: 33
## Number of nonzero links: 118
## Percentage nonzero weights: 10.83563
## Average number of links: 3.575758
## 2 disjoint connected subgraphs
W.rook <- nb2listw(rook, style='W',zero.policy=TRUE)
rc = moran.test(data$PPM, W.rook,randomisation=T,
alternative="greater", zero.policy = TRUE)
rc
##
## Moran I test under randomisation
##
## data: data$PPM
## weights: W.rook
##
## Moran I statistic standard deviate = 6.2127, p-value = 2.604e-10
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.76773982 -0.03125000 0.01653951
moran.mc(data$PPM, listw = W.rook, zero.policy = TRUE, nsim = 99)
##
## Monte-Carlo simulation of Moran I
##
## data: data$PPM
## weights: W.rook
## number of simulations + 1: 100
##
## statistic = 0.76774, observed rank = 100, p-value = 0.01
## alternative hypothesis: greater
# Menghitung centroid dari setiap unit spasial
centroids <- st_centroid(peta)
## Warning: st_centroid assumes attributes are constant over geometries
# Ekstrak koordinat centroid
longlat <- st_coordinates(centroids)
# Tambahkan koordinat long dan lat ke objek peta
peta$long <- longlat[, 1] # Kolom X (long)
peta$lat <- longlat[, 2] # Kolom Y (lat)
coords <- peta[c("long","lat")]
#class(coords)
koord <- as.data.frame(coords)
jarak<-dist(longlat, method = "euclidean")
m.jarak<-as.matrix(jarak)
Matriks bobot k-nearest neighbor menentukan tetangga berdasarkan sejumlah tetangga terdekat (k) yang dipilih untuk setiap titik atau wilayah.
Karakteristik:
Untuk setiap titik/wilayah, tetangga yang dipilih adalah titik/wilayah yang paling dekat (berdasarkan jarak Euclidean atau jarak lainnya).
Nilai matriks bobot diberikan 1 jika suatu titik berada dalam k tetangga terdekat dari titik lain, dan 0 jika tidak.
Contoh: Misalkan k = 3, artinya setiap titik akan memiliki 3 tetangga terdekat. Matriks bobot akan memiliki 1 di elemen yang mewakili tetangga terdekat, dan 0 di elemen lainnya.
Digunakan 5 tetangga terdekat (k=5).
# k = 5
W.knn<-knn2nb(knearneigh(longlat,k=5,longlat=TRUE))
W.knn.s <- nb2listw(W.knn,style='W')
MI.knn <- moran(data$PPM,W.knn.s,n=length(W.knn.s$neighbours),S0=Szero(W.knn.s))
mt1 = moran.test(data$PPM,W.knn.s,randomisation = T,alternative = "greater")
mt1
##
## Moran I test under randomisation
##
## data: data$PPM
## weights: W.knn.s
##
## Moran I statistic standard deviate = 6.9406, p-value = 1.952e-12
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.603119698 -0.031250000 0.008353978
Digunakan 3 tetangga terdekat (k=3).
# k = 3
W.knn.3 <-knn2nb(knearneigh(longlat,k=3,longlat=TRUE))
## Warning in knn2nb(knearneigh(longlat, k = 3, longlat = TRUE)): neighbour object
## has 2 sub-graphs
W.knn.3.s <- nb2listw(W.knn,style='W')
MI.knn.3 <- moran(data$PPM,W.knn.s,n=length(W.knn.s$neighbours),S0=Szero(W.knn.s))
mt1.3 = moran.test(data$PPM,W.knn.s,randomisation = T,alternative = "greater")
mt1.3
##
## Moran I test under randomisation
##
## data: data$PPM
## weights: W.knn.s
##
## Moran I statistic standard deviate = 6.9406, p-value = 1.952e-12
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.603119698 -0.031250000 0.008353978
Matriks bobot radial distance mendefinisikan tetangga berdasarkan jarak geografis. Setiap titik atau wilayah dianggap sebagai tetangga jika jaraknya dari titik/wilayah pusat berada dalam jarak radius tertentu.
Karakteristik:
Tetangga dipilih berdasarkan jarak dari titik pusat hingga ke titik lain dalam radius tertentu (r). Jika titik lain berada dalam radius tersebut, maka nilai dalam matriks bobot adalah 1; jika tidak, maka 0.
Jarak dihitung berdasarkan metrik spasial seperti jarak Euclidean.
Contoh: Jika radius yang ditentukan adalah 10 km, maka setiap titik atau wilayah yang berada dalam jarak 10 km dari titik pusat akan dianggap sebagai tetangga, dan bobot matriks akan diberikan 1.
Ditentukan nilai ambang dmax adalah 105 km (d=105). Nilai ini menggambarkan nilai jarak maksimum untuk menentukan dependensi spasial anatar lokasi-i terhadap lokasi-j.
W.rdw <-dnearneigh(longlat,0,105,longlat=TRUE)
## Warning in dnearneigh(longlat, 0, 105, longlat = TRUE): neighbour object has 2
## sub-graphs
W.rdw.s <- nb2listw(W.rdw,style="W", zero.policy=TRUE)
MI.rdw <- moran(data$PPM,W.rdw.s,n=length(W.rdw.s$neighbours),S0=Szero(W.rdw.s))
mt2 = moran.test(data$PPM,W.rdw.s,randomisation = T,alternative = "greater")
mt2
##
## Moran I test under randomisation
##
## data: data$PPM
## weights: W.rdw.s
##
## Moran I statistic standard deviate = 9.5265, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.712965482 -0.031250000 0.006102799
Matriks pembobot Inverse Distance Weight (IDW) menentukan bobot berdasarkan kebalikan dari jarak antar titik atau wilayah. Semakin dekat dua titik, semakin besar bobot yang diberikan.
Ditentukan nilai alpha=1 dan alpha=2
alpha1=1
W.idw <-1/(m.jarak^alpha1)
diag(W.idw)<-0
rtot<-rowSums(W.idw,na.rm=TRUE)
W.idw.sd<-W.idw/rtot #row-normalized
W.idw.s = mat2listw(W.idw.sd,style='W')
MI.idw <- moran(data$PPM,W.idw.s,n=length(W.idw.s$neighbours),S0=Szero(W.idw.s))
mt3 = moran.test(data$PPM,W.idw.s,randomisation = T,alternative = "greater")
mt3
##
## Moran I test under randomisation
##
## data: data$PPM
## weights: W.idw.s
##
## Moran I statistic standard deviate = 7.2421, p-value = 2.209e-13
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.276568851 -0.031250000 0.001806597
alpha2=2
W.idw2<-1/(m.jarak^alpha2)
diag(W.idw2)<-0
rtot<-rowSums(W.idw2,na.rm=TRUE)
W.idw2.sd<-W.idw2/rtot #row-normalized
W.idw2.s = mat2listw(W.idw2.sd,style='W')
MI.idw2 <- moran(data$PPM,W.idw2.s,n=length(W.idw2.s$neighbours),S0=Szero(W.idw2.s))
mt4 = moran.test(data$PPM,W.idw2.s,randomisation = T,alternative = "greater")
mt4
##
## Moran I test under randomisation
##
## data: data$PPM
## weights: W.idw2.s
##
## Moran I statistic standard deviate = 5.8423, p-value = 2.574e-09
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.58469819 -0.03125000 0.01111513
Matriks exponential distance weight memberikan bobot yang menurun secara eksponensial seiring dengan peningkatan jarak antar unit spasial. Ini mirip dengan inverse distance weight, tetapi penurunan bobot terhadap jarak lebih tajam.
Ditentukan alpha=1 dan alpha=2
alpha=1
W.edw<-exp((-alpha)*m.jarak)
diag(W.edw)<-0
rtot<-rowSums(W.edw,na.rm=TRUE)
W.edw.sd<-W.edw/rtot #row-normalized
W.edw.s = mat2listw(W.edw.sd,style='W')
MI.edw <- moran(data$PPM,W.edw.s,n=length(W.edw.s$neighbours),S0=Szero(W.edw.s))
mt5 = moran.test(data$PPM,W.edw.s,randomisation = T,alternative = "greater")
mt5
##
## Moran I test under randomisation
##
## data: data$PPM
## weights: W.edw.s
##
## Moran I statistic standard deviate = 10.703, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.2656130663 -0.0312500000 0.0007692685
alpha2=2
W.edw2<-exp((-alpha2)*m.jarak)
diag(W.edw2)<-0
rtot<-rowSums(W.edw2,na.rm=TRUE)
W.edw2.sd<-W.edw2/rtot #row-normalized
W.edw2.s = mat2listw(W.edw2.sd,style='W')
MI.edw2 <- moran(data$PPM,W.edw2.s,n=length(W.edw2.s$neighbours),S0=Szero(W.edw2.s))
mt6 = moran.test(data$PPM,W.edw2.s,randomisation = T,alternative = "greater")
mt6
##
## Moran I test under randomisation
##
## data: data$PPM
## weights: W.edw2.s
##
## Moran I statistic standard deviate = 10.391, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.537741479 -0.031250000 0.002998588
Matriks pembobot spasial yang dipilih yaitu matriks yang menghasilkan nilai autokorelasi spasial yang tertinggi. Pemilihan matriks bobot juga dapat didasarkan pada matriks bobot dengan nilai indeks moran yang signifikan pada taraf 5%.
MatriksBobot <- c("K-Nearest Neighbor (k=5)",
"Radial Distance Weight (dmax=105)",
"Invers Distance Weight (alpha=1)",
"Invers Distance Weight (alpha=2)",
"Exponential Distance Weight (alpha=1)",
"Exponential Distance Weight (alpha=2)",
"Rook Contiguity",
"Queen Contiguity")
IndeksMoran <- c(MI.knn$I,MI.rdw$I,MI.idw$I,MI.idw2$I,MI.edw$I,MI.edw2$I,rc$estimate[1],qc$estimate[1])
pv = c(mt1$p.value,mt2$p.value,mt3$p.value,mt4$p.value,mt5$p.value,mt6$p.value,rc$p.value,qc$p.value)
Matriks = cbind.data.frame(MatriksBobot, IndeksMoran,"p-value"=pv)
colnames(Matriks) <-c("Matriks Bobot", "Indeks Moran", "p-value")
Matriks
## Matriks Bobot Indeks Moran p-value
## 1 K-Nearest Neighbor (k=5) 0.6031197 1.952469e-12
## 2 Radial Distance Weight (dmax=105) 0.7129655 8.132416e-22
## 3 Invers Distance Weight (alpha=1) 0.2765689 2.208934e-13
## 4 Invers Distance Weight (alpha=2) 0.5846982 2.573622e-09
## 5 Exponential Distance Weight (alpha=1) 0.2656131 4.911509e-27
## 6 Exponential Distance Weight (alpha=2) 0.5377415 1.365822e-25
## 7 Rook Contiguity 0.7677398 2.604196e-10
## 8 Queen Contiguity 0.7677398 2.604196e-10
Matriks[Matriks$`p-value`< 0.05,]
## Matriks Bobot Indeks Moran p-value
## 1 K-Nearest Neighbor (k=5) 0.6031197 1.952469e-12
## 2 Radial Distance Weight (dmax=105) 0.7129655 8.132416e-22
## 3 Invers Distance Weight (alpha=1) 0.2765689 2.208934e-13
## 4 Invers Distance Weight (alpha=2) 0.5846982 2.573622e-09
## 5 Exponential Distance Weight (alpha=1) 0.2656131 4.911509e-27
## 6 Exponential Distance Weight (alpha=2) 0.5377415 1.365822e-25
## 7 Rook Contiguity 0.7677398 2.604196e-10
## 8 Queen Contiguity 0.7677398 2.604196e-10
Berdasakan hasil di atas, Matriks bobot yang memiliki nilai Indeks Moran yang signifikan pada taraf 5% adalah k-nearest neighboor (k=5), radial distance weight (dmax=105), invers distance weight (alpha = 1 dan alpha = 2), exponential distance weight (alpha = 1 dan alpha = 2), rook contiguity, dan queen contiguity.
Matriks pembobot spasial yang memiliki Indeks Moran tertinggi adalah rook contiguity dan queen contiguity sehingga matriks tersebut dapat dipilih menjadi matriks pembobot spasial terbaik diantara matriks pembobot spasial lainnya. Selanjutnya matriks pembobot yang digunakan dalam analisis adalah queen contiguity.
Pemodelan Ordinary Least Square dan uji asumsi multikolinearitas, autokorelasi spasial, kehomogenan ragam, kenormalan sisaan.
Matriks Bobot yang digunakan adalah queen contiguity.
ols <- lm(PPM ~ RLS + PPK + UHH + HLS, data = data)
summary(ols)
##
## Call:
## lm(formula = PPM ~ RLS + PPK + UHH + HLS, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.3129 -1.9354 -0.2871 0.9077 5.9370
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.847e+01 4.381e+01 -1.563 0.12928
## RLS -2.401e+00 7.186e-01 -3.341 0.00238 **
## PPK -7.114e-04 3.568e-04 -1.994 0.05597 .
## UHH 1.241e+00 5.764e-01 2.153 0.04011 *
## HLS 1.321e+00 1.146e+00 1.153 0.25851
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.578 on 28 degrees of freedom
## Multiple R-squared: 0.6691, Adjusted R-squared: 0.6219
## F-statistic: 14.16 on 4 and 28 DF, p-value: 1.954e-06
print(paste("Nilai AIC OLS", AIC(ols)))
## [1] "Nilai AIC OLS 162.724559457354"
H0 : sisaan model menyebar normal H1 : sisaan model tidak menyebar normal
Tolak H0 jika p-value < 0.05
err.ols <- residuals(ols)
ad.test(err.ols)
##
## Anderson-Darling normality test
##
## data: err.ols
## A = 0.80478, p-value = 0.0333
Karena p-value < 5%, maka tolak H0. Artinya sisaan tidak menyebar normal.
hist(err.ols)
qqnorm(err.ols,datax=T)
qqline(rnorm(length(err.ols),mean(err.ols),sd(err.ols)),datax=T, col="red")
Berdasarkan plot histogram dan normal Q-Q plot diatas terlihat bahwa sisaan menyebar normal.
H0 : Ragam Sisaan Homogen H1 : Ragam Sisaan Tidak Homogen
lmtest::bptest(ols)
##
## studentized Breusch-Pagan test
##
## data: ols
## BP = 3.3554, df = 4, p-value = 0.5002
Karena p-value > 0.05, maka gagal tolak H0. Artinya ragam sisaan homogen
Pada regresi linear berganda perlu diperiksa persyaratan tidak adanya multikolinearitas antar peubah penjelas agar koefisien regresi yang diperoleh dapat dikatakan valid.
Pemeriksaan multikolinearitas dapat dilakukan dengan menggunakan nilai variance inflation factor (VIF). Multikolinearitas terjadi jika nilai VIF > 5.
car::vif(ols)
## RLS PPK UHH HLS
## 4.478456 2.704217 1.834623 1.667146
Berdasarkan perhitungan, diperoleh nilai VIF < 5 yang menunjukkan tidak terjadi multikolinearitas antar peubah penjelas.
H0 : Antargalat tidak memiliki autokorelasi H1 : Antargalat berkorelasi
dwtest(ols)
##
## Durbin-Watson test
##
## data: ols
## DW = 1.6761, p-value = 0.1009
## alternative hypothesis: true autocorrelation is greater than 0
Karena p-value > 0.05, maka gagal tolak H0. Artinya, antargalat tidak berkorelasi.
Untuk menentukan model dependensi spasial yang sesuai dengan data, terlebih dahulu dilakukan uji dependensi spasial. Secara umum ada dua macam uji dependensi spasia, yaitu Indeks Moran dan Uji Pengganda Lagrange (Lagrange Multiplier Test).
Pengujian autokorelasi spasial menggunakan Indeks Moran yang memerlukan matriks pembobot spasial. Dalam kasus ini, digunakan matriks bobot terbaik yang telah diperoleh sebelumnya, yaitu radial distance weight.
H0 : Tidak ada autokorelasi spasial
H1 : Ada autokorelasi spasial
ww = W.queen
lm.morantest(ols, listw=ww, alternative="two.sided")
##
## Global Moran I for regression residuals
##
## data:
## model: lm(formula = PPM ~ RLS + PPK + UHH + HLS, data = data)
## weights: ww
##
## Moran I statistic standard deviate = 0.71837, p-value = 0.4725
## alternative hypothesis: two.sided
## sample estimates:
## Observed Moran I Expectation Variance
## 0.001584773 -0.088268932 0.015645027
err.ols <- residuals(ols)
merr <- moran.test(err.ols, ww,randomisation=T,
alternative="two.sided")
merr
##
## Moran I test under randomisation
##
## data: err.ols
## weights: ww
##
## Moran I statistic standard deviate = 0.24288, p-value = 0.8081
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## 0.001584773 -0.031250000 0.018276611
my <- moran.test(data$PPM, ww,randomisation=T,
alternative="two.sided")
my
##
## Moran I test under randomisation
##
## data: data$PPM
## weights: ww
##
## Moran I statistic standard deviate = 6.2127, p-value = 5.208e-10
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## 0.76773982 -0.03125000 0.01653951
moran.plot(data$PPM, ww, labels=data$`NAMA KABUPATEN`)
mx1 <- moran.test(data$RLS, ww,randomisation=T,
alternative="two.sided")
mx1
##
## Moran I test under randomisation
##
## data: data$RLS
## weights: ww
##
## Moran I statistic standard deviate = 4.2142, p-value = 2.507e-05
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## 0.53376200 -0.03125000 0.01797592
mx2 <- moran.test(data$PPK, ww,randomisation=T,
alternative="two.sided")
mx2
##
## Moran I test under randomisation
##
## data: data$PPK
## weights: ww
##
## Moran I statistic standard deviate = 5.4395, p-value = 5.342e-08
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## 0.70263327 -0.03125000 0.01820257
mx3 <- moran.test(data$UHH, ww,randomisation=T,
alternative="two.sided")
mx3
##
## Moran I test under randomisation
##
## data: data$UHH
## weights: ww
##
## Moran I statistic standard deviate = 3.5232, p-value = 0.0004263
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## 0.45449156 -0.03125000 0.01900772
mx4 <- moran.test(data$HLS, ww,randomisation=T,
alternative="two.sided")
mx4
##
## Moran I test under randomisation
##
## data: data$HLS
## weights: ww
##
## Moran I statistic standard deviate = 1.2661, p-value = 0.2055
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## 0.1375906 -0.0312500 0.0177847
Berikut ini adalah hasil uji autokorelasi pada peubah respon, peubah penjelas, dan sisaan regresi
Peubah = c("Y", "X1", "X2","X3","X4", "Sisaan")
Indeks_Moran = c(my$estimate[1], mx1$estimate[1], mx2$estimate[1],mx3$estimate[1],mx4$estimate[1], merr$estimate[1])
p_value = c(my$p.value, mx1$p.value, mx2$p.value,mx3$p.value,mx4$p.value, merr$p.value)
df1 = cbind.data.frame(Peubah, Indeks_Moran, p_value)
colnames(df1) <- c("Peubah", "Indeks Moran", "p-value")
df1
## Peubah Indeks Moran p-value
## 1 Y 0.767739817 5.208393e-10
## 2 X1 0.533762002 2.506973e-05
## 3 X2 0.702633271 5.342396e-08
## 4 X3 0.454491559 4.263306e-04
## 5 X4 0.137590564 2.054923e-01
## 6 Sisaan 0.001584773 8.081008e-01
Berdasarkan hasil pengujian Indeks Moran di atas menunjukkan bahwa nilai indeks Moran pada peubah Y/PPM, X1/RLS, X2/PPK, dan X3/UHH model regresi memiliki nilai p-value < 0.05 maka Tolak H0 sehingga autokorelasi spasial pada peubah tersebut berpengaruh nyata. Hal ini mengindikasikan bahwa terdapat ketergantungan spasial pada peubah Y/PPM, X1/RLS, X2/PPK, dan X3/UHH regresi klasik. Terlihat pula nilai indeks moran positif pada peubah Y/PPM, X1/RLS, X2/PPK, dan X3/UHH regresi klasik yang menunjukkan adanya autokorelasi positif.
Sedangkan, nilai indeks moran pada peubah X4/HLS dan sisaan model memiliki p-value > 0.05 maka gagal tolak H0 artinya tidak terdapat autokorelasi spasial peubah X4/HLS dan sisaan model taraf nyata 5%.
Oleh karenanya, untuk mencari model yang lebih baik, kita dapat melakukan uji LM (lagrange multiplier) untuk mengidentifikasi model dependensi spasial yang dapat digunakan pada kasus ini.
model <- lm.LMtests(ols,listw=ww,zero.policy = TRUE, test=c("LMerr","RLMerr","LMlag","RLMlag","SARMA"))
## Please update scripts to use lm.RStests in place of lm.LMtests
summary(model)
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
## data:
## model: lm(formula = PPM ~ RLS + PPK + UHH + HLS, data = data)
## test weights: listw
##
## statistic parameter p.value
## RSerr 0.00012197 1 0.991188
## adjRSerr 4.48276650 1 0.034238 *
## RSlag 3.28066772 1 0.070100 .
## adjRSlag 7.76331225 1 0.005332 **
## SARMA 7.76343422 2 0.020615 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Output menunjukkan bahwa hasil uji robust LM SAR, robust LM SEM, dan GSM signifikan pada taraf 5%. Berdasarkan skema tersebut, maka kita dapat mencoba kandidat model SAR, SEM, dan SARMA.
H0 : Ragam Sisaan Homogen H1 : Ragam Sisaan Tidak Homogen
lmtest::bptest(ols)
##
## studentized Breusch-Pagan test
##
## data: ols
## BP = 3.3554, df = 4, p-value = 0.5002
Karena p-value > 0.05, maka Gagal Tolak H0. Artinya ragam sisaan homogen atau tidak terdapat efek heterogenitas spasial.
sar <- lagsarlm(PPM ~ RLS + PPK + UHH + HLS, data = data, listw = ww, zero.policy=TRUE)
summary(sar, Nagelkerke = T)
##
## Call:lagsarlm(formula = PPM ~ RLS + PPK + UHH + HLS, data = data,
## listw = ww, zero.policy = TRUE)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.68182 -1.52917 -0.59518 1.10309 5.61842
##
## Type: lag
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -5.4235e+01 3.8386e+01 -1.4129 0.157691
## RLS -1.8142e+00 6.5445e-01 -2.7722 0.005568
## PPK -3.8415e-04 3.2358e-04 -1.1872 0.235159
## UHH 9.2897e-01 5.1623e-01 1.7995 0.071935
## HLS 1.0458e+00 9.8961e-01 1.0568 0.290605
##
## Rho: 0.33589, LR test value: 4.0616, p-value: 0.043868
## Asymptotic standard error: 0.14591
## z-value: 2.3021, p-value: 0.021328
## Wald statistic: 5.2998, p-value: 0.021328
##
## Log likelihood: -73.33146 for lag model
## ML residual variance (sigma squared): 4.8257, (sigma: 2.1968)
## Nagelkerke pseudo-R-squared: 0.70744
## Number of observations: 33
## Number of parameters estimated: 7
## AIC: 160.66, (AIC for lm: 162.72)
## LM test for residual autocorrelation
## test value: 2.5377, p-value: 0.11115
Output di atas memperlihatkan bahwa koefisien Rho pada model SAR signifikan, dengan nilai AIC sebesar 160.66. Selain itu, terlihat pula hasil uji autokorelasi pada sisaan model memperlihatkan nilai p-value sebesar 0.11115, artinya tidak terdapat autokorelasi pada sisaan.
Uji Asumsi Model SAR
H0 : galat model menyebar normal
H1 : galat model tidak menyebar normal
err.sar<-residuals(sar)
ad.test(err.sar)
##
## Anderson-Darling normality test
##
## data: err.sar
## A = 0.84895, p-value = 0.02576
Karena p-value < 5%, maka tolak H0. Artinya sisaan tidak menyebar normal.
H0 : Ragam Sisaan Homogen
H1 : Ragam Sisaan Tidak Homogen
bptest.Sarlm(sar)
##
## studentized Breusch-Pagan test
##
## data:
## BP = 4.8419, df = 4, p-value = 0.3039
Karena p-value > 5%, maka gagal tolak H0. Artinya ragam sisaan homogen.
H0: Tidak ada autokorelasi spasial
H1: ada autokorelasi spasial
moran.test(err.sar, ww, alternative="two.sided")
##
## Moran I test under randomisation
##
## data: err.sar
## weights: ww
##
## Moran I statistic standard deviate = -0.80849, p-value = 0.4188
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## -0.14032929 -0.03125000 0.01820247
Karena p-value > 0.05, maka tolak H0 artinya tidak terdapat autokorelasi spasial pada sisaan model SAR.
sem <- errorsarlm(PPM ~ RLS + PPK + UHH + HLS,data=data,listw=ww)
summary(sem)
##
## Call:errorsarlm(formula = PPM ~ RLS + PPK + UHH + HLS, data = data,
## listw = ww)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.32169 -1.93480 -0.31854 0.89650 5.95662
##
## Type: error
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -6.8711e+01 4.0519e+01 -1.6958 0.0899308
## RLS -2.3862e+00 6.6322e-01 -3.5978 0.0003209
## PPK -7.1239e-04 3.2944e-04 -2.1625 0.0305832
## UHH 1.2423e+00 5.3406e-01 2.3262 0.0200105
## HLS 1.3218e+00 1.0569e+00 1.2506 0.2110926
##
## Lambda: 0.012583, LR test value: 0.00065679, p-value: 0.97955
## Asymptotic standard error: 0.21061
## z-value: 0.059747, p-value: 0.95236
## Wald statistic: 0.0035697, p-value: 0.95236
##
## Log likelihood: -75.36195 for error model
## ML residual variance (sigma squared): 5.6377, (sigma: 2.3744)
## Number of observations: 33
## Number of parameters estimated: 7
## AIC: 164.72, (AIC for lm: 162.72)
Output di atas menunjukkan bahwa koefisien Lambda tidak signifikan pada taraf nyata 5%. AIC model SEM adalah 164.72. Selanjutnya kita akan coba memeriksa sisaan model SEM ini.
Uji Asumsi Model SEM
H0 : Sisaan model menyebar normal
H1 : Sisaaan model tidak menyebar normal
err.sem<-residuals(sem)
ad.test(err.sem)
##
## Anderson-Darling normality test
##
## data: err.sem
## A = 0.80351, p-value = 0.03355
Karena p-value < 0.05 maka tolak H0, artinya sisaan tidak menyebar normal.
H0 : Ragam Sisaan Homogen
H1 : Ragam Sisaan Tidak Homogen
bptest.Sarlm(sem)
##
## studentized Breusch-Pagan test
##
## data:
## BP = 3.3846, df = 4, p-value = 0.4956
Karena p-value > 0.05 maka gagal tolak H0, artinya ragam sisaan homogen.
H0 : Tidak Ada autokorelasi spasial
H1 : Ada autokorelasi spasial
moran.test(err.sem, ww, alternative="two.sided")
##
## Moran I test under randomisation
##
## data: err.sem
## weights: ww
##
## Moran I statistic standard deviate = 0.23634, p-value = 0.8132
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## 0.0006963127 -0.0312500000 0.0182708668
Karena p-value > 0.05, maka gagal tolak H0 artinya tidak terdapat autokorelasi spasial pada sisaan model SEM.
SARMA <- sacsarlm(PPM ~ RLS + PPK + UHH + HLS,data=data,ww)
summary(SARMA)
##
## Call:sacsarlm(formula = PPM ~ RLS + PPK + UHH + HLS, data = data,
## listw = ww)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.25204 -1.35166 -0.44601 0.79217 4.40486
##
## Type: sac
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.5135e+01 2.8840e+01 -0.5248 0.59972
## RLS -1.3414e+00 6.7407e-01 -1.9900 0.04659
## PPK -2.6345e-04 2.3587e-04 -1.1169 0.26403
## UHH 4.6192e-01 3.7003e-01 1.2483 0.21191
## HLS 9.5109e-02 8.3352e-01 0.1141 0.90915
##
## Rho: 0.53457
## Asymptotic standard error: 0.15805
## z-value: 3.3823, p-value: 0.00071879
## Lambda: -0.69835
## Asymptotic standard error: 0.24993
## z-value: -2.7942, p-value: 0.0052028
##
## LR test value: 8.0074, p-value: 0.018248
##
## Log likelihood: -71.35858 for sac model
## ML residual variance (sigma squared): 3.5534, (sigma: 1.8851)
## Number of observations: 33
## Number of parameters estimated: 8
## AIC: 158.72, (AIC for lm: 162.72)
Output di atas memperlihatkan bahwa kedua koefisien dependensi spasial signifikan pada taraf nyata 5%, yaitu Rho dan Lambda. AIC model SARMA adalah sebesar 158.72.
Uji Asumsi Model SARMA
H0 : Sisaan model menyebar normal
H1 : Sisaaan model tidak menyebar normal
err.SARMA<-residuals(SARMA)
ad.test(err.SARMA)
##
## Anderson-Darling normality test
##
## data: err.SARMA
## A = 0.62964, p-value = 0.09234
Karena p-value > 0.05 maka gagal tolak H0, artinya sisaan menyebar normal.
H0 : Ragam Sisaan Homogen
H1 : Ragam Sisaan Tidak Homogen
bptest.Sarlm(SARMA)
##
## studentized Breusch-Pagan test
##
## data:
## BP = 8.1036, df = 4, p-value = 0.08786
Karena p-value > 0.05 maka gagal tolak H0, artinya ragam sisaan homogen.
H0 : Tidak Ada autokorelasi spasial
H1 : Ada autokorelasi spasial
moran.test(err.SARMA, ww, alternative="two.sided")
##
## Moran I test under randomisation
##
## data: err.SARMA
## weights: ww
##
## Moran I statistic standard deviate = -0.52521, p-value = 0.5994
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## -0.10224464 -0.03125000 0.01827168
Karena p-value > 0.05, maka gagal tolak H0 artinya tidak terdapat autokorelasi spasial pada sisaan model SARMA. Artinya model SARMA telah memenuhi asumsi kenormalan, kehomogenan ragam, dan kebebasan pada taraf nyata 5%.
Model regresi terbaik ditentukan berdasarkan nilai AIC yang dihasilkan dari masing-masing model. Model terbaik akan menghasilkan nilai AIC yang kecil. Hasilnya adalah sebagai berikut:
df <- data.frame("Model" = c("OLS (Regresi KlasiK)","SAR","SEM","SARMA"),
"AIC" = c(AIC(ols),AIC(sar),AIC(sem), AIC(SARMA)),"p-value dari Rho"=c("NA","0.043868","NA","0.00071879"), "p-value dari Lambda"=c("NA","NA","0.012583","0.0052028"), "Kenormalan (p-value)"=c("0.0333","0.02576","0.03355","0.09234"), "Homoskedastisitas (p-value)"=c("0.5002","0.3039","0.4956","0.08786"), "Kebebasan Sisaan (p-value)"=c("0.1009","0.4188","0.8132","0.5994"))
df
## Model AIC p.value.dari.Rho p.value.dari.Lambda
## 1 OLS (Regresi KlasiK) 162.7246 NA NA
## 2 SAR 160.6629 0.043868 NA
## 3 SEM 164.7239 NA 0.012583
## 4 SARMA 158.7172 0.00071879 0.0052028
## Kenormalan..p.value. Homoskedastisitas..p.value. Kebebasan.Sisaan..p.value.
## 1 0.0333 0.5002 0.1009
## 2 0.02576 0.3039 0.4188
## 3 0.03355 0.4956 0.8132
## 4 0.09234 0.08786 0.5994
Berdasarkan output diatas, model SARMA adalah model yang terbaik berdasarkan nilai AIC-nya. Hal ini juga sejalan dengan Rho dan Lambda yang signifikan (p-value 0.00). Kemudian, hasil uji asumsi sisaan juga menunjukkan bahwa model SARMA telah memenuhi asumsi kenormalan, kehomogenan ragam, dan kebebasan.
Karena Model SARMA memiliki spillover, maka perlu diinterpretasi dengan memperhatikan spillovernya. Interpretasi koefisien pada model regresi spasial dijelaskan dengan efek langsung, tidak langsung, dan total dari setiap peubah.
sum <- summary(SARMA)
sum
##
## Call:sacsarlm(formula = PPM ~ RLS + PPK + UHH + HLS, data = data,
## listw = ww)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.25204 -1.35166 -0.44601 0.79217 4.40486
##
## Type: sac
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.5135e+01 2.8840e+01 -0.5248 0.59972
## RLS -1.3414e+00 6.7407e-01 -1.9900 0.04659
## PPK -2.6345e-04 2.3587e-04 -1.1169 0.26403
## UHH 4.6192e-01 3.7003e-01 1.2483 0.21191
## HLS 9.5109e-02 8.3352e-01 0.1141 0.90915
##
## Rho: 0.53457
## Asymptotic standard error: 0.15805
## z-value: 3.3823, p-value: 0.00071879
## Lambda: -0.69835
## Asymptotic standard error: 0.24993
## z-value: -2.7942, p-value: 0.0052028
##
## LR test value: 8.0074, p-value: 0.018248
##
## Log likelihood: -71.35858 for sac model
## ML residual variance (sigma squared): 3.5534, (sigma: 1.8851)
## Number of observations: 33
## Number of parameters estimated: 8
## AIC: 158.72, (AIC for lm: 162.72)
# Spill over
Im = impacts(SARMA, listw = ww)
Im
## Impact measures (sac, exact):
## Direct Indirect Total
## RLS dy/dx -1.4818809449 -1.4002183899 -2.8820993348
## PPK dy/dx -0.0002910393 -0.0002750009 -0.0005660402
## UHH dy/dx 0.5102977508 0.4821765861 0.9924743369
## HLS dy/dx 0.1050694392 0.0992793392 0.2043487784
# Efek Umpan Balik
koef = sum$coefficients[-1]
diref = Im$direct
umbal = diref-koef
cbind.data.frame(Koefisien=koef,EfekLangsung=diref,UmpanBalik=umbal)
## Koefisien EfekLangsung UmpanBalik
## RLS -1.3414063361 -1.4818809449 -1.404746e-01
## PPK -0.0002634503 -0.0002910393 -2.758901e-05
## UHH 0.4619241772 0.5102977508 4.837357e-02
## HLS 0.0951094026 0.1050694392 9.960037e-03
Koefisien = C Efek Langsung = DL Efek Umpan Balik = FB Efek Tidak Langsung (ID) = DL * (FB)^0.321 Efek Total (T) = DL + ID
Berikut ini adalah interpretasinya:
Pengaruh langsung dari peubah X1 adalah sebesar -1.4819, artinya Jika rata-rata X1 di wilayah-i meningkat satu satuan, maka rata-rata Y di wilayah tersebut akan menurun sebesar 1.4819, jika peubah lainnya tetap.
Pengaruh tidak langsung dari peubah X1 bernilai 0.78998, artinya jika Jika rata-rata X1 di wilayah-i meningkat satu satuan, maka rata-rata Y di wilayah-j (wilayah yang berbeda) akan meningkat sebesar 0.78998, jika peubah lainnya tetap.
Pengaruh total dari peubah X1 bernilai -0.692, artinya apabila peningkatan X1 terjadi di seluruh wilayah maka akan menurunkan Y diseluruh wilayah dengan rata-rata penurunan sebesar 0.692. Efek umpan baliknya sebesar 0.00996.
Pengaruh langsung dari peubah X2 adalah sebesar -0.00029, artinya Jika rata-rata X2 di wilayah-i meningkat satu satuan, maka rata-rata Y di wilayah tersebut akan menurun sebesar 0.00029, jika peubah lainnya tetap.
Pengaruh tidak langsung dari X2 tersebut bernilai 0.0001, artinya jika Jika rata-rata X2 di wilayah-i meningkat satu satuan, maka rata-rata Y di wilayah-j (wilayah yang berbeda) akan meningkat sebesar 0.0001, jika peubah lainnya tetap.
Pengaruh total dari peubah X2 adalah sebesar -0.00019, artinya apabila peningkatan X2 terjadi di seluruh wilayah maka akan menurunkan Y diseluruh wilayah dengan rata-rata penurunan sebesar 0.00019, jika peubah lainnya tetap. Efek umpan baliknya sebesar 0.0484.
Pengaruh langsung dari peubah X3 adalah sebesar 0.5103, artinya Jika rata-rata X3 di wilayah-i meningkat satu satuan, maka rata-rata Y di wilayah tersebut akan meningkat sebesar 0.5103, jika peubah lainnya tetap.
Pengaruh tidak langsung dari peubah X3 bernilai 0.193, artinya jika Jika rata-rata X3 di wilayah-i meningkat satu satuan, maka rata-rata Y di wilayah-j (wilayah yang berbeda) akan meningkat sebesar 0.193, jika peubah lainnya tetap.
Pengaruh total dari peubah X3 bernilai 0.7033, artinya apabila peningkatan X3 terjadi di seluruh wilayah maka akan menurunkan Y diseluruh wilayah dengan rata-rata peningkatan sebesar 0.7033. Efek umpan baliknya sebesar -0.0000276.
Pengaruh langsung dari peubah X4 adalah sebesar 0.1051, artinya Jika rata-rata X4 di wilayah-i meningkat satu satuan, maka rata-rata Y di wilayah tersebut akan meningkat sebesar 0.1051, jika peubah lainnya tetap.
Pengaruh tidak langsung dari X4 tersebut bernilai 0.0239, artinya jika Jika rata-rata X4 di wilayah-i meningkat satu satuan, maka rata-rata Y di wilayah-j (wilayah yang berbeda) akan meningkat sebesar 0.0239, jika peubah lainnya tetap.
Pengaruh total dari peubah X4 adalah sebesar 0.128998, artinya apabila peningkatan X4 terjadi di seluruh wilayah maka akan meningkatkan Y diseluruh wilayah dengan rata-rata peningkatan sebesar 0.128998, jika peubah lainnya tetap. Efek umpan baliknya sebesar -0.141.