Library

library(readxl)
library(sf)
## Linking to GEOS 3.13.1, GDAL 3.10.2, PROJ 9.5.1; sf_use_s2() is TRUE
library(ggplot2)
library(classInt)

library(knitr)
library(kableExtra)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)

library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(spdep)
## Loading required package: spData
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
library(spatialreg)
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## 
## 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

Tabel 1. Data Set Penelitian

data <- read_excel("D:/Statistika Terapan Komputasi/Semester 6/Tugas Akhir/dataset.xlsx")
head(data)
## # A tibble: 6 × 6
##   `Kab/Kot`   Tingkat Pengangguran…¹ `Kepadatan Penduduk` Tingkat Partisipasi …²
##   <chr>                        <dbl>                <dbl>                  <dbl>
## 1 Cilacap                       7.83                  872                   68.0
## 2 Banyumas                      6.18                 1328                   68.0
## 3 Purbalingga                   4.96                 1288                   74.5
## 4 Banjarnega…                   5.57                  924                   73.4
## 5 Kebumen                       5.07                 1060                   77.4
## 6 Purworejo                     3.89                  735                   73.7
## # ℹ abbreviated names: ¹​`Tingkat Pengangguran Terbuka`,
## #   ²​`Tingkat Partisipasi Angkatan Kerja`
## # ℹ 2 more variables: `Upah Minimum Kabupaten/Kota` <dbl>,
## #   `Indeks Pembangunan Manusia` <dbl>

Gambar 1. Peta Jawa Tengah per Kabupaten/Kota

jateng <- st_read("D:/Statistika Terapan Komputasi/Semester 6/Tugas Akhir/Kab_Jateng/Kab seJATENG.shp")
## Reading layer `Kab SeJATENG' from data source 
##   `D:\Statistika Terapan Komputasi\Semester 6\Tugas Akhir\Kab_Jateng\Kab SeJATENG.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 35 features and 1 field
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 108.5559 ymin: -8.21193 xmax: 111.6916 ymax: -6.4026
## Geodetic CRS:  WGS 84
plot(jateng, col = "white", border = "black", main = "Peta Kabupaten/Kota Jawa Tengah")

# Proyeksikan agar tampil 2D
jateng_proj <- st_transform(jateng, crs = 23837)

# Plot dengan label
ggplot(jateng_proj) +
  geom_sf(fill = "white", color = "black") +
  geom_sf_text(aes(label = Kab__Kota), size = 3, color = "red") +
  theme_void() +
  ggtitle("Peta Kabupaten/Kota Jawa Tengah") + theme(plot.title = element_text(hjust = 0.5, face = "bold"))

Eksplorasi Data

Tipe Data

str(data)
## tibble [35 × 6] (S3: tbl_df/tbl/data.frame)
##  $ Kab/Kot                           : chr [1:35] "Cilacap" "Banyumas" "Purbalingga" "Banjarnegara" ...
##  $ Tingkat Pengangguran Terbuka      : num [1:35] 7.83 6.18 4.96 5.57 5.07 3.89 4.02 3.55 3.16 3.97 ...
##  $ Kepadatan Penduduk                : num [1:35] 872 1328 1288 924 1060 ...
##  $ Tingkat Partisipasi Angkatan Kerja: num [1:35] 68 68 74.5 73.4 77.4 ...
##  $ Upah Minimum Kabupaten/Kota       : num [1:35] 2479106 2195690 2195571 2038005 2121947 ...
##  $ Indeks Pembangunan Manusia        : num [1:35] 72.4 74.5 70.7 69.6 71.9 ...
str(jateng)
## Classes 'sf' and 'data.frame':   35 obs. of  2 variables:
##  $ Kab__Kota: chr  "Banjarnegara" "Banyumas" "Batang" "Blora" ...
##  $ geometry :sfc_MULTIPOLYGON of length 35; first list element: List of 1
##   ..$ :List of 1
##   .. ..$ : num [1:5289, 1:2] 110 110 110 110 110 ...
##   ..- attr(*, "class")= chr [1:3] "XY" "MULTIPOLYGON" "sfg"
##  - attr(*, "sf_column")= chr "geometry"
##  - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA
##   ..- attr(*, "names")= chr "Kab__Kota"

Statistika Deskriptif

summary(data)
##    Kab/Kot          Tingkat Pengangguran Terbuka Kepadatan Penduduk
##  Length:35          Min.   :2.35                 Min.   :  464     
##  Class :character   1st Qu.:3.50                 1st Qu.:  933     
##  Mode  :character   Median :3.97                 Median : 1185     
##                     Mean   :4.52                 Mean   : 2082     
##                     3rd Qu.:5.32                 3rd Qu.: 1776     
##                     Max.   :8.35                 Max.   :11302     
##  Tingkat Partisipasi Angkatan Kerja Upah Minimum Kabupaten/Kota
##  Min.   :67.42                      Min.   :2038005            
##  1st Qu.:71.93                      1st Qu.:2124794            
##  Median :74.47                      Median :2215482            
##  Mean   :73.74                      Mean   :2288331            
##  3rd Qu.:76.47                      3rd Qu.:2379327            
##  Max.   :79.29                      Max.   :3243969            
##  Indeks Pembangunan Manusia
##  Min.   :68.46             
##  1st Qu.:71.86             
##  Median :74.32             
##  Mean   :74.75             
##  3rd Qu.:77.22             
##  Max.   :85.72
sapply(data[, 2:6], sd)
##       Tingkat Pengangguran Terbuka                 Kepadatan Penduduk 
##                       1.494546e+00                       2.402703e+03 
## Tingkat Partisipasi Angkatan Kerja        Upah Minimum Kabupaten/Kota 
##                       3.370814e+00                       2.410609e+05 
##         Indeks Pembangunan Manusia 
##                       4.501905e+00

Visualisasi Peta Pesebaran

# Gabung data excel dan data spasial
data_gabung <- merge(jateng_proj, data, by.x = "Kab__Kota", by.y = "Kab/Kot")
head(data_gabung)
## Simple feature collection with 6 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -553549.5 ymin: 647750 xmax: -227850.9 ymax: 747705.1
## Projected CRS: DGN95 / Indonesia TM-3 zone 50.1
##      Kab__Kota Tingkat Pengangguran Terbuka Kepadatan Penduduk
## 1 Banjarnegara                         5.57                924
## 2     Banyumas                         6.18               1328
## 3       Batang                         5.67                978
## 4        Blora                         3.67                464
## 5     Boyolali                         3.16               1003
## 6       Brebes                         8.35               1185
##   Tingkat Partisipasi Angkatan Kerja Upah Minimum Kabupaten/Kota
## 1                              73.38                     2038005
## 2                              68.03                     2195690
## 3                              77.91                     2379702
## 4                              73.51                     2101813
## 5                              75.25                     2250327
## 6                              71.92                     2103100
##   Indeks Pembangunan Manusia                       geometry
## 1                      69.60 MULTIPOLYGON (((-430496.7 7...
## 2                      74.52 MULTIPOLYGON (((-494219.1 6...
## 3                      70.74 MULTIPOLYGON (((-439015 736...
## 4                      71.39 MULTIPOLYGON (((-272714.8 7...
## 5                      75.96 MULTIPOLYGON (((-325665.1 7...
## 6                      68.46 MULTIPOLYGON (((-538477.7 7...

Gambar 2. Peta Tematik Variabel Penelitian di Jawa Tengah Tahun 2024

variabel_list <- c("Tingkat Pengangguran Terbuka", "Kepadatan Penduduk", 
                   "Tingkat Partisipasi Angkatan Kerja", "Upah Minimum Kabupaten/Kota", 
                   "Indeks Pembangunan Manusia")

for (var in variabel_list) {
  # Hitung natural breaks (Jenks)
  breaks <- classIntervals(data_gabung[[var]], n = 4, style = "jenks")$brks
  
  # Label kelas berdasarkan interval
  label_kelas <- paste0(round(breaks[-length(breaks)], 2), 
                        " - ", 
                        round(breaks[-1], 2))

  # Buat variabel kelas
  data_gabung$kelas <- cut(data_gabung[[var]], 
                           breaks = breaks, 
                           include.lowest = TRUE, 
                           labels = label_kelas)

  # Plot peta
  p <- ggplot(data_gabung) +
    geom_sf(aes(fill = kelas), color = "black", size = 0.3) +
    geom_sf_text(aes(label = Kab__Kota), size = 2.5, color = "black") +
    scale_fill_brewer(palette = "YlOrRd", name = var) +
    labs(title = paste("Peta", var, "di Provinsi Jawa Tengah")) +
    theme_void() +
    theme(legend.position = "right")
  
  print(p)
}

Tabel 2. Kategori Setiap Variabel Penelitian pada Kabupaten/Kota di Provinsi Jawa Tengah Tahun 2024

# Salin data
data_kategori <- data

# Fungsi klasifikasi dengan Natural Breaks
kategori_jenks <- function(x) {
  breaks <- classIntervals(x, n = 4, style = "jenks")$brks
  cut(x,
      breaks = breaks,
      include.lowest = TRUE,
      labels = c("R", "S", "T", "ST"))  # Rendah, Sedang, Tinggi, Sangat Tinggi
}

# Terapkan ke setiap variabel
for (var in variabel_list) {
  data_kategori[[var]] <- kategori_jenks(data_kategori[[var]])
}

# Siapkan tabel akhir
hasil_kategori <- data_kategori[, c("Kab/Kot", variabel_list)]
colnames(hasil_kategori)[1] <- "Kabupaten/Kota"

# Urutkan berdasarkan nama wilayah
hasil_kategori <- hasil_kategori[order(hasil_kategori$`Kabupaten/Kota`), ]

# Tampilkan tabel
kable(hasil_kategori, caption = "Tabel 2. Kategori Setiap Variabel Penelitian pada Kabupaten/Kota di Provinsi Jawa Tengah Tahun 2024") %>%
  kable_styling(full_width = FALSE)
Tabel 2. Kategori Setiap Variabel Penelitian pada Kabupaten/Kota di Provinsi Jawa Tengah Tahun 2024
Kabupaten/Kota Tingkat Pengangguran Terbuka Kepadatan Penduduk Tingkat Partisipasi Angkatan Kerja Upah Minimum Kabupaten/Kota Indeks Pembangunan Manusia
Banjarnegara T R T R R
Banyumas T R R R S
Batang T R ST S R
Blora R R T R R
Boyolali R R T S S
Brebes ST R S R R
Cilacap ST R R T R
Demak S R S T S
Grobogan R R ST R R
Jepara R R S T S
Karanganyar R R T S T
Kebumen S R ST R R
Kendal S R ST T S
Klaten R R T S T
Kota Magelang S T R R ST
Kota Pekalongan S T ST S T
Kota Salatiga R S S S ST
Kota Semarang T S R ST ST
Kota Surakarta S ST R S ST
Kota Tegal T T R S T
Kudus R R T T T
Magelang R R ST S R
Pati R R ST R S
Pekalongan R R ST S R
Pemalang T R S R R
Purbalingga S R T R R
Purworejo R R T R S
Rembang R R T R R
Semarang R R ST T S
Sragen R R T R S
Sukoharjo R R R R T
Tegal ST R T R R
Temanggung R R ST R R
Wonogiri R R ST R R
Wonosobo R R T R R

Tabel 3. Jumlah Kabupaten/Kota di Jawa Tengah Tahun 2024 pada Setiap Kategori Tiap Variabel Penelitian

# Nama variabel tanpa kolom wilayah
nama_variabel <- colnames(hasil_kategori)[-1]

# Buat tabel jumlah kategori per variabel
tabel_kategori <- lapply(nama_variabel, function(var) {
  hasil_kategori %>%
    count(Kategori = .data[[var]]) %>%
    pivot_wider(names_from = Kategori, values_from = n, values_fill = 0) %>%
    mutate(Variabel = var) %>%
    select(Variabel, R, S, T, ST)
})

# Gabungkan semua hasil
tabel_kategori <- bind_rows(tabel_kategori)

# Tampilkan tabel
kable(tabel_kategori, caption = " Tabel 3. Jumlah Kabupaten/Kota di Jawa Tengah Tahun 2024 pada Setiap Kategori Tiap Variabel Penelitian") %>%
  kable_styling(full_width = FALSE)
Tabel 3. Jumlah Kabupaten/Kota di Jawa Tengah Tahun 2024 pada Setiap Kategori Tiap Variabel Penelitian
Variabel R S T ST
Tingkat Pengangguran Terbuka 19 7 6 3
Kepadatan Penduduk 29 2 3 1
Tingkat Partisipasi Angkatan Kerja 7 5 12 11
Upah Minimum Kabupaten/Kota 18 10 6 1
Indeks Pembangunan Manusia 16 9 6 4

Tabel 4. Daftar Kabupaten/Kota di Jawa Tengah Berdasarkan Kategori Tiap Variabel Penelitian

# Ubah ke format long: variabel - kategori - kabupaten/kota
kategori_per_kab <- hasil_kategori %>%
  pivot_longer(
    cols = -`Kabupaten/Kota`,
    names_to = "Variabel",
    values_to = "Kategori"
  ) %>%
  group_by(Variabel, Kategori) %>%
  summarise(
    `Daftar Kabupaten/Kota` = paste(`Kabupaten/Kota`, collapse = ", "),
    .groups = "drop"
  )

# Tampilkan tabel
kable(kategori_per_kab,
      caption = "Tabel 4. Daftar Kabupaten/Kota di Jawa Tengah Berdasarkan Kategori Tiap Variabel Penelitian") %>%
  kable_styling(full_width = FALSE)
Tabel 4. Daftar Kabupaten/Kota di Jawa Tengah Berdasarkan Kategori Tiap Variabel Penelitian
Variabel Kategori Daftar Kabupaten/Kota
Indeks Pembangunan Manusia R Banjarnegara, Batang, Blora, Brebes, Cilacap, Grobogan, Kebumen, Magelang, Pekalongan, Pemalang, Purbalingga, Rembang, Tegal, Temanggung, Wonogiri, Wonosobo
Indeks Pembangunan Manusia S Banyumas, Boyolali, Demak, Jepara, Kendal, Pati, Purworejo, Semarang, Sragen
Indeks Pembangunan Manusia T Karanganyar, Klaten, Kota Pekalongan, Kota Tegal, Kudus, Sukoharjo
Indeks Pembangunan Manusia ST Kota Magelang, Kota Salatiga, Kota Semarang, Kota Surakarta
Kepadatan Penduduk R Banjarnegara, Banyumas, Batang, Blora, Boyolali, Brebes, Cilacap, Demak, Grobogan, Jepara, Karanganyar, Kebumen, Kendal, Klaten, Kudus, Magelang, Pati, Pekalongan, Pemalang, Purbalingga, Purworejo, Rembang, Semarang, Sragen, Sukoharjo, Tegal, Temanggung, Wonogiri, Wonosobo
Kepadatan Penduduk S Kota Salatiga, Kota Semarang
Kepadatan Penduduk T Kota Magelang, Kota Pekalongan, Kota Tegal
Kepadatan Penduduk ST Kota Surakarta
Tingkat Partisipasi Angkatan Kerja R Banyumas, Cilacap, Kota Magelang, Kota Semarang, Kota Surakarta, Kota Tegal, Sukoharjo
Tingkat Partisipasi Angkatan Kerja S Brebes, Demak, Jepara, Kota Salatiga, Pemalang
Tingkat Partisipasi Angkatan Kerja T Banjarnegara, Blora, Boyolali, Karanganyar, Klaten, Kudus, Purbalingga, Purworejo, Rembang, Sragen, Tegal, Wonosobo
Tingkat Partisipasi Angkatan Kerja ST Batang, Grobogan, Kebumen, Kendal, Kota Pekalongan, Magelang, Pati, Pekalongan, Semarang, Temanggung, Wonogiri
Tingkat Pengangguran Terbuka R Blora, Boyolali, Grobogan, Jepara, Karanganyar, Klaten, Kota Salatiga, Kudus, Magelang, Pati, Pekalongan, Purworejo, Rembang, Semarang, Sragen, Sukoharjo, Temanggung, Wonogiri, Wonosobo
Tingkat Pengangguran Terbuka S Demak, Kebumen, Kendal, Kota Magelang, Kota Pekalongan, Kota Surakarta, Purbalingga
Tingkat Pengangguran Terbuka T Banjarnegara, Banyumas, Batang, Kota Semarang, Kota Tegal, Pemalang
Tingkat Pengangguran Terbuka ST Brebes, Cilacap, Tegal
Upah Minimum Kabupaten/Kota R Banjarnegara, Banyumas, Blora, Brebes, Grobogan, Kebumen, Kota Magelang, Pati, Pemalang, Purbalingga, Purworejo, Rembang, Sragen, Sukoharjo, Tegal, Temanggung, Wonogiri, Wonosobo
Upah Minimum Kabupaten/Kota S Batang, Boyolali, Karanganyar, Klaten, Kota Pekalongan, Kota Salatiga, Kota Surakarta, Kota Tegal, Magelang, Pekalongan
Upah Minimum Kabupaten/Kota T Cilacap, Demak, Jepara, Kendal, Kudus, Semarang
Upah Minimum Kabupaten/Kota ST Kota Semarang

Analisis Regresi Berganda

# Model regresi linier
model_ols <- lm(`Tingkat Pengangguran Terbuka` ~ `Kepadatan Penduduk` + 
              `Tingkat Partisipasi Angkatan Kerja` + 
              `Upah Minimum Kabupaten/Kota` + 
              `Indeks Pembangunan Manusia`, 
            data = data_gabung)
summary(model_ols)
## 
## Call:
## lm(formula = `Tingkat Pengangguran Terbuka` ~ `Kepadatan Penduduk` + 
##     `Tingkat Partisipasi Angkatan Kerja` + `Upah Minimum Kabupaten/Kota` + 
##     `Indeks Pembangunan Manusia`, data = data_gabung)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.0515 -0.7259  0.2041  0.5432  2.0515 
## 
## Coefficients:
##                                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                           4.228e+01  6.686e+00   6.323 5.67e-07 ***
## `Kepadatan Penduduk`                  2.279e-04  1.054e-04   2.161  0.03878 *  
## `Tingkat Partisipasi Angkatan Kerja` -2.856e-01  6.245e-02  -4.573 7.76e-05 ***
## `Upah Minimum Kabupaten/Kota`         2.613e-06  8.366e-07   3.123  0.00394 ** 
## `Indeks Pembangunan Manusia`         -3.098e-01  6.070e-02  -5.104 1.74e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.032 on 30 degrees of freedom
## Multiple R-squared:  0.5791, Adjusted R-squared:  0.523 
## F-statistic: 10.32 on 4 and 30 DF,  p-value: 2.234e-05

Estimasi Parameter Regresi Linier Berganda

coef(model_ols)
##                          (Intercept)                 `Kepadatan Penduduk` 
##                         4.228001e+01                         2.278698e-04 
## `Tingkat Partisipasi Angkatan Kerja`        `Upah Minimum Kabupaten/Kota` 
##                        -2.855781e-01                         2.613113e-06 
##         `Indeks Pembangunan Manusia` 
##                        -3.097930e-01

Uji Asumsi Klasik pada Residual

Uji Normalitas Residual - menggunakan Shapiro-Wilk

Visualisasi Uji Normalitas

par(mfrow = c(1, 2)) 

# Histogram Residual
hist(residuals(model_ols), main = "Histogram Residual", col = "skyblue", breaks = 10)

# Q-Q Plot
qqnorm(residuals(model_ols))
qqline(residuals(model_ols), col = "red")

Tabel 5. Hasil Uji Normalitas Residual (Shapiro-Wilk)

# Uji Shapiro-Wilk
shapiro_result <- shapiro.test(residuals(model_ols))
shapiro_table <- data.frame(
  `Statistik_Uji` = round(shapiro_result$statistic, 4),
  `p_value` = round(shapiro_result$p.value, 4),
  `Keputusan` = ifelse(shapiro_result$p.value > 0.05, "Tidak tolak H0", "Tolak H0"),
  `Interpretasi` = ifelse(shapiro_result$p.value > 0.05,
                          "Residual berdistribusi normal (asumsi terpenuhi)",
                          "Residual tidak berdistribusi normal (asumsi tidak terpenuhi)")
)

# Tampilkan Tabel
kable(shapiro_table, caption = "Tabel 5. Hasil Uji Normalitas Residual (Shapiro-Wilk)") %>%
  kable_styling(full_width = FALSE, position = "left")
Tabel 5. Hasil Uji Normalitas Residual (Shapiro-Wilk)
Statistik_Uji p_value Keputusan Interpretasi
W 0.9769 0.6551 Tidak tolak H0 Residual berdistribusi normal (asumsi terpenuhi)

Uji Multikolinearitas – menggunakan VIF (Variance Inflation Factor)

Tabel 6. Hasil Uji Multikolinearitas (VIF)

vif_result <- vif(model_ols)
vif_table <- data.frame(
  `Variabel` = names(vif_result),
  `Nilai_VIF` = round(vif_result, 2),
  `Interpretasi` = ifelse(vif_result < 10,
                          "Tidak terjadi multikolinearitas (VIF < 10)",
                          "Terjadi multikolinearitas (VIF > 10)")
)

# Tampilkan Tabel
kable(vif_table, caption = "Tabel 6. Hasil Uji Multikolinearitas (VIF)") %>%
  kable_styling(full_width = FALSE, position = "left")
Tabel 6. Hasil Uji Multikolinearitas (VIF)
Variabel Nilai_VIF Interpretasi
Kepadatan Penduduk Kepadatan Penduduk 2.05 Tidak terjadi multikolinearitas (VIF < 10)
Tingkat Partisipasi Angkatan Kerja Tingkat Partisipasi Angkatan Kerja 1.41 Tidak terjadi multikolinearitas (VIF < 10)
Upah Minimum Kabupaten/Kota Upah Minimum Kabupaten/Kota 1.30 Tidak terjadi multikolinearitas (VIF < 10)
Indeks Pembangunan Manusia Indeks Pembangunan Manusia 2.38 Tidak terjadi multikolinearitas (VIF < 10)

Uji Heteroskedastisitas – menggunakan Breusch-Pagan Test

bptest(model_ols)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_ols
## BP = 3.9377, df = 4, p-value = 0.4145

Uji Signifikansi Model (Uji F)

summary(model_ols)$fstatistic
##    value    numdf    dendf 
## 10.31824  4.00000 30.00000
# Ambil nilai F dan derajat bebas
f_val <- summary(model_ols)$fstatistic[1]
df1 <- summary(model_ols)$fstatistic[2]
df2 <- summary(model_ols)$fstatistic[3]

# Hitung p-value
pval_f <- pf(f_val, df1, df2, lower.tail = FALSE)
pval_f
##        value 
## 2.234095e-05

Uji Signifikansi Parsial (Uji t)

summary(model_ols)$coefficients
##                                           Estimate   Std. Error   t value
## (Intercept)                           4.228001e+01 6.686327e+00  6.323354
## `Kepadatan Penduduk`                  2.278698e-04 1.054294e-04  2.161350
## `Tingkat Partisipasi Angkatan Kerja` -2.855781e-01 6.245037e-02 -4.572881
## `Upah Minimum Kabupaten/Kota`         2.613113e-06 8.366273e-07  3.123389
## `Indeks Pembangunan Manusia`         -3.097930e-01 6.070190e-02 -5.103514
##                                          Pr(>|t|)
## (Intercept)                          5.667616e-07
## `Kepadatan Penduduk`                 3.877522e-02
## `Tingkat Partisipasi Angkatan Kerja` 7.759525e-05
## `Upah Minimum Kabupaten/Kota`        3.942126e-03
## `Indeks Pembangunan Manusia`         1.739148e-05

Matriks Pembobot Spasial

Queen Contiguity

nb_queen <- poly2nb(data_gabung, queen = TRUE)
## Warning in poly2nb(data_gabung, queen = TRUE): some observations have no neighbours;
## if this seems unexpected, try increasing the snap argument.
## Warning in poly2nb(data_gabung, queen = TRUE): neighbour object has 2 sub-graphs;
## if this sub-graph count seems unexpected, try increasing the snap argument.
lw_queen <- nb2listw(nb_queen, style = "W", zero.policy = TRUE)

plot(st_geometry(data_gabung), border = "gray")

# Plot neighbors Queen
plot(nb_queen, 
     coords = st_coordinates(st_centroid(data_gabung)), 
     col = "blue", 
     add = TRUE)
## Warning: st_centroid assumes attributes are constant over geometries

# Tampilkan bentuk Matriks
W_matrix <- listw2mat(lw_queen)
print(W_matrix)
##         [,1] [,2]      [,3]      [,4]      [,5]      [,6]      [,7]      [,8]
## 1  0.0000000    0 0.2000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 2  0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 3  0.2000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 4  0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 5  0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 6  0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333 0.0000000
## 7  0.0000000    0 0.0000000 0.0000000 0.0000000 0.5000000 0.0000000 0.0000000
## 8  0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 9  0.0000000    0 0.0000000 0.1428571 0.1428571 0.0000000 0.0000000 0.1428571
## 10 0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333
## 11 0.0000000    0 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000
## 12 0.2500000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.2500000 0.0000000
## 13 0.0000000    0 0.2000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 14 0.0000000    0 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000
## 15 0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 16 0.0000000    0 0.5000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 17 0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 18 0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333
## 19 0.0000000    0 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000
## 20 0.0000000    0 0.0000000 0.0000000 0.0000000 0.5000000 0.0000000 0.0000000
## 21 0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.2500000
## 22 0.0000000    0 0.0000000 0.0000000 0.1428571 0.0000000 0.0000000 0.0000000
## 23 0.0000000    0 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000 0.0000000
## 24 0.2000000    0 0.2000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 25 0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 26 0.3333333    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 27 0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 28 0.0000000    0 0.0000000 0.5000000 0.0000000 0.0000000 0.0000000 0.0000000
## 29 0.0000000    0 0.0000000 0.0000000 0.1250000 0.0000000 0.0000000 0.1250000
## 30 0.0000000    0 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000
## 31 0.0000000    0 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000
## 32 0.0000000    0 0.0000000 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000
## 33 0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 34 0.0000000    0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 35 0.1428571    0 0.1428571 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##         [,9] [,10]     [,11]     [,12]     [,13]     [,14]     [,15] [,16]
## 1  0.0000000  0.00 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000   0.0
## 2  0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 3  0.0000000  0.00 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000   0.2
## 4  0.3333333  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 5  0.1250000  0.00 0.1250000 0.0000000 0.0000000 0.1250000 0.0000000   0.0
## 6  0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 7  0.0000000  0.00 0.0000000 0.5000000 0.0000000 0.0000000 0.0000000   0.0
## 8  0.2000000  0.20 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 9  0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 10 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 11 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 12 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 13 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 14 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 15 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 16 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 17 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 18 0.0000000  0.00 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000   0.0
## 19 0.0000000  0.00 0.3333333 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 20 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 21 0.2500000  0.25 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 22 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.1428571 0.1428571   0.0
## 23 0.2000000  0.20 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 24 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.2
## 25 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 26 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 27 0.0000000  0.00 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000   0.0
## 28 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 29 0.1250000  0.00 0.0000000 0.0000000 0.1250000 0.0000000 0.0000000   0.0
## 30 0.3333333  0.00 0.3333333 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 31 0.0000000  0.00 0.2000000 0.0000000 0.0000000 0.2000000 0.0000000   0.0
## 32 0.0000000  0.00 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 33 0.0000000  0.00 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000   0.0
## 34 0.0000000  0.00 0.5000000 0.0000000 0.0000000 0.0000000 0.0000000   0.0
## 35 0.0000000  0.00 0.0000000 0.1428571 0.1428571 0.0000000 0.0000000   0.0
##    [,17] [,18] [,19]     [,20]     [,21]     [,22]     [,23]     [,24]
## 1  0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.2000000
## 2  0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 3  0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.2000000
## 4  0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.3333333 0.0000000
## 5  0.000 0.000 0.125 0.0000000 0.0000000 0.1250000 0.0000000 0.0000000
## 6  0.000 0.000 0.000 0.3333333 0.0000000 0.0000000 0.0000000 0.0000000
## 7  0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 8  0.000 0.200 0.000 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000
## 9  0.000 0.000 0.000 0.0000000 0.1428571 0.0000000 0.1428571 0.0000000
## 10 0.000 0.000 0.000 0.0000000 0.3333333 0.0000000 0.3333333 0.0000000
## 11 0.000 0.000 0.200 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 12 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 13 0.000 0.200 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 14 0.000 0.000 0.000 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000
## 15 0.000 0.000 0.000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000
## 16 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.5000000
## 17 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 18 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 19 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 20 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 21 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.2500000 0.0000000
## 22 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 23 0.000 0.000 0.000 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000
## 24 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 25 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333
## 26 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333
## 27 0.000 0.000 0.000 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000
## 28 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.5000000 0.0000000
## 29 0.125 0.125 0.000 0.0000000 0.0000000 0.1250000 0.0000000 0.0000000
## 30 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 31 0.000 0.000 0.200 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 32 0.000 0.000 0.000 0.3333333 0.0000000 0.0000000 0.0000000 0.0000000
## 33 0.000 0.000 0.000 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000
## 34 0.000 0.000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 35 0.000 0.000 0.000 0.0000000 0.0000000 0.1428571 0.0000000 0.0000000
##        [,25]     [,26]     [,27]     [,28]     [,29]     [,30]     [,31]
## 1  0.0000000 0.2000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 2  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 3  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 4  0.0000000 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000
## 5  0.0000000 0.0000000 0.0000000 0.0000000 0.1250000 0.1250000 0.1250000
## 6  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 7  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 8  0.0000000 0.0000000 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000
## 9  0.0000000 0.0000000 0.0000000 0.0000000 0.1428571 0.1428571 0.0000000
## 10 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 11 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.2000000 0.2000000
## 12 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000 0.0000000 0.0000000
## 13 0.0000000 0.0000000 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000
## 14 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333
## 15 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 16 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 17 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000
## 18 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000
## 19 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333
## 20 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 21 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 22 0.0000000 0.0000000 0.1428571 0.0000000 0.1428571 0.0000000 0.0000000
## 23 0.0000000 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000
## 24 0.2000000 0.2000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 25 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 26 0.3333333 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 27 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 28 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 29 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 30 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 31 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 32 0.3333333 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 33 0.0000000 0.0000000 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000
## 34 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.5000000
## 35 0.0000000 0.0000000 0.1428571 0.0000000 0.0000000 0.0000000 0.0000000
##        [,32]     [,33] [,34]     [,35]
## 1  0.0000000 0.0000000   0.0 0.2000000
## 2  0.0000000 0.0000000   0.0 0.0000000
## 3  0.0000000 0.0000000   0.0 0.2000000
## 4  0.0000000 0.0000000   0.0 0.0000000
## 5  0.0000000 0.0000000   0.0 0.0000000
## 6  0.3333333 0.0000000   0.0 0.0000000
## 7  0.0000000 0.0000000   0.0 0.0000000
## 8  0.0000000 0.0000000   0.0 0.0000000
## 9  0.0000000 0.0000000   0.0 0.0000000
## 10 0.0000000 0.0000000   0.0 0.0000000
## 11 0.0000000 0.0000000   0.2 0.0000000
## 12 0.0000000 0.0000000   0.0 0.2500000
## 13 0.0000000 0.2000000   0.0 0.2000000
## 14 0.0000000 0.0000000   0.0 0.0000000
## 15 0.0000000 0.0000000   0.0 0.0000000
## 16 0.0000000 0.0000000   0.0 0.0000000
## 17 0.0000000 0.0000000   0.0 0.0000000
## 18 0.0000000 0.0000000   0.0 0.0000000
## 19 0.0000000 0.0000000   0.0 0.0000000
## 20 0.5000000 0.0000000   0.0 0.0000000
## 21 0.0000000 0.0000000   0.0 0.0000000
## 22 0.0000000 0.1428571   0.0 0.1428571
## 23 0.0000000 0.0000000   0.0 0.0000000
## 24 0.0000000 0.0000000   0.0 0.0000000
## 25 0.3333333 0.0000000   0.0 0.0000000
## 26 0.0000000 0.0000000   0.0 0.0000000
## 27 0.0000000 0.0000000   0.0 0.3333333
## 28 0.0000000 0.0000000   0.0 0.0000000
## 29 0.0000000 0.1250000   0.0 0.0000000
## 30 0.0000000 0.0000000   0.0 0.0000000
## 31 0.0000000 0.0000000   0.2 0.0000000
## 32 0.0000000 0.0000000   0.0 0.0000000
## 33 0.0000000 0.0000000   0.0 0.2500000
## 34 0.0000000 0.0000000   0.0 0.0000000
## 35 0.0000000 0.1428571   0.0 0.0000000

Moran’s I

Tabel 7. Hasil Uji Moran’s I pada Residual Model OLS

moran_resid <- moran.test(residuals(model_ols), lw_queen, zero.policy = TRUE)

# Buat tabel ringkasan
moran_resid_table <- data.frame(
  `Moran_I` = round(moran_resid$estimate[["Moran I statistic"]], 4),
  `Expected_I` = round(moran_resid$estimate[["Expectation"]], 4),
  `Variance` = round(moran_resid$estimate[["Variance"]], 4),
  `p_value` = signif(moran_resid$p.value, 4),
  `Interpretasi` = ifelse(moran_resid$p.value < 0.05,
                          "Terdapat autokorelasi spasial pada residual (lanjut regresi spasial)",
                          "Tidak terdapat autokorelasi spasial (cukup OLS)")
)

kable(moran_resid_table, caption = "Tabel 7. Hasil Uji Moran’s I pada Residual Model OLS") %>%
  kable_styling(full_width = FALSE)
Tabel 7. Hasil Uji Moran’s I pada Residual Model OLS
Moran_I Expected_I Variance p_value Interpretasi
0.2088 -0.0303 0.015 0.02548 Terdapat autokorelasi spasial pada residual (lanjut regresi spasial)

Lagrange Multiplier Tests

lm_tests <- lm.LMtests(model_ols, lw_queen, test = "all", zero.policy = TRUE)
## Please update scripts to use lm.RStests in place of lm.LMtests
lm_tests
## 
##  Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
##  dependence
## 
## data:  
## model: lm(formula = `Tingkat Pengangguran Terbuka` ~ `Kepadatan
## Penduduk` + `Tingkat Partisipasi Angkatan Kerja` + `Upah Minimum
## Kabupaten/Kota` + `Indeks Pembangunan Manusia`, data = data_gabung)
## test weights: listw
## 
## RSerr = 2.7275, df = 1, p-value = 0.09863
## 
## 
##  Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
##  dependence
## 
## data:  
## model: lm(formula = `Tingkat Pengangguran Terbuka` ~ `Kepadatan
## Penduduk` + `Tingkat Partisipasi Angkatan Kerja` + `Upah Minimum
## Kabupaten/Kota` + `Indeks Pembangunan Manusia`, data = data_gabung)
## test weights: listw
## 
## RSlag = 5.5461, df = 1, p-value = 0.01852
## 
## 
##  Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
##  dependence
## 
## data:  
## model: lm(formula = `Tingkat Pengangguran Terbuka` ~ `Kepadatan
## Penduduk` + `Tingkat Partisipasi Angkatan Kerja` + `Upah Minimum
## Kabupaten/Kota` + `Indeks Pembangunan Manusia`, data = data_gabung)
## test weights: listw
## 
## adjRSerr = 0.039787, df = 1, p-value = 0.8419
## 
## 
##  Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
##  dependence
## 
## data:  
## model: lm(formula = `Tingkat Pengangguran Terbuka` ~ `Kepadatan
## Penduduk` + `Tingkat Partisipasi Angkatan Kerja` + `Upah Minimum
## Kabupaten/Kota` + `Indeks Pembangunan Manusia`, data = data_gabung)
## test weights: listw
## 
## adjRSlag = 2.8584, df = 1, p-value = 0.0909
## 
## 
##  Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
##  dependence
## 
## data:  
## model: lm(formula = `Tingkat Pengangguran Terbuka` ~ `Kepadatan
## Penduduk` + `Tingkat Partisipasi Angkatan Kerja` + `Upah Minimum
## Kabupaten/Kota` + `Indeks Pembangunan Manusia`, data = data_gabung)
## test weights: listw
## 
## SARMA = 5.5859, df = 2, p-value = 0.06124

Model Regresi Spasial

data_gabung$X1 <- scale(data_gabung$`Kepadatan Penduduk`)
data_gabung$X2 <- scale(data_gabung$`Tingkat Partisipasi Angkatan Kerja`)
data_gabung$X3 <- scale(data_gabung$`Upah Minimum Kabupaten/Kota`)
data_gabung$X4 <- scale(data_gabung$`Indeks Pembangunan Manusia`)

Spatial Lag Model (SLM) / SAR (Spatial Autoregressive Regression)

model_slm <- lagsarlm(`Tingkat Pengangguran Terbuka` ~ X1 + X2 + X3 + X4, 
                          data = data_gabung, 
                          listw = lw_queen,
                          method = "Matrix", 
                          zero.policy = TRUE)
summary(model_slm)
## 
## Call:lagsarlm(formula = `Tingkat Pengangguran Terbuka` ~ X1 + X2 + 
##     X3 + X4, data = data_gabung, listw = lw_queen, method = "Matrix", 
##     zero.policy = TRUE)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -1.9038137 -0.6830325  0.0011646  0.6809943  1.5770725 
## 
## Type: lag 
## Regions with no neighbours included:
##  2 
## Coefficients: (asymptotic standard errors) 
##             Estimate Std. Error z value  Pr(>|z|)
## (Intercept)  3.32117    0.57600  5.7659 8.122e-09
## X1           0.33037    0.23035  1.4342  0.151517
## X2          -0.92631    0.18032 -5.1372 2.789e-07
## X3           0.51489    0.17729  2.9042  0.003682
## X4          -1.06902    0.25832 -4.1384 3.498e-05
## 
## Rho: 0.27938, LR test value: 4.9316, p-value: 0.026369
## Asymptotic standard error: 0.12826
##     z-value: 2.1781, p-value: 0.029395
## Wald statistic: 4.7443, p-value: 0.029395
## 
## Log likelihood: -45.61044 for lag model
## ML residual variance (sigma squared): 0.77753, (sigma: 0.88178)
## Number of observations: 35 
## Number of parameters estimated: 7 
## AIC: 105.22, (AIC for lm: 108.15)
## LM test for residual autocorrelation
## test value: 0.011696, p-value: 0.91388

Spatial Error Model (SEM)

model_sem <- errorsarlm(`Tingkat Pengangguran Terbuka` ~ X1 + X2 + X3 + X4,
                        data = data_gabung,
                        listw = lw_queen,
                        method = "Matrix",
                        zero.policy = TRUE)
summary(model_sem)
## 
## Call:errorsarlm(formula = `Tingkat Pengangguran Terbuka` ~ X1 + X2 + 
##     X3 + X4, data = data_gabung, listw = lw_queen, method = "Matrix", 
##     zero.policy = TRUE)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.69048 -0.62048  0.13053  0.56388  1.87228 
## 
## Type: error 
## Regions with no neighbours included:
##  2 
## Coefficients: (asymptotic standard errors) 
##             Estimate Std. Error z value  Pr(>|z|)
## (Intercept)  4.62942    0.32422 14.2787 < 2.2e-16
## X1           0.25248    0.21338  1.1832 0.2367161
## X2          -0.65974    0.17768 -3.7130 0.0002048
## X3           0.49818    0.20002  2.4907 0.0127508
## X4          -0.82752    0.28370 -2.9169 0.0035356
## 
## Lambda: 0.57713, LR test value: 5.509, p-value: 0.018919
## Asymptotic standard error: 0.14888
##     z-value: 3.8765, p-value: 0.00010597
## Wald statistic: 15.027, p-value: 0.00010597
## 
## Log likelihood: -45.32176 for error model
## ML residual variance (sigma squared): 0.707, (sigma: 0.84083)
## Number of observations: 35 
## Number of parameters estimated: 7 
## AIC: 104.64, (AIC for lm: 108.15)

Pemilihan Model Terbaik

Tabel 8. Perbandingan Nilai AIC antar Model: OLS, SLM, dan SEM

aic_ols <- AIC(model_ols)
aic_slm <- AIC(model_slm)
aic_sem <- AIC(model_sem)

tabel_aic <- data.frame(
  Model = c("OLS", "SLM (SAR)", "SEM"),
  AIC = round(c(aic_ols, aic_slm, aic_sem), 4)
)

kable(tabel_aic, caption = "Tabel 8. Perbandingan Nilai AIC antar Model: OLS, SLM, dan SEM") %>%
  kable_styling(full_width = FALSE)
Tabel 8. Perbandingan Nilai AIC antar Model: OLS, SLM, dan SEM
Model AIC
OLS 108.1525
SLM (SAR) 105.2209
SEM 104.6435

Spatial Error Model untuk Masing Masing Kabupaten/Kota

# Ambil koefisien SEM
coef_sem <- summary(model_sem)$coefficients  # intercept + betas
lambda_sem <- model_sem$lambda                   # efek error spasial

# Ambil nama-nama wilayah
wilayah <- data_gabung$Kab__Kota

# Ambil matriks pembobot spasial dari listw
W_matrix <- listw2mat(lw_queen)

# Simpan semua persamaan sebagai teks
persamaan_sem <- vector("character", length = length(wilayah))

# Loop per kabupaten/kota
for (i in seq_along(wilayah)) {
  nama <- wilayah[i]
  
  # Buat bagian X: intercept + beta*Xi
  bagian_linier <- paste0(
    round(coef_sem[1], 4), " + ",
    round(coef_sem[2], 4), "*X1_", nama, " + ",
    round(coef_sem[3], 4), "*X2_", nama, " + ",
    round(coef_sem[4], 4), "*X3_", nama, " + ",
    round(coef_sem[5], 4), "*X4_", nama
  )
  
  # Ambil tetangga dari baris ke-i
  tetangga_idx <- which(W_matrix[i, ] != 0)
  tetangga_nama <- wilayah[tetangga_idx]
  bobot <- W_matrix[i, tetangga_idx]
  
  # Buat bagian efek error spasial (lambda * Σwij * εj)
  if (length(tetangga_nama) > 0) {
    bagian_error <- paste0(round(bobot, 4), "*ε_", tetangga_nama, collapse = " + ")
    bagian_error_total <- paste0(" + ", round(lambda_sem, 4), "*(", bagian_error, ")")
  } else {
    bagian_error_total <- ""
  }
  
  # Gabungkan jadi satu persamaan
  persamaan_sem[i] <- paste0("ŷ_", toupper(nama), " = ", bagian_linier, bagian_error_total)
}

# Tampilkan hasil (bisa juga ditulis ke file .txt)
cat(paste(persamaan_sem, collapse = "\n\n"))
## ŷ_BANJARNEGARA = 4.6294 + 0.2525*X1_Banjarnegara + -0.6597*X2_Banjarnegara + 0.4982*X3_Banjarnegara + -0.8275*X4_Banjarnegara + 0.5771*(0.2*ε_Batang + 0.2*ε_Kebumen + 0.2*ε_Pekalongan + 0.2*ε_Purbalingga + 0.2*ε_Wonosobo)
## 
## ŷ_BANYUMAS = 4.6294 + 0.2525*X1_Banyumas + -0.6597*X2_Banyumas + 0.4982*X3_Banyumas + -0.8275*X4_Banyumas
## 
## ŷ_BATANG = 4.6294 + 0.2525*X1_Batang + -0.6597*X2_Batang + 0.4982*X3_Batang + -0.8275*X4_Batang + 0.5771*(0.2*ε_Banjarnegara + 0.2*ε_Kendal + 0.2*ε_Kota Pekalongan + 0.2*ε_Pekalongan + 0.2*ε_Wonosobo)
## 
## ŷ_BLORA = 4.6294 + 0.2525*X1_Blora + -0.6597*X2_Blora + 0.4982*X3_Blora + -0.8275*X4_Blora + 0.5771*(0.3333*ε_Grobogan + 0.3333*ε_Pati + 0.3333*ε_Rembang)
## 
## ŷ_BOYOLALI = 4.6294 + 0.2525*X1_Boyolali + -0.6597*X2_Boyolali + 0.4982*X3_Boyolali + -0.8275*X4_Boyolali + 0.5771*(0.125*ε_Grobogan + 0.125*ε_Karanganyar + 0.125*ε_Klaten + 0.125*ε_Kota Surakarta + 0.125*ε_Magelang + 0.125*ε_Semarang + 0.125*ε_Sragen + 0.125*ε_Sukoharjo)
## 
## ŷ_BREBES = 4.6294 + 0.2525*X1_Brebes + -0.6597*X2_Brebes + 0.4982*X3_Brebes + -0.8275*X4_Brebes + 0.5771*(0.3333*ε_Cilacap + 0.3333*ε_Kota Tegal + 0.3333*ε_Tegal)
## 
## ŷ_CILACAP = 4.6294 + 0.2525*X1_Cilacap + -0.6597*X2_Cilacap + 0.4982*X3_Cilacap + -0.8275*X4_Cilacap + 0.5771*(0.5*ε_Brebes + 0.5*ε_Kebumen)
## 
## ŷ_DEMAK = 4.6294 + 0.2525*X1_Demak + -0.6597*X2_Demak + 0.4982*X3_Demak + -0.8275*X4_Demak + 0.5771*(0.2*ε_Grobogan + 0.2*ε_Jepara + 0.2*ε_Kota Semarang + 0.2*ε_Kudus + 0.2*ε_Semarang)
## 
## ŷ_GROBOGAN = 4.6294 + 0.2525*X1_Grobogan + -0.6597*X2_Grobogan + 0.4982*X3_Grobogan + -0.8275*X4_Grobogan + 0.5771*(0.1429*ε_Blora + 0.1429*ε_Boyolali + 0.1429*ε_Demak + 0.1429*ε_Kudus + 0.1429*ε_Pati + 0.1429*ε_Semarang + 0.1429*ε_Sragen)
## 
## ŷ_JEPARA = 4.6294 + 0.2525*X1_Jepara + -0.6597*X2_Jepara + 0.4982*X3_Jepara + -0.8275*X4_Jepara + 0.5771*(0.3333*ε_Demak + 0.3333*ε_Kudus + 0.3333*ε_Pati)
## 
## ŷ_KARANGANYAR = 4.6294 + 0.2525*X1_Karanganyar + -0.6597*X2_Karanganyar + 0.4982*X3_Karanganyar + -0.8275*X4_Karanganyar + 0.5771*(0.2*ε_Boyolali + 0.2*ε_Kota Surakarta + 0.2*ε_Sragen + 0.2*ε_Sukoharjo + 0.2*ε_Wonogiri)
## 
## ŷ_KEBUMEN = 4.6294 + 0.2525*X1_Kebumen + -0.6597*X2_Kebumen + 0.4982*X3_Kebumen + -0.8275*X4_Kebumen + 0.5771*(0.25*ε_Banjarnegara + 0.25*ε_Cilacap + 0.25*ε_Purworejo + 0.25*ε_Wonosobo)
## 
## ŷ_KENDAL = 4.6294 + 0.2525*X1_Kendal + -0.6597*X2_Kendal + 0.4982*X3_Kendal + -0.8275*X4_Kendal + 0.5771*(0.2*ε_Batang + 0.2*ε_Kota Semarang + 0.2*ε_Semarang + 0.2*ε_Temanggung + 0.2*ε_Wonosobo)
## 
## ŷ_KLATEN = 4.6294 + 0.2525*X1_Klaten + -0.6597*X2_Klaten + 0.4982*X3_Klaten + -0.8275*X4_Klaten + 0.5771*(0.3333*ε_Boyolali + 0.3333*ε_Magelang + 0.3333*ε_Sukoharjo)
## 
## ŷ_KOTA MAGELANG = 4.6294 + 0.2525*X1_Kota Magelang + -0.6597*X2_Kota Magelang + 0.4982*X3_Kota Magelang + -0.8275*X4_Kota Magelang + 0.5771*(1*ε_Magelang)
## 
## ŷ_KOTA PEKALONGAN = 4.6294 + 0.2525*X1_Kota Pekalongan + -0.6597*X2_Kota Pekalongan + 0.4982*X3_Kota Pekalongan + -0.8275*X4_Kota Pekalongan + 0.5771*(0.5*ε_Batang + 0.5*ε_Pekalongan)
## 
## ŷ_KOTA SALATIGA = 4.6294 + 0.2525*X1_Kota Salatiga + -0.6597*X2_Kota Salatiga + 0.4982*X3_Kota Salatiga + -0.8275*X4_Kota Salatiga + 0.5771*(1*ε_Semarang)
## 
## ŷ_KOTA SEMARANG = 4.6294 + 0.2525*X1_Kota Semarang + -0.6597*X2_Kota Semarang + 0.4982*X3_Kota Semarang + -0.8275*X4_Kota Semarang + 0.5771*(0.3333*ε_Demak + 0.3333*ε_Kendal + 0.3333*ε_Semarang)
## 
## ŷ_KOTA SURAKARTA = 4.6294 + 0.2525*X1_Kota Surakarta + -0.6597*X2_Kota Surakarta + 0.4982*X3_Kota Surakarta + -0.8275*X4_Kota Surakarta + 0.5771*(0.3333*ε_Boyolali + 0.3333*ε_Karanganyar + 0.3333*ε_Sukoharjo)
## 
## ŷ_KOTA TEGAL = 4.6294 + 0.2525*X1_Kota Tegal + -0.6597*X2_Kota Tegal + 0.4982*X3_Kota Tegal + -0.8275*X4_Kota Tegal + 0.5771*(0.5*ε_Brebes + 0.5*ε_Tegal)
## 
## ŷ_KUDUS = 4.6294 + 0.2525*X1_Kudus + -0.6597*X2_Kudus + 0.4982*X3_Kudus + -0.8275*X4_Kudus + 0.5771*(0.25*ε_Demak + 0.25*ε_Grobogan + 0.25*ε_Jepara + 0.25*ε_Pati)
## 
## ŷ_MAGELANG = 4.6294 + 0.2525*X1_Magelang + -0.6597*X2_Magelang + 0.4982*X3_Magelang + -0.8275*X4_Magelang + 0.5771*(0.1429*ε_Boyolali + 0.1429*ε_Klaten + 0.1429*ε_Kota Magelang + 0.1429*ε_Purworejo + 0.1429*ε_Semarang + 0.1429*ε_Temanggung + 0.1429*ε_Wonosobo)
## 
## ŷ_PATI = 4.6294 + 0.2525*X1_Pati + -0.6597*X2_Pati + 0.4982*X3_Pati + -0.8275*X4_Pati + 0.5771*(0.2*ε_Blora + 0.2*ε_Grobogan + 0.2*ε_Jepara + 0.2*ε_Kudus + 0.2*ε_Rembang)
## 
## ŷ_PEKALONGAN = 4.6294 + 0.2525*X1_Pekalongan + -0.6597*X2_Pekalongan + 0.4982*X3_Pekalongan + -0.8275*X4_Pekalongan + 0.5771*(0.2*ε_Banjarnegara + 0.2*ε_Batang + 0.2*ε_Kota Pekalongan + 0.2*ε_Pemalang + 0.2*ε_Purbalingga)
## 
## ŷ_PEMALANG = 4.6294 + 0.2525*X1_Pemalang + -0.6597*X2_Pemalang + 0.4982*X3_Pemalang + -0.8275*X4_Pemalang + 0.5771*(0.3333*ε_Pekalongan + 0.3333*ε_Purbalingga + 0.3333*ε_Tegal)
## 
## ŷ_PURBALINGGA = 4.6294 + 0.2525*X1_Purbalingga + -0.6597*X2_Purbalingga + 0.4982*X3_Purbalingga + -0.8275*X4_Purbalingga + 0.5771*(0.3333*ε_Banjarnegara + 0.3333*ε_Pekalongan + 0.3333*ε_Pemalang)
## 
## ŷ_PURWOREJO = 4.6294 + 0.2525*X1_Purworejo + -0.6597*X2_Purworejo + 0.4982*X3_Purworejo + -0.8275*X4_Purworejo + 0.5771*(0.3333*ε_Kebumen + 0.3333*ε_Magelang + 0.3333*ε_Wonosobo)
## 
## ŷ_REMBANG = 4.6294 + 0.2525*X1_Rembang + -0.6597*X2_Rembang + 0.4982*X3_Rembang + -0.8275*X4_Rembang + 0.5771*(0.5*ε_Blora + 0.5*ε_Pati)
## 
## ŷ_SEMARANG = 4.6294 + 0.2525*X1_Semarang + -0.6597*X2_Semarang + 0.4982*X3_Semarang + -0.8275*X4_Semarang + 0.5771*(0.125*ε_Boyolali + 0.125*ε_Demak + 0.125*ε_Grobogan + 0.125*ε_Kendal + 0.125*ε_Kota Salatiga + 0.125*ε_Kota Semarang + 0.125*ε_Magelang + 0.125*ε_Temanggung)
## 
## ŷ_SRAGEN = 4.6294 + 0.2525*X1_Sragen + -0.6597*X2_Sragen + 0.4982*X3_Sragen + -0.8275*X4_Sragen + 0.5771*(0.3333*ε_Boyolali + 0.3333*ε_Grobogan + 0.3333*ε_Karanganyar)
## 
## ŷ_SUKOHARJO = 4.6294 + 0.2525*X1_Sukoharjo + -0.6597*X2_Sukoharjo + 0.4982*X3_Sukoharjo + -0.8275*X4_Sukoharjo + 0.5771*(0.2*ε_Boyolali + 0.2*ε_Karanganyar + 0.2*ε_Klaten + 0.2*ε_Kota Surakarta + 0.2*ε_Wonogiri)
## 
## ŷ_TEGAL = 4.6294 + 0.2525*X1_Tegal + -0.6597*X2_Tegal + 0.4982*X3_Tegal + -0.8275*X4_Tegal + 0.5771*(0.3333*ε_Brebes + 0.3333*ε_Kota Tegal + 0.3333*ε_Pemalang)
## 
## ŷ_TEMANGGUNG = 4.6294 + 0.2525*X1_Temanggung + -0.6597*X2_Temanggung + 0.4982*X3_Temanggung + -0.8275*X4_Temanggung + 0.5771*(0.25*ε_Kendal + 0.25*ε_Magelang + 0.25*ε_Semarang + 0.25*ε_Wonosobo)
## 
## ŷ_WONOGIRI = 4.6294 + 0.2525*X1_Wonogiri + -0.6597*X2_Wonogiri + 0.4982*X3_Wonogiri + -0.8275*X4_Wonogiri + 0.5771*(0.5*ε_Karanganyar + 0.5*ε_Sukoharjo)
## 
## ŷ_WONOSOBO = 4.6294 + 0.2525*X1_Wonosobo + -0.6597*X2_Wonosobo + 0.4982*X3_Wonosobo + -0.8275*X4_Wonosobo + 0.5771*(0.1429*ε_Banjarnegara + 0.1429*ε_Batang + 0.1429*ε_Kebumen + 0.1429*ε_Kendal + 0.1429*ε_Magelang + 0.1429*ε_Purworejo + 0.1429*ε_Temanggung)