ANALISIS AUTOKORELASI SPASIAL SUARA PAN 31 KABUPATEN/KOTA DI JAKARTA DAN JAWA BARAT

METODE:

1. Queen Contiguity

2. Matriks Bobot Spasial

3. Moran’s I Manual

4. Moran’s I dengan spdep

5. Row Standardized Weight

6. Moran Scatterplot

7. Local Moran’s I (LISA)

8. Visualisasi Peta

# 1. LOAD PACKAGE

``` r
library(sf)
## Linking to GEOS 3.14.1, GDAL 3.12.1, PROJ 9.7.1; sf_use_s2() is TRUE
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(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

2. MEMBACA SHAPEFILE

shp <- st_read("D:/STATISTIKA/SEM 5/Analisis Data Spasial/Tugas 3/Shapefile/SHP.shp")
## Reading layer `SHP' from data source 
##   `D:\STATISTIKA\SEM 5\Analisis Data Spasial\Tugas 3\Shapefile\SHP.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 540 features and 25 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 94.97195 ymin: -11.00755 xmax: 141.02 ymax: 6.076741
## Geodetic CRS:  WGS 84
# Melihat data
shp
## Simple feature collection with 540 features and 25 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 94.97195 ymin: -11.00755 xmax: 141.02 ymax: 6.076741
## Geodetic CRS:  WGS 84
## First 10 features:
##    OBJECTID          NAMOBJ      FCODE REMARK                   METADATA SRS_ID
## 1      1077      Aceh Barat BA03050040   <NA> TASWIL5000020260612KABKOTA   4326
## 2      1078 Aceh Barat Daya BA03050040   <NA> TASWIL5000020260612KABKOTA   4326
## 3      1080       Aceh Jaya BA03050040   <NA> TASWIL5000020260612KABKOTA   4326
## 4      1081    Aceh Selatan BA03050040   <NA> TASWIL5000020260612KABKOTA   4326
## 5      1082    Aceh Singkil BA03050040   <NA> TASWIL5000020260612KABKOTA   4326
## 6      1083    Aceh Tamiang BA03050040   <NA> TASWIL5000020260612KABKOTA   4326
## 7      1084     Aceh Tengah BA03050040   <NA> TASWIL5000020221227KABKOTA   4326
## 8      1085   Aceh Tenggara BA03050040   <NA> TASWIL5000020221227KABKOTA   4326
## 9      1086      Aceh Timur BA03050040   <NA> TASWIL5000020260612KABKOTA   4326
## 10     1087      Aceh Utara BA03050040   <NA> TASWIL5000020260612KABKOTA   4326
##    KDBBPS KDCBPS KDCPUM KDEBPS KDEPUM KDPBPS KDPKAB KDPPUM   LUASWH TIPADM
## 1    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>  11.05     11 2782.606      4
## 2    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>  11.12     11 1882.054      4
## 3    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>  11.14     11 3870.566      4
## 4    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>  11.01     11 4174.211      4
## 5    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>  11.10     11 1851.615      4
## 6    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>  11.16     11 2187.817      4
## 7    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>  11.04     11 4468.417      4
## 8    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>  11.02     11 4179.123      4
## 9    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>  11.03     11 5409.158      4
## 10   <NA>   <NA>   <NA>   <NA>   <NA>   <NA>  11.08     11 2705.045      4
##    WADMKC WADMKD          WADMKK WADMPR WIADKC       WIADKK WIADPR WIADKD
## 1    <NA>   <NA>      Aceh Barat   Aceh   <NA>         <NA>   <NA>      0
## 2    <NA>   <NA> Aceh Barat Daya   Aceh   <NA> Aceh Selatan   <NA>      0
## 3    <NA>   <NA>       Aceh Jaya   Aceh   <NA>         <NA>   <NA>      0
## 4    <NA>   <NA>    Aceh Selatan   Aceh   <NA> Aceh Selatan   <NA>      0
## 5    <NA>   <NA>    Aceh Singkil   Aceh   <NA>         <NA>   <NA>      0
## 6    <NA>   <NA>    Aceh Tamiang   Aceh   <NA>   Aceh Timur   <NA>      0
## 7    <NA>   <NA>     Aceh Tengah   Aceh   <NA>         <NA>   <NA>      0
## 8    <NA>   <NA>   Aceh Tenggara   Aceh   <NA>         <NA>   <NA>      0
## 9    <NA>   <NA>      Aceh Timur   Aceh   <NA>   Aceh Timur   <NA>      0
## 10   <NA>   <NA>      Aceh Utara   Aceh   <NA>         <NA>   <NA>      0
##        LastSync                       geometry
## 1  LapakGIS.com MULTIPOLYGON (((96.24327 4....
## 2  LapakGIS.com MULTIPOLYGON (((96.72918 4....
## 3  LapakGIS.com MULTIPOLYGON (((95.38995 5....
## 4  LapakGIS.com MULTIPOLYGON (((97.267 3.64...
## 5  LapakGIS.com MULTIPOLYGON (((98.01587 2....
## 6  LapakGIS.com MULTIPOLYGON (((98.11884 4....
## 7  LapakGIS.com MULTIPOLYGON (((96.62116 4....
## 8  LapakGIS.com MULTIPOLYGON (((97.8248 3.7...
## 9  LapakGIS.com MULTIPOLYGON (((97.49564 5....
## 10 LapakGIS.com MULTIPOLYGON (((96.97708 5....
# Nama variabel
names(shp)
##  [1] "OBJECTID" "NAMOBJ"   "FCODE"    "REMARK"   "METADATA" "SRS_ID"  
##  [7] "KDBBPS"   "KDCBPS"   "KDCPUM"   "KDEBPS"   "KDEPUM"   "KDPBPS"  
## [13] "KDPKAB"   "KDPPUM"   "LUASWH"   "TIPADM"   "WADMKC"   "WADMKD"  
## [19] "WADMKK"   "WADMPR"   "WIADKC"   "WIADKK"   "WIADPR"   "WIADKD"  
## [25] "LastSync" "geometry"
# Sistem koordinat
st_crs(shp)
## Coordinate Reference System:
##   User input: WGS 84 
##   wkt:
## GEOGCRS["WGS 84",
##     DATUM["World Geodetic System 1984",
##         ELLIPSOID["WGS 84",6378137,298.257223563,
##             LENGTHUNIT["metre",1]]],
##     PRIMEM["Greenwich",0,
##         ANGLEUNIT["degree",0.0174532925199433]],
##     CS[ellipsoidal,2],
##         AXIS["latitude",north,
##             ORDER[1],
##             ANGLEUNIT["degree",0.0174532925199433]],
##         AXIS["longitude",east,
##             ORDER[2],
##             ANGLEUNIT["degree",0.0174532925199433]],
##     ID["EPSG",4326]]
# Jumlah seluruh wilayah dalam shapefile
nrow(shp)
## [1] 540

3. DATA SUARA PAN

pan <- data.frame(wilayah = c("Jakarta Timur", "Jakarta Selatan", "Jakarta Pusat", "Jakarta Barat","Jakarta Utara",
                              "Kota Bandung", "Kota Cimahi", "Kab. Bandung", "Kab. Bandung Barat","Kab. Cianjur",
                              "Kota Bogor", "Kab. Sukabumi", "Kota Sukabumi", "Kab. Bogor", "Kota Bekasi", "Kota Depok",
                              "Kab. Purwakarta", "Kab. Karawang", "Kab. Bekasi", "Kab. Cirebon", "Kab. Indramayu",
                              "Kota Cirebon", "Kab. Majalengka", "Kab. Sumedang", "Kab. Subang", "Kab. Ciamis", 
                              "Kab. Kuningan", "Kota Banjar", "Kab. Garut", "Kab. Tasikmalaya", "Kota Tasikmalaya"),
  suara_pan = c(417344, 274529, 145495, 285640, 212101, 442769, 84855, 436420, 169282, 223892, 150358, 269380, 42044,
                553302, 269862, 208964, 68245, 209263, 190200, 164567, 64018, 34526, 70730, 83097, 129990, 170575,
                100034, 12217, 264577, 144249, 71859))

4. CEK DATA

Jumlah observasi

cat("Jumlah observasi =", nrow(pan), "\n")
## Jumlah observasi = 31
# Total suara
cat("Total suara PAN =", sum(pan$suara_pan), "\n")
## Total suara PAN = 5964384
# Statistik deskriptif
summary(pan$suara_pan)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   12217   83976  169282  192399  266979  553302
pan
##               wilayah suara_pan
## 1       Jakarta Timur    417344
## 2     Jakarta Selatan    274529
## 3       Jakarta Pusat    145495
## 4       Jakarta Barat    285640
## 5       Jakarta Utara    212101
## 6        Kota Bandung    442769
## 7         Kota Cimahi     84855
## 8        Kab. Bandung    436420
## 9  Kab. Bandung Barat    169282
## 10       Kab. Cianjur    223892
## 11         Kota Bogor    150358
## 12      Kab. Sukabumi    269380
## 13      Kota Sukabumi     42044
## 14         Kab. Bogor    553302
## 15        Kota Bekasi    269862
## 16         Kota Depok    208964
## 17    Kab. Purwakarta     68245
## 18      Kab. Karawang    209263
## 19        Kab. Bekasi    190200
## 20       Kab. Cirebon    164567
## 21     Kab. Indramayu     64018
## 22       Kota Cirebon     34526
## 23    Kab. Majalengka     70730
## 24      Kab. Sumedang     83097
## 25        Kab. Subang    129990
## 26        Kab. Ciamis    170575
## 27      Kab. Kuningan    100034
## 28        Kota Banjar     12217
## 29         Kab. Garut    264577
## 30   Kab. Tasikmalaya    144249
## 31   Kota Tasikmalaya     71859

5. MENYESUAIKAN NAMA WILAYAH DENGAN SHAPEFILE

pan$nama_shp <- c("Kota Administrasi Jakarta Timur", "Kota Administrasi Jakarta Selatan", "Kota Administrasi Jakarta Pusat", 
                  "Kota Administrasi Jakarta Barat", "Kota Administrasi Jakarta Utara", "Kota Bandung", "Kota Cimahi", "Bandung",
                  "Bandung Barat", "Cianjur", "Kota Bogor", "Sukabumi", "Kota Sukabumi", "Bogor", "Kota Bekasi", "Kota Depok",
                  "Purwakarta", "Karawang", "Bekasi", "Cirebon", "Indramayu", "Kota Cirebon", "Majalengka", "Sumedang", "Subang",
                  "Ciamis", "Kuningan", "Kota Banjar", "Garut", "Tasikmalaya", "Kota Tasikmalaya")
# Cek pencocokan
pan[, c("wilayah", "nama_shp", "suara_pan")]
##               wilayah                          nama_shp suara_pan
## 1       Jakarta Timur   Kota Administrasi Jakarta Timur    417344
## 2     Jakarta Selatan Kota Administrasi Jakarta Selatan    274529
## 3       Jakarta Pusat   Kota Administrasi Jakarta Pusat    145495
## 4       Jakarta Barat   Kota Administrasi Jakarta Barat    285640
## 5       Jakarta Utara   Kota Administrasi Jakarta Utara    212101
## 6        Kota Bandung                      Kota Bandung    442769
## 7         Kota Cimahi                       Kota Cimahi     84855
## 8        Kab. Bandung                           Bandung    436420
## 9  Kab. Bandung Barat                     Bandung Barat    169282
## 10       Kab. Cianjur                           Cianjur    223892
## 11         Kota Bogor                        Kota Bogor    150358
## 12      Kab. Sukabumi                          Sukabumi    269380
## 13      Kota Sukabumi                     Kota Sukabumi     42044
## 14         Kab. Bogor                             Bogor    553302
## 15        Kota Bekasi                       Kota Bekasi    269862
## 16         Kota Depok                        Kota Depok    208964
## 17    Kab. Purwakarta                        Purwakarta     68245
## 18      Kab. Karawang                          Karawang    209263
## 19        Kab. Bekasi                            Bekasi    190200
## 20       Kab. Cirebon                           Cirebon    164567
## 21     Kab. Indramayu                         Indramayu     64018
## 22       Kota Cirebon                      Kota Cirebon     34526
## 23    Kab. Majalengka                        Majalengka     70730
## 24      Kab. Sumedang                          Sumedang     83097
## 25        Kab. Subang                            Subang    129990
## 26        Kab. Ciamis                            Ciamis    170575
## 27      Kab. Kuningan                          Kuningan    100034
## 28        Kota Banjar                       Kota Banjar     12217
## 29         Kab. Garut                             Garut    264577
## 30   Kab. Tasikmalaya                       Tasikmalaya    144249
## 31   Kota Tasikmalaya                  Kota Tasikmalaya     71859

6. MEMILIH 31 WILAYAH DARI SHAPEFILE

shp_pan <- shp %>% filter(WADMKK %in% pan$nama_shp) %>% arrange(match(WADMKK, pan$nama_shp))

# Jumlah wilayah
cat("Jumlah wilayah pada analisis =", nrow(shp_pan), "\n")
## Jumlah wilayah pada analisis = 31

7. CEK WILAYAH YANG TIDAK DITEMUKAN

wilayah_tidak_ditemukan <- setdiff(pan$nama_shp, shp_pan$WADMKK)
print(wilayah_tidak_ditemukan)
## character(0)

8. MEMASUKKAN DATA SUARA KE SHAPEFILE

shp_pan$suara_pan <- pan$suara_pan
shp_pan %>%st_drop_geometry() %>% select(WADMKK, suara_pan)
##                               WADMKK suara_pan
## 1    Kota Administrasi Jakarta Timur    417344
## 2  Kota Administrasi Jakarta Selatan    274529
## 3    Kota Administrasi Jakarta Pusat    145495
## 4    Kota Administrasi Jakarta Barat    285640
## 5    Kota Administrasi Jakarta Utara    212101
## 6                       Kota Bandung    442769
## 7                        Kota Cimahi     84855
## 8                            Bandung    436420
## 9                      Bandung Barat    169282
## 10                           Cianjur    223892
## 11                        Kota Bogor    150358
## 12                          Sukabumi    269380
## 13                     Kota Sukabumi     42044
## 14                             Bogor    553302
## 15                       Kota Bekasi    269862
## 16                        Kota Depok    208964
## 17                        Purwakarta     68245
## 18                          Karawang    209263
## 19                            Bekasi    190200
## 20                           Cirebon    164567
## 21                         Indramayu     64018
## 22                      Kota Cirebon     34526
## 23                        Majalengka     70730
## 24                          Sumedang     83097
## 25                            Subang    129990
## 26                            Ciamis    170575
## 27                          Kuningan    100034
## 28                       Kota Banjar     12217
## 29                             Garut    264577
## 30                       Tasikmalaya    144249
## 31                  Kota Tasikmalaya     71859

9. VISUALISASI 1 PETA PERSEBARAN SUARA PAN

p1 <- ggplot(shp_pan) + geom_sf(aes(fill = suara_pan), color = "white", linewidth = 0.3) +
  scale_fill_gradient(low = "#E3F2FD", high = "#0D47A1", name = "Suara PAN") +
  labs(title = "Persebaran Perolehan Suara PAN", subtitle = "DKI Jakarta dan Jawa Barat") +
  theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold", size = 15), plot.subtitle = element_text(size = 11),
    legend.title = element_text(face = "bold"), panel.grid = element_blank())
print(p1)

# 10. QUEEN CONTIGUITY

# w <- poly2nb(p, row.names=p$Id)
nb <- poly2nb(shp_pan, queen = TRUE)
# Struktur objek
class(nb)
## [1] "nb"
summary(nb)
## Neighbour list object:
## Number of regions: 31 
## Number of nonzero links: 128 
## Percentage nonzero weights: 13.31946 
## Average number of links: 4.129032 
## Link number distribution:
## 
## 1 2 3 4 5 6 7 8 
## 4 1 5 9 4 6 1 1 
## 4 least connected regions:
## 11 13 22 28 with 1 link
## 1 most connected region:
## 14 with 8 links
str(nb)
## List of 31
##  $ : int [1:6] 2 3 5 15 16 19
##  $ : int [1:4] 1 3 4 16
##  $ : int [1:4] 1 2 4 5
##  $ : int [1:3] 2 3 5
##  $ : int [1:4] 1 3 4 19
##  $ : int [1:3] 7 8 9
##  $ : int [1:3] 6 8 9
##  $ : int [1:7] 6 7 9 10 24 25 29
##  $ : int [1:6] 6 7 8 10 17 25
##  $ : int [1:6] 8 9 12 14 17 29
##  $ : int 14
##  $ : int [1:3] 10 13 14
##  $ : int 12
##  $ : int [1:8] 10 11 12 15 16 17 18 19
##  $ : int [1:4] 1 14 16 19
##  $ : int [1:4] 1 2 14 15
##  $ : int [1:5] 9 10 14 18 25
##  $ : int [1:4] 14 17 19 25
##  $ : int [1:5] 1 5 14 15 18
##  $ : int [1:4] 21 22 23 27
##  $ : int [1:4] 20 23 24 25
##  $ : int 20
##  $ : int [1:6] 20 21 24 26 27 30
##  $ : int [1:6] 8 21 23 25 29 30
##  $ : int [1:6] 8 9 17 18 21 24
##  $ : int [1:5] 23 27 28 30 31
##  $ : int [1:3] 20 23 26
##  $ : int 26
##  $ : int [1:4] 8 10 24 30
##  $ : int [1:5] 23 24 26 29 31
##  $ : int [1:2] 26 30
##  - attr(*, "class")= chr "nb"
##  - attr(*, "region.id")= chr [1:31] "1" "2" "3" "4" ...
##  - attr(*, "call")= language poly2nb(pl = shp_pan, queen = TRUE)
##  - attr(*, "type")= chr "queen"
##  - attr(*, "snap")= num 9e-08
##  - attr(*, "sym")= logi TRUE
##  - attr(*, "ncomp")=List of 2
##   ..$ nc     : int 1
##   ..$ comp.id: int [1:31] 1 1 1 1 1 1 1 1 1 1 ...

11. JUMLAH TETANGGA

jumlah_tetangga <- data.frame(wilayah = pan$wilayah, jumlah_tetangga = card(nb))
print(jumlah_tetangga)
##               wilayah jumlah_tetangga
## 1       Jakarta Timur               6
## 2     Jakarta Selatan               4
## 3       Jakarta Pusat               4
## 4       Jakarta Barat               3
## 5       Jakarta Utara               4
## 6        Kota Bandung               3
## 7         Kota Cimahi               3
## 8        Kab. Bandung               7
## 9  Kab. Bandung Barat               6
## 10       Kab. Cianjur               6
## 11         Kota Bogor               1
## 12      Kab. Sukabumi               3
## 13      Kota Sukabumi               1
## 14         Kab. Bogor               8
## 15        Kota Bekasi               4
## 16         Kota Depok               4
## 17    Kab. Purwakarta               5
## 18      Kab. Karawang               4
## 19        Kab. Bekasi               5
## 20       Kab. Cirebon               4
## 21     Kab. Indramayu               4
## 22       Kota Cirebon               1
## 23    Kab. Majalengka               6
## 24      Kab. Sumedang               6
## 25        Kab. Subang               6
## 26        Kab. Ciamis               5
## 27      Kab. Kuningan               3
## 28        Kota Banjar               1
## 29         Kab. Garut               4
## 30   Kab. Tasikmalaya               5
## 31   Kota Tasikmalaya               2
# Jumlah nonzero links
jumlah_nonzero_links <- sum(card(nb))
cat("Jumlah nonzero links =", jumlah_nonzero_links, "\n")
## Jumlah nonzero links = 128
# Hubungan unik tak berarah
jumlah_pasangan_unik <- (jumlah_nonzero_links / 2)
cat("Jumlah pasangan hubungan unik =", jumlah_pasangan_unik, "\n")
## Jumlah pasangan hubungan unik = 64

12. VISUALISASI 2 QUEEN CONTIGUITY

# Titik centroid
xy_centroid <- st_centroid(st_geometry(shp_pan))
coords <- st_coordinates(xy_centroid)
plot(st_geometry(shp_pan), col = "#F2F2F2", border = "#555555", main = "Queen Contiguity 31 Kabupaten/Kota")
plot(nb, coords, col = "#D73027", lwd = 1.5, add = TRUE)
points(coords, pch = 19, col = "#222222", cex = 0.5)

# 13. MEMBUAT MATRIKS BOBOT W*

# wm <- nb2mat(w, style='B')
W_star <- nb2mat(nb, style = "B", zero.policy = TRUE)
W_star
##    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
## 1  0 1 1 0 1 0 0 0 0  0  0  0  0  0  1  1  0  0  1  0  0  0  0  0  0  0  0  0
## 2  1 0 1 1 0 0 0 0 0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0
## 3  1 1 0 1 1 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## 4  0 1 1 0 1 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## 5  1 0 1 1 0 0 0 0 0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0
## 6  0 0 0 0 0 0 1 1 1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## 7  0 0 0 0 0 1 0 1 1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## 8  0 0 0 0 0 1 1 0 1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  1  1  0  0  0
## 9  0 0 0 0 0 1 1 1 0  1  0  0  0  0  0  0  1  0  0  0  0  0  0  0  1  0  0  0
## 10 0 0 0 0 0 0 0 1 1  0  0  1  0  1  0  0  1  0  0  0  0  0  0  0  0  0  0  0
## 11 0 0 0 0 0 0 0 0 0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## 12 0 0 0 0 0 0 0 0 0  1  0  0  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## 13 0 0 0 0 0 0 0 0 0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## 14 0 0 0 0 0 0 0 0 0  1  1  1  0  0  1  1  1  1  1  0  0  0  0  0  0  0  0  0
## 15 1 0 0 0 0 0 0 0 0  0  0  0  0  1  0  1  0  0  1  0  0  0  0  0  0  0  0  0
## 16 1 1 0 0 0 0 0 0 0  0  0  0  0  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0
## 17 0 0 0 0 0 0 0 0 1  1  0  0  0  1  0  0  0  1  0  0  0  0  0  0  1  0  0  0
## 18 0 0 0 0 0 0 0 0 0  0  0  0  0  1  0  0  1  0  1  0  0  0  0  0  1  0  0  0
## 19 1 0 0 0 1 0 0 0 0  0  0  0  0  1  1  0  0  1  0  0  0  0  0  0  0  0  0  0
## 20 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  1  1  1  0  0  0  1  0
## 21 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  1  0  0  1  1  1  0  0  0
## 22 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0
## 23 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  1  1  0  0  1  0  1  1  0
## 24 0 0 0 0 0 0 0 1 0  0  0  0  0  0  0  0  0  0  0  0  1  0  1  0  1  0  0  0
## 25 0 0 0 0 0 0 0 1 1  0  0  0  0  0  0  0  1  1  0  0  1  0  0  1  0  0  0  0
## 26 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  1  1
## 27 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  1  0  0  1  0  0  1  0  0
## 28 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0
## 29 0 0 0 0 0 0 0 1 0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0
## 30 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  1  0  1  0  0
## 31 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0
##    29 30 31
## 1   0  0  0
## 2   0  0  0
## 3   0  0  0
## 4   0  0  0
## 5   0  0  0
## 6   0  0  0
## 7   0  0  0
## 8   1  0  0
## 9   0  0  0
## 10  1  0  0
## 11  0  0  0
## 12  0  0  0
## 13  0  0  0
## 14  0  0  0
## 15  0  0  0
## 16  0  0  0
## 17  0  0  0
## 18  0  0  0
## 19  0  0  0
## 20  0  0  0
## 21  0  0  0
## 22  0  0  0
## 23  0  1  0
## 24  1  1  0
## 25  0  0  0
## 26  0  1  1
## 27  0  0  0
## 28  0  0  0
## 29  0  1  0
## 30  1  0  1
## 31  0  1  0
## attr(,"call")
## nb2mat(neighbours = nb, style = "B", zero.policy = TRUE)
# Ukuran matriks
dim(W_star)
## [1] 31 31

14. MENGHITUNG S0

S0_star <- sum(W_star)
cat("S0 W* =", S0_star, "\n")
## S0 W* = 128

15. MEMBUAT LISTW BINARY

listw_B <- nb2listw(nb, style = "B", zero.policy = TRUE)

# Cek S0
Szero(listw_B)
## [1] 128

16. DATA UNTUK MORAN’S I

# n <- length(p)
# y <- p$value
# ybar <- mean(y)

n <- length(pan$suara_pan)
y <- pan$suara_pan
ybar <- mean(y)
cat("n =", n,"\n")
## n = 31
cat("Rata-rata suara =", ybar, "\n")
## Rata-rata suara = 192399.5

17. MORAN’S I MANUAL

# Selisih terhadap rata-rata
dy <- y - ybar
# Membentuk pasangan nilai
g <- expand.grid(dy, dy)
yiyj <- g[, 1] * g[, 2]

yi <- rep(dy, each = n)
yj <- rep(dy)
yiyj <- yi * yj

# Membentuk matriks
pm <- matrix(yiyj, ncol = n)

# Perkalian dengan matriks bobot
pmw <- pm * W_star

# PEMBILANG
spmw <- sum(pmw)
pembilang <- spmw
# S0
smw <- sum(W_star)
S0 <- smw

# PENYEBUT
penyebut <- sum(dy^2)

# Komponen rumus Moran
vr <- n / penyebut
sw <- pembilang / S0

# MORAN'S I
MI <- vr * sw

# EXPECTED MORAN'S I
EI <- -1 / (n - 1)

18. MENAMPILKAN PERHITUNGAN MANUAL MORAN

cat("\n============================================\n")
## 
## ============================================
cat("PERHITUNGAN MANUAL MORAN'S I\n")
## PERHITUNGAN MANUAL MORAN'S I
cat("============================================\n")
## ============================================
cat("Jumlah wilayah (n)       =", n, "\n")
## Jumlah wilayah (n)       = 31
cat("Rata-rata (ybar)         =", ybar, "\n")
## Rata-rata (ybar)         = 192399.5
cat("S0                       =", S0, "\n")
## S0                       = 128
cat("Pembilang                =", pembilang, "\n")
## Pembilang                = 269434758621
cat("Penyebut                 =", penyebut, "\n")
## Penyebut                 = 522836865586
cat("n / Penyebut             =", vr, "\n")
## n / Penyebut             = 5.929192e-11
cat("Pembilang / S0           =", sw,"\n")
## Pembilang / S0           = 2104959052
cat("Moran's I                =", MI,"\n")
## Moran's I                = 0.1248071
cat("Expected Moran's I       =", EI, "\n")
## Expected Moran's I       = -0.03333333

19. MORAN’S I DENGAN FUNGSI SPDEP

# moran(p$value, ww,
#       n=length(ww$neighbours),
#       S0=Szero(ww))

moran_Wstar <- moran(y, listw_B, n = length(listw_B$neighbours),
  S0 = Szero(listw_B),
  zero.policy = TRUE)
cat("HASIL MORAN'S I DENGAN FUNGSI moran()\n")
## HASIL MORAN'S I DENGAN FUNGSI moran()
print(moran_Wstar)
## $I
## [1] 0.1248071
## 
## $K
## [1] 3.484466

20. UJI MORAN’S I W*

uji_Moran_Wstar <- moran.test(y, listw_B, randomisation = FALSE, alternative = "greater", zero.policy = TRUE)
print(uji_Moran_Wstar)
## 
##  Moran I test under normality
## 
## data:  y  
## weights: listw_B    
## 
## Moran I statistic standard deviate = 1.4022, p-value = 0.08043
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##        0.12480706       -0.03333333        0.01271996

21. ROW STANDARDIZED WEIGHT

# rwm <- mat2listw(wm, style='W')
listw_W <- mat2listw(W_star, style = "W")

# 22. MENGUBAH LISTW MENJADI MATRIKS
W <- listw2mat(listw_W)
W
##       1         2         3    4         5         6         7         8
## 1  0.00 0.1666667 0.1666667 0.00 0.1666667 0.0000000 0.0000000 0.0000000
## 2  0.25 0.0000000 0.2500000 0.25 0.0000000 0.0000000 0.0000000 0.0000000
## 3  0.25 0.2500000 0.0000000 0.25 0.2500000 0.0000000 0.0000000 0.0000000
## 4  0.00 0.3333333 0.3333333 0.00 0.3333333 0.0000000 0.0000000 0.0000000
## 5  0.25 0.0000000 0.2500000 0.25 0.0000000 0.0000000 0.0000000 0.0000000
## 6  0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.3333333 0.3333333
## 7  0.00 0.0000000 0.0000000 0.00 0.0000000 0.3333333 0.0000000 0.3333333
## 8  0.00 0.0000000 0.0000000 0.00 0.0000000 0.1428571 0.1428571 0.0000000
## 9  0.00 0.0000000 0.0000000 0.00 0.0000000 0.1666667 0.1666667 0.1666667
## 10 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.1666667
## 11 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 12 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 13 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 14 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 15 0.25 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 16 0.25 0.2500000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 17 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 18 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 19 0.20 0.0000000 0.0000000 0.00 0.2000000 0.0000000 0.0000000 0.0000000
## 20 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 21 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 22 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 23 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 24 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.1666667
## 25 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.1666667
## 26 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 27 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 28 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 29 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.2500000
## 30 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
## 31 0.00 0.0000000 0.0000000 0.00 0.0000000 0.0000000 0.0000000 0.0000000
##            9        10    11        12        13        14        15        16
## 1  0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.1666667 0.1666667
## 2  0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.2500000
## 3  0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 4  0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 5  0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 6  0.3333333 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 7  0.3333333 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 8  0.1428571 0.1428571 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 9  0.0000000 0.1666667 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 10 0.1666667 0.0000000 0.000 0.1666667 0.0000000 0.1666667 0.0000000 0.0000000
## 11 0.0000000 0.0000000 0.000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000
## 12 0.0000000 0.3333333 0.000 0.0000000 0.3333333 0.3333333 0.0000000 0.0000000
## 13 0.0000000 0.0000000 0.000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 14 0.0000000 0.1250000 0.125 0.1250000 0.0000000 0.0000000 0.1250000 0.1250000
## 15 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.2500000 0.0000000 0.2500000
## 16 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.2500000 0.2500000 0.0000000
## 17 0.2000000 0.2000000 0.000 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000
## 18 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000
## 19 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.2000000 0.2000000 0.0000000
## 20 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 21 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 22 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 23 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 24 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 25 0.1666667 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 26 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 27 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 28 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 29 0.0000000 0.2500000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 30 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## 31 0.0000000 0.0000000 0.000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##           17        18        19        20        21   22        23        24
## 1  0.0000000 0.0000000 0.1666667 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 2  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 3  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 4  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 5  0.0000000 0.0000000 0.2500000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 6  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 7  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 8  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.1428571
## 9  0.1666667 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 10 0.1666667 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 11 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 12 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 13 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 14 0.1250000 0.1250000 0.1250000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 15 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 16 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 17 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 18 0.2500000 0.0000000 0.2500000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 19 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 20 0.0000000 0.0000000 0.0000000 0.0000000 0.2500000 0.25 0.2500000 0.0000000
## 21 0.0000000 0.0000000 0.0000000 0.2500000 0.0000000 0.00 0.2500000 0.2500000
## 22 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.00 0.0000000 0.0000000
## 23 0.0000000 0.0000000 0.0000000 0.1666667 0.1666667 0.00 0.0000000 0.1666667
## 24 0.0000000 0.0000000 0.0000000 0.0000000 0.1666667 0.00 0.1666667 0.0000000
## 25 0.1666667 0.1666667 0.0000000 0.0000000 0.1666667 0.00 0.0000000 0.1666667
## 26 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.2000000 0.0000000
## 27 0.0000000 0.0000000 0.0000000 0.3333333 0.0000000 0.00 0.3333333 0.0000000
## 28 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
## 29 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.2500000
## 30 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.2000000 0.2000000
## 31 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.00 0.0000000 0.0000000
##           25        26        27  28        29        30  31
## 1  0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 2  0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 3  0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 4  0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 5  0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 6  0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 7  0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 8  0.1428571 0.0000000 0.0000000 0.0 0.1428571 0.0000000 0.0
## 9  0.1666667 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 10 0.0000000 0.0000000 0.0000000 0.0 0.1666667 0.0000000 0.0
## 11 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 12 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 13 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 14 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 15 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 16 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 17 0.2000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 18 0.2500000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 19 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 20 0.0000000 0.0000000 0.2500000 0.0 0.0000000 0.0000000 0.0
## 21 0.2500000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 22 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 23 0.0000000 0.1666667 0.1666667 0.0 0.0000000 0.1666667 0.0
## 24 0.1666667 0.0000000 0.0000000 0.0 0.1666667 0.1666667 0.0
## 25 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 26 0.0000000 0.0000000 0.2000000 0.2 0.0000000 0.2000000 0.2
## 27 0.0000000 0.3333333 0.0000000 0.0 0.0000000 0.0000000 0.0
## 28 0.0000000 1.0000000 0.0000000 0.0 0.0000000 0.0000000 0.0
## 29 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.2500000 0.0
## 30 0.0000000 0.2000000 0.0000000 0.0 0.2000000 0.0000000 0.2
## 31 0.0000000 0.5000000 0.0000000 0.0 0.0000000 0.5000000 0.0

23. CEK JUMLAH BARIS = 1

row_sum_W <- apply(W, 1, sum)
print(row_sum_W)
##  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
##  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 
## 27 28 29 30 31 
##  1  1  1  1  1
# Ringkasan
cat("Minimum jumlah baris W =", min(row_sum_W), "\n")
## Minimum jumlah baris W = 1
cat("Maksimum jumlah baris W =", max(row_sum_W), "\n")
## Maksimum jumlah baris W = 1

24. MORAN’S I ROW STANDARDIZED

Moran_I_W <- moran(y, listw_W, n = length(listw_W$neighbours), S0 = Szero(listw_W),zero.policy = TRUE)
cat("HASIL MORAN'S I W STANDARDIZED\n")
## HASIL MORAN'S I W STANDARDIZED
print(Moran_I_W)
## $I
## [1] 0.08588489
## 
## $K
## [1] 3.484466

25. UJI MORAN’S I ROW STANDARDIZED

uji_Moran_W <- moran.test(y, listw_W, randomisation = FALSE, alternative = "greater", zero.policy = TRUE)
print(uji_Moran_W)
## 
##  Moran I test under normality
## 
## data:  y  
## weights: listw_W    
## 
## Moran I statistic standard deviate = 0.93657, p-value = 0.1745
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##        0.08588489       -0.03333333        0.01620326

26. MENGAMBIL HASIL UJI MORAN

I_value <- as.numeric(uji_Moran_W$estimate[1])
E_value <- as.numeric(uji_Moran_W$estimate[2])
Var_value <- as.numeric(uji_Moran_W$estimate[3])
Z_value <- as.numeric(uji_Moran_W$statistic)

27. NILAI KRITIS DAN P-VALUE

alpha <- 0.05
# Karena alternative = "greater" digunakan uji satu arah
Z_kritis <- qnorm(1 - alpha)
p_value <- pnorm(Z_value,lower.tail = FALSE)

28. HASIL UJI MORAN ROW STANDARDIZED

cat("\n============================================\n")
## 
## ============================================
cat("HASIL UJI MORAN'S I\n")
## HASIL UJI MORAN'S I
cat("============================================\n")
## ============================================
cat("Moran's I =", I_value, "\n")
## Moran's I = 0.08588489
cat("E(I)      =", E_value,"\n")
## E(I)      = -0.03333333
cat("Var(I)    =", Var_value, "\n")
## Var(I)    = 0.01620326
cat("Z hitung  =", Z_value, "\n")
## Z hitung  = 0.9365726
cat("Z kritis  =", Z_kritis, "\n")
## Z kritis  = 1.644854
cat("p-value   =", p_value, "\n")
## p-value   = 0.1744892

29. KEPUTUSAN UJI

if (Z_value > Z_kritis) {
  cat("\nKeputusan: Tolak H0\n")
  cat("Terdapat autokorelasi spasial positif yang signifikan.\n")
} else {
  cat("\nKeputusan: Gagal menolak H0\n")
  cat("Tidak terdapat autokorelasi spasial positif yang signifikan.\n")
}
## 
## Keputusan: Gagal menolak H0
## Tidak terdapat autokorelasi spasial positif yang signifikan.

30. TABEL HASIL MORAN

hasil_moran <- data.frame(Statistik = c("Moran's I", "E(I)", "Var(I)", "Z hitung", "Z kritis", "p-value"),
  Nilai = c(I_value, E_value, Var_value, Z_value, Z_kritis, p_value))
print(hasil_moran)
##   Statistik       Nilai
## 1 Moran's I  0.08588489
## 2      E(I) -0.03333333
## 3    Var(I)  0.01620326
## 4  Z hitung  0.93657264
## 5  Z kritis  1.64485363
## 6   p-value  0.17448922

31. STANDARDISASI DATA PAN

# Menggunakan simpangan baku dengan penyebut n agar sesuai dengan perhitungan manual.
sd_y <- sqrt(sum((y - ybar)^2) / n)
z_pan <- (y - ybar) / sd_y

# Tabel standardisasi
tabel_z <- data.frame(wilayah = pan$wilayah, suara_pan = y, z_pan = z_pan)
print(tabel_z)
##               wilayah suara_pan      z_pan
## 1       Jakarta Timur    417344  1.7321008
## 2     Jakarta Selatan    274529  0.6324075
## 3       Jakarta Pusat    145495 -0.3611704
## 4       Jakarta Barat    285640  0.7179636
## 5       Jakarta Utara    212101  0.1517041
## 6        Kota Bandung    442769  1.9278764
## 7         Kota Cimahi     84855 -0.8281059
## 8        Kab. Bandung    436420  1.8789883
## 9  Kab. Bandung Barat    169282 -0.1780075
## 10       Kab. Cianjur    223892  0.2424963
## 11         Kota Bogor    150358 -0.3237247
## 12      Kab. Sukabumi    269380  0.5927596
## 13      Kota Sukabumi     42044 -1.1577559
## 14         Kab. Bogor    553302  2.7789943
## 15        Kota Bekasi    269862  0.5964710
## 16         Kota Depok    208964  0.1275488
## 17    Kab. Purwakarta     68245 -0.9560050
## 18      Kab. Karawang    209263  0.1298512
## 19        Kab. Bekasi    190200 -0.0169363
## 20       Kab. Cirebon    164567 -0.2143136
## 21     Kab. Indramayu     64018 -0.9885534
## 22       Kota Cirebon     34526 -1.2156455
## 23    Kab. Majalengka     70730 -0.9368702
## 24      Kab. Sumedang     83097 -0.8416427
## 25        Kab. Subang    129990 -0.4805608
## 26        Kab. Ciamis    170575 -0.1680512
## 27      Kab. Kuningan    100034 -0.7112257
## 28        Kota Banjar     12217 -1.3874276
## 29         Kab. Garut    264577  0.5557759
## 30   Kab. Tasikmalaya    144249 -0.3707647
## 31   Kota Tasikmalaya     71859 -0.9281767

32. SPATIAL LAG

# spatially lagged y
spatial_lag <- as.vector(W %*% z_pan)

# Tabel
tabel_lag <- data.frame(wilayah = pan$wilayah, suara_pan = y, z_pan = z_pan, spatial_lag = spatial_lag)
print(tabel_lag)
##               wilayah suara_pan      z_pan spatial_lag
## 1       Jakarta Timur    417344  1.7321008  0.18833747
## 2     Jakarta Selatan    274529  0.6324075  0.55411071
## 3       Jakarta Pusat    145495 -0.3611704  0.80854399
## 4       Jakarta Barat    285640  0.7179636  0.14098042
## 5       Jakarta Utara    212101  0.1517041  0.51798942
## 6        Kota Bandung    442769  1.9278764  0.29095831
## 7         Kota Cimahi     84855 -0.8281059  1.20961909
## 8        Kab. Bandung    436420  1.8789883  0.05683309
## 9  Kab. Bandung Barat    169282 -0.1780075  0.29744823
## 10       Kab. Cianjur    223892  0.2424963  0.77875093
## 11         Kota Bogor    150358 -0.3237247  2.77899430
## 12      Kab. Sukabumi    269380  0.5927596  0.62124488
## 13      Kota Sukabumi     42044 -1.1577559  0.59275956
## 14         Kab. Bogor    553302  2.7789943  0.04905762
## 15        Kota Bekasi    269862  0.5964710  1.15542690
## 16         Kota Depok    208964  0.1275488  1.43499340
## 17    Kab. Purwakarta     68245 -0.9560050  0.49855469
## 18      Kab. Karawang    209263  0.1298512  0.33137306
## 19        Kab. Bekasi    190200 -0.0169363  1.07782428
## 20       Kab. Cirebon    164567 -0.2143136 -0.96307369
## 21     Kab. Indramayu     64018 -0.9885534 -0.61834682
## 22       Kota Cirebon     34526 -1.2156455 -0.21431359
## 23    Kab. Majalengka     70730 -0.9368702 -0.54909190
## 24      Kab. Sumedang     83097 -0.8416427 -0.05699748
## 25        Kab. Subang    129990 -0.4805608 -0.15922818
## 26        Kab. Ciamis    170575 -0.1680512 -0.86689298
## 27      Kab. Kuningan    100034 -0.7112257 -0.43974500
## 28        Kota Banjar     12217 -1.3874276 -0.16805124
## 29         Kab. Garut    264577  0.5557759  0.22726930
## 30   Kab. Tasikmalaya    144249 -0.3707647 -0.46379300
## 31   Kota Tasikmalaya     71859 -0.9281767 -0.26940798

33. MENENTUKAN KUADRAN MORAN

tabel_lag$kuadran <- case_when(tabel_lag$z_pan >= 0 & tabel_lag$spatial_lag >= 0 ~ "HH",
tabel_lag$z_pan < 0 & tabel_lag$spatial_lag >= 0 ~ "LH",
tabel_lag$z_pan < 0 & tabel_lag$spatial_lag < 0~ "LL",
tabel_lag$z_pan >= 0 & tabel_lag$spatial_lag < 0~ "HL")
print(tabel_lag)
##               wilayah suara_pan      z_pan spatial_lag kuadran
## 1       Jakarta Timur    417344  1.7321008  0.18833747      HH
## 2     Jakarta Selatan    274529  0.6324075  0.55411071      HH
## 3       Jakarta Pusat    145495 -0.3611704  0.80854399      LH
## 4       Jakarta Barat    285640  0.7179636  0.14098042      HH
## 5       Jakarta Utara    212101  0.1517041  0.51798942      HH
## 6        Kota Bandung    442769  1.9278764  0.29095831      HH
## 7         Kota Cimahi     84855 -0.8281059  1.20961909      LH
## 8        Kab. Bandung    436420  1.8789883  0.05683309      HH
## 9  Kab. Bandung Barat    169282 -0.1780075  0.29744823      LH
## 10       Kab. Cianjur    223892  0.2424963  0.77875093      HH
## 11         Kota Bogor    150358 -0.3237247  2.77899430      LH
## 12      Kab. Sukabumi    269380  0.5927596  0.62124488      HH
## 13      Kota Sukabumi     42044 -1.1577559  0.59275956      LH
## 14         Kab. Bogor    553302  2.7789943  0.04905762      HH
## 15        Kota Bekasi    269862  0.5964710  1.15542690      HH
## 16         Kota Depok    208964  0.1275488  1.43499340      HH
## 17    Kab. Purwakarta     68245 -0.9560050  0.49855469      LH
## 18      Kab. Karawang    209263  0.1298512  0.33137306      HH
## 19        Kab. Bekasi    190200 -0.0169363  1.07782428      LH
## 20       Kab. Cirebon    164567 -0.2143136 -0.96307369      LL
## 21     Kab. Indramayu     64018 -0.9885534 -0.61834682      LL
## 22       Kota Cirebon     34526 -1.2156455 -0.21431359      LL
## 23    Kab. Majalengka     70730 -0.9368702 -0.54909190      LL
## 24      Kab. Sumedang     83097 -0.8416427 -0.05699748      LL
## 25        Kab. Subang    129990 -0.4805608 -0.15922818      LL
## 26        Kab. Ciamis    170575 -0.1680512 -0.86689298      LL
## 27      Kab. Kuningan    100034 -0.7112257 -0.43974500      LL
## 28        Kota Banjar     12217 -1.3874276 -0.16805124      LL
## 29         Kab. Garut    264577  0.5557759  0.22726930      HH
## 30   Kab. Tasikmalaya    144249 -0.3707647 -0.46379300      LL
## 31   Kota Tasikmalaya     71859 -0.9281767 -0.26940798      LL

34. JUMLAH WILAYAH SETIAP KUADRAN

cat("\nJumlah wilayah berdasarkan kuadran:\n")
## 
## Jumlah wilayah berdasarkan kuadran:
print(table(tabel_lag$kuadran))
## 
## HH LH LL 
## 13  7 11

35. VISUALISASI 3

# MORAN SCATTERPLOT DENGAN SPDEP
moran.plot(y, listw_W, labels = pan$wilayah, xlab = "Standardized PAN Votes", ylab = "Spatial Lag",main = "Moran Scatterplot Suara PAN")

# 36. VISUALISASI 4

# MORAN SCATTERPLOT MANUAL
p_scatter <- ggplot(tabel_lag,aes(x = z_pan, y = spatial_lag, color = kuadran)) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "#777777") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "#777777") +
  geom_point(size = 3) +
  geom_text(aes(label = wilayah), vjust = -0.7, size = 2.8, show.legend = FALSE) +
  scale_color_manual(values = c("HH" = "#D73027", "LH" = "#4575B4","LL" = "#74ADD1", "HL" = "#FC8D59"),name = "Kuadran") +
  labs(title = "Moran Scatterplot Suara PAN", subtitle = "DKI Jakarta dan Jawa Barat", x = "Standardized PAN Votes (Z)", y = "Spatial Lag") +
  theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold", size = 15), plot.subtitle = element_text(size = 11), legend.title = element_text(face = "bold"),
        panel.grid.minor = element_blank())
print(p_scatter)

# 37. LOCAL MORAN’S I / LISA

lisa <- localmoran(y, listw_W, zero.policy = TRUE, conditional = TRUE)
print(lisa)
##             Ii          E.Ii       Var.Ii       Z.Ii Pr(z != E(Ii))
## 1   0.32621948 -1.000058e-01 3.848473e-01  0.6870604    0.492044651
## 2   0.35042377 -1.333131e-02 9.139473e-02  1.2032295    0.228887517
## 3  -0.29202213 -4.348134e-03 3.008067e-02 -1.6586580    0.097184732
## 4   0.10121881 -1.718239e-02 1.624661e-01  0.2937479    0.768950566
## 5   0.07858113 -7.671381e-04 5.326198e-03  1.0872485    0.276926998
## 6   0.56093167 -1.238903e-01 1.044244e+00  0.6701573    0.502757545
## 7  -1.00169272 -2.285865e-02 2.148890e-01 -2.1115532    0.034724792
## 8   0.10678872 -1.176866e-01 3.647063e-01  0.3717037    0.710113461
## 9  -0.05294802 -1.056222e-03 4.511491e-03 -0.7725714    0.439776057
## 10  0.18884421 -1.960148e-03 8.364896e-03  2.0862101    0.036959599
## 11 -0.89962898 -3.493255e-03 1.079126e-01 -2.7279579    0.006372773
## 12  0.36824884 -1.171213e-02 1.113591e-01  1.1386132    0.254864518
## 13 -0.68627090 -4.467996e-02 1.323194e+00 -0.5577589    0.577009005
## 14  0.13633084 -2.574270e-01 5.619396e-01  0.5252722    0.599394011
## 15  0.68917866 -1.185926e-02 8.142416e-02  2.4567720    0.014019162
## 16  0.18303174 -5.422902e-04 3.765938e-03  2.9914009    0.002777006
## 17 -0.47662077 -3.046485e-02 1.578688e-01 -1.1228933    0.261482800
## 18  0.04302918 -5.620442e-04 3.903044e-03  0.6977460    0.485336040
## 19 -0.01825435 -9.561275e-06 5.110288e-05 -2.5522093    0.010704221
## 20  0.20639978 -1.531010e-03 1.062160e-02  2.0175481    0.043638343
## 21  0.61126886 -3.257459e-02 2.189644e-01  1.3759210    0.168846089
## 22  0.26052935 -4.925980e-02 1.451831e+00  0.2571036    0.797098822
## 23  0.51442782 -2.925752e-02 1.214410e-01  1.5601451    0.118725602
## 24  0.04797152 -2.361208e-02 9.857809e-02  0.2279940    0.819650940
## 25  0.07651882 -7.697956e-03 3.266202e-02  0.4659906    0.641222252
## 26  0.14568244 -9.413740e-04 5.026745e-03  2.0680502    0.038635301
## 27  0.31275796 -1.686140e-02 1.594831e-01  0.8253828    0.409154308
## 28  0.23315892 -6.416517e-02 1.861488e+00  0.2179214    0.827490316
## 29  0.12631079 -1.029623e-02 7.080442e-02  0.5133846    0.607682334
## 30  0.17195808 -4.582216e-03 2.437893e-02  1.1306717    0.258193283
## 31  0.25005822 -2.871707e-02 4.174242e-01  0.4314848    0.666115919
## attr(,"call")
## localmoran(x = y, listw = listw_W, zero.policy = TRUE, conditional = TRUE)
## attr(,"class")
## [1] "localmoran" "matrix"     "array"     
## attr(,"quadr")
##         mean    median     pysal
## 1   High-Low  High-Low High-High
## 2  High-High High-High High-High
## 3   Low-High  Low-High  Low-High
## 4   High-Low  High-Low High-High
## 5  High-High High-High High-High
## 6  High-High High-High High-High
## 7   Low-High  Low-High  Low-High
## 8   High-Low  High-Low High-High
## 9   Low-High  Low-High  Low-High
## 10 High-High High-High High-High
## 11  Low-High  Low-High  Low-High
## 12 High-High High-High High-High
## 13  Low-High  Low-High  Low-High
## 14  High-Low  High-Low High-High
## 15 High-High High-High High-High
## 16 High-High High-High High-High
## 17  Low-High  Low-High  Low-High
## 18 High-High High-High High-High
## 19  Low-High High-High  Low-High
## 20   Low-Low   Low-Low   Low-Low
## 21   Low-Low   Low-Low   Low-Low
## 22   Low-Low   Low-Low   Low-Low
## 23   Low-Low   Low-Low   Low-Low
## 24   Low-Low   Low-Low   Low-Low
## 25   Low-Low   Low-Low   Low-Low
## 26   Low-Low  High-Low   Low-Low
## 27   Low-Low   Low-Low   Low-Low
## 28   Low-Low   Low-Low   Low-Low
## 29  High-Low  High-Low High-High
## 30   Low-Low   Low-Low   Low-Low
## 31   Low-Low   Low-Low   Low-Low

38. TABEL LISA

hasil_lisa <- data.frame(wilayah = pan$wilayah, suara_pan = y, Local_Moran_I = lisa[, "Ii"],
                         E_Ii = lisa[, "E.Ii"], Var_Ii = lisa[, "Var.Ii"], Z_Ii = lisa[, "Z.Ii"], p_value = lisa[, "Pr(z != E(Ii))"])

# Tambahkan Z PAN
hasil_lisa$z_pan <- z_pan
# Tambahkan spatial lag
hasil_lisa$spatial_lag <- spatial_lag

39. MENENTUKAN KUADRAN LISA

hasil_lisa$kuadran <- case_when(hasil_lisa$z_pan >= 0 & hasil_lisa$spatial_lag >= 0 ~ "HH",
hasil_lisa$z_pan < 0 & hasil_lisa$spatial_lag >= 0 ~ "LH",
hasil_lisa$z_pan < 0 & hasil_lisa$spatial_lag < 0 ~ "LL",
hasil_lisa$z_pan >= 0 & hasil_lisa$spatial_lag < 0 ~ "HL")

40. SIGNIFIKANSI LISA

hasil_lisa$signifikan <- ifelse(hasil_lisa$p_value < 0.05, "Signifikan", "Tidak Signifikan")

41. CLUSTER / OUTLIER SIGNIFIKAN

hasil_lisa$cluster <- case_when(hasil_lisa$p_value < 0.05 & hasil_lisa$kuadran == "HH" ~ "HH Signifikan",
hasil_lisa$p_value < 0.05 & hasil_lisa$kuadran == "LH" ~ "LH Signifikan",
hasil_lisa$p_value < 0.05 & hasil_lisa$kuadran == "LL" ~ "LL Signifikan",
hasil_lisa$p_value < 0.05 & hasil_lisa$kuadran == "HL" ~ "HL Signifikan",
  TRUE ~ "Tidak Signifikan")

42. HASIL LISA LENGKAP

print(hasil_lisa)
##               wilayah suara_pan Local_Moran_I          E_Ii       Var_Ii
## 1       Jakarta Timur    417344    0.32621948 -1.000058e-01 3.848473e-01
## 2     Jakarta Selatan    274529    0.35042377 -1.333131e-02 9.139473e-02
## 3       Jakarta Pusat    145495   -0.29202213 -4.348134e-03 3.008067e-02
## 4       Jakarta Barat    285640    0.10121881 -1.718239e-02 1.624661e-01
## 5       Jakarta Utara    212101    0.07858113 -7.671381e-04 5.326198e-03
## 6        Kota Bandung    442769    0.56093167 -1.238903e-01 1.044244e+00
## 7         Kota Cimahi     84855   -1.00169272 -2.285865e-02 2.148890e-01
## 8        Kab. Bandung    436420    0.10678872 -1.176866e-01 3.647063e-01
## 9  Kab. Bandung Barat    169282   -0.05294802 -1.056222e-03 4.511491e-03
## 10       Kab. Cianjur    223892    0.18884421 -1.960148e-03 8.364896e-03
## 11         Kota Bogor    150358   -0.89962898 -3.493255e-03 1.079126e-01
## 12      Kab. Sukabumi    269380    0.36824884 -1.171213e-02 1.113591e-01
## 13      Kota Sukabumi     42044   -0.68627090 -4.467996e-02 1.323194e+00
## 14         Kab. Bogor    553302    0.13633084 -2.574270e-01 5.619396e-01
## 15        Kota Bekasi    269862    0.68917866 -1.185926e-02 8.142416e-02
## 16         Kota Depok    208964    0.18303174 -5.422902e-04 3.765938e-03
## 17    Kab. Purwakarta     68245   -0.47662077 -3.046485e-02 1.578688e-01
## 18      Kab. Karawang    209263    0.04302918 -5.620442e-04 3.903044e-03
## 19        Kab. Bekasi    190200   -0.01825435 -9.561275e-06 5.110288e-05
## 20       Kab. Cirebon    164567    0.20639978 -1.531010e-03 1.062160e-02
## 21     Kab. Indramayu     64018    0.61126886 -3.257459e-02 2.189644e-01
## 22       Kota Cirebon     34526    0.26052935 -4.925980e-02 1.451831e+00
## 23    Kab. Majalengka     70730    0.51442782 -2.925752e-02 1.214410e-01
## 24      Kab. Sumedang     83097    0.04797152 -2.361208e-02 9.857809e-02
## 25        Kab. Subang    129990    0.07651882 -7.697956e-03 3.266202e-02
## 26        Kab. Ciamis    170575    0.14568244 -9.413740e-04 5.026745e-03
## 27      Kab. Kuningan    100034    0.31275796 -1.686140e-02 1.594831e-01
## 28        Kota Banjar     12217    0.23315892 -6.416517e-02 1.861488e+00
## 29         Kab. Garut    264577    0.12631079 -1.029623e-02 7.080442e-02
## 30   Kab. Tasikmalaya    144249    0.17195808 -4.582216e-03 2.437893e-02
## 31   Kota Tasikmalaya     71859    0.25005822 -2.871707e-02 4.174242e-01
##          Z_Ii     p_value      z_pan spatial_lag kuadran       signifikan
## 1   0.6870604 0.492044651  1.7321008  0.18833747      HH Tidak Signifikan
## 2   1.2032295 0.228887517  0.6324075  0.55411071      HH Tidak Signifikan
## 3  -1.6586580 0.097184732 -0.3611704  0.80854399      LH Tidak Signifikan
## 4   0.2937479 0.768950566  0.7179636  0.14098042      HH Tidak Signifikan
## 5   1.0872485 0.276926998  0.1517041  0.51798942      HH Tidak Signifikan
## 6   0.6701573 0.502757545  1.9278764  0.29095831      HH Tidak Signifikan
## 7  -2.1115532 0.034724792 -0.8281059  1.20961909      LH       Signifikan
## 8   0.3717037 0.710113461  1.8789883  0.05683309      HH Tidak Signifikan
## 9  -0.7725714 0.439776057 -0.1780075  0.29744823      LH Tidak Signifikan
## 10  2.0862101 0.036959599  0.2424963  0.77875093      HH       Signifikan
## 11 -2.7279579 0.006372773 -0.3237247  2.77899430      LH       Signifikan
## 12  1.1386132 0.254864518  0.5927596  0.62124488      HH Tidak Signifikan
## 13 -0.5577589 0.577009005 -1.1577559  0.59275956      LH Tidak Signifikan
## 14  0.5252722 0.599394011  2.7789943  0.04905762      HH Tidak Signifikan
## 15  2.4567720 0.014019162  0.5964710  1.15542690      HH       Signifikan
## 16  2.9914009 0.002777006  0.1275488  1.43499340      HH       Signifikan
## 17 -1.1228933 0.261482800 -0.9560050  0.49855469      LH Tidak Signifikan
## 18  0.6977460 0.485336040  0.1298512  0.33137306      HH Tidak Signifikan
## 19 -2.5522093 0.010704221 -0.0169363  1.07782428      LH       Signifikan
## 20  2.0175481 0.043638343 -0.2143136 -0.96307369      LL       Signifikan
## 21  1.3759210 0.168846089 -0.9885534 -0.61834682      LL Tidak Signifikan
## 22  0.2571036 0.797098822 -1.2156455 -0.21431359      LL Tidak Signifikan
## 23  1.5601451 0.118725602 -0.9368702 -0.54909190      LL Tidak Signifikan
## 24  0.2279940 0.819650940 -0.8416427 -0.05699748      LL Tidak Signifikan
## 25  0.4659906 0.641222252 -0.4805608 -0.15922818      LL Tidak Signifikan
## 26  2.0680502 0.038635301 -0.1680512 -0.86689298      LL       Signifikan
## 27  0.8253828 0.409154308 -0.7112257 -0.43974500      LL Tidak Signifikan
## 28  0.2179214 0.827490316 -1.3874276 -0.16805124      LL Tidak Signifikan
## 29  0.5133846 0.607682334  0.5557759  0.22726930      HH Tidak Signifikan
## 30  1.1306717 0.258193283 -0.3707647 -0.46379300      LL Tidak Signifikan
## 31  0.4314848 0.666115919 -0.9281767 -0.26940798      LL Tidak Signifikan
##             cluster
## 1  Tidak Signifikan
## 2  Tidak Signifikan
## 3  Tidak Signifikan
## 4  Tidak Signifikan
## 5  Tidak Signifikan
## 6  Tidak Signifikan
## 7     LH Signifikan
## 8  Tidak Signifikan
## 9  Tidak Signifikan
## 10    HH Signifikan
## 11    LH Signifikan
## 12 Tidak Signifikan
## 13 Tidak Signifikan
## 14 Tidak Signifikan
## 15    HH Signifikan
## 16    HH Signifikan
## 17 Tidak Signifikan
## 18 Tidak Signifikan
## 19    LH Signifikan
## 20    LL Signifikan
## 21 Tidak Signifikan
## 22 Tidak Signifikan
## 23 Tidak Signifikan
## 24 Tidak Signifikan
## 25 Tidak Signifikan
## 26    LL Signifikan
## 27 Tidak Signifikan
## 28 Tidak Signifikan
## 29 Tidak Signifikan
## 30 Tidak Signifikan
## 31 Tidak Signifikan

43. TABEL LISA FINAL

hasil_final <- hasil_lisa %>% select(wilayah, suara_pan, z_pan, spatial_lag, Local_Moran_I, Z_Ii,
                                     p_value, kuadran, signifikan, cluster)

print(hasil_final)
##               wilayah suara_pan      z_pan spatial_lag Local_Moran_I       Z_Ii
## 1       Jakarta Timur    417344  1.7321008  0.18833747    0.32621948  0.6870604
## 2     Jakarta Selatan    274529  0.6324075  0.55411071    0.35042377  1.2032295
## 3       Jakarta Pusat    145495 -0.3611704  0.80854399   -0.29202213 -1.6586580
## 4       Jakarta Barat    285640  0.7179636  0.14098042    0.10121881  0.2937479
## 5       Jakarta Utara    212101  0.1517041  0.51798942    0.07858113  1.0872485
## 6        Kota Bandung    442769  1.9278764  0.29095831    0.56093167  0.6701573
## 7         Kota Cimahi     84855 -0.8281059  1.20961909   -1.00169272 -2.1115532
## 8        Kab. Bandung    436420  1.8789883  0.05683309    0.10678872  0.3717037
## 9  Kab. Bandung Barat    169282 -0.1780075  0.29744823   -0.05294802 -0.7725714
## 10       Kab. Cianjur    223892  0.2424963  0.77875093    0.18884421  2.0862101
## 11         Kota Bogor    150358 -0.3237247  2.77899430   -0.89962898 -2.7279579
## 12      Kab. Sukabumi    269380  0.5927596  0.62124488    0.36824884  1.1386132
## 13      Kota Sukabumi     42044 -1.1577559  0.59275956   -0.68627090 -0.5577589
## 14         Kab. Bogor    553302  2.7789943  0.04905762    0.13633084  0.5252722
## 15        Kota Bekasi    269862  0.5964710  1.15542690    0.68917866  2.4567720
## 16         Kota Depok    208964  0.1275488  1.43499340    0.18303174  2.9914009
## 17    Kab. Purwakarta     68245 -0.9560050  0.49855469   -0.47662077 -1.1228933
## 18      Kab. Karawang    209263  0.1298512  0.33137306    0.04302918  0.6977460
## 19        Kab. Bekasi    190200 -0.0169363  1.07782428   -0.01825435 -2.5522093
## 20       Kab. Cirebon    164567 -0.2143136 -0.96307369    0.20639978  2.0175481
## 21     Kab. Indramayu     64018 -0.9885534 -0.61834682    0.61126886  1.3759210
## 22       Kota Cirebon     34526 -1.2156455 -0.21431359    0.26052935  0.2571036
## 23    Kab. Majalengka     70730 -0.9368702 -0.54909190    0.51442782  1.5601451
## 24      Kab. Sumedang     83097 -0.8416427 -0.05699748    0.04797152  0.2279940
## 25        Kab. Subang    129990 -0.4805608 -0.15922818    0.07651882  0.4659906
## 26        Kab. Ciamis    170575 -0.1680512 -0.86689298    0.14568244  2.0680502
## 27      Kab. Kuningan    100034 -0.7112257 -0.43974500    0.31275796  0.8253828
## 28        Kota Banjar     12217 -1.3874276 -0.16805124    0.23315892  0.2179214
## 29         Kab. Garut    264577  0.5557759  0.22726930    0.12631079  0.5133846
## 30   Kab. Tasikmalaya    144249 -0.3707647 -0.46379300    0.17195808  1.1306717
## 31   Kota Tasikmalaya     71859 -0.9281767 -0.26940798    0.25005822  0.4314848
##        p_value kuadran       signifikan          cluster
## 1  0.492044651      HH Tidak Signifikan Tidak Signifikan
## 2  0.228887517      HH Tidak Signifikan Tidak Signifikan
## 3  0.097184732      LH Tidak Signifikan Tidak Signifikan
## 4  0.768950566      HH Tidak Signifikan Tidak Signifikan
## 5  0.276926998      HH Tidak Signifikan Tidak Signifikan
## 6  0.502757545      HH Tidak Signifikan Tidak Signifikan
## 7  0.034724792      LH       Signifikan    LH Signifikan
## 8  0.710113461      HH Tidak Signifikan Tidak Signifikan
## 9  0.439776057      LH Tidak Signifikan Tidak Signifikan
## 10 0.036959599      HH       Signifikan    HH Signifikan
## 11 0.006372773      LH       Signifikan    LH Signifikan
## 12 0.254864518      HH Tidak Signifikan Tidak Signifikan
## 13 0.577009005      LH Tidak Signifikan Tidak Signifikan
## 14 0.599394011      HH Tidak Signifikan Tidak Signifikan
## 15 0.014019162      HH       Signifikan    HH Signifikan
## 16 0.002777006      HH       Signifikan    HH Signifikan
## 17 0.261482800      LH Tidak Signifikan Tidak Signifikan
## 18 0.485336040      HH Tidak Signifikan Tidak Signifikan
## 19 0.010704221      LH       Signifikan    LH Signifikan
## 20 0.043638343      LL       Signifikan    LL Signifikan
## 21 0.168846089      LL Tidak Signifikan Tidak Signifikan
## 22 0.797098822      LL Tidak Signifikan Tidak Signifikan
## 23 0.118725602      LL Tidak Signifikan Tidak Signifikan
## 24 0.819650940      LL Tidak Signifikan Tidak Signifikan
## 25 0.641222252      LL Tidak Signifikan Tidak Signifikan
## 26 0.038635301      LL       Signifikan    LL Signifikan
## 27 0.409154308      LL Tidak Signifikan Tidak Signifikan
## 28 0.827490316      LL Tidak Signifikan Tidak Signifikan
## 29 0.607682334      HH Tidak Signifikan Tidak Signifikan
## 30 0.258193283      LL Tidak Signifikan Tidak Signifikan
## 31 0.666115919      LL Tidak Signifikan Tidak Signifikan

44. LISA SIGNIFIKAN

lisa_signifikan <- hasil_final %>% filter(p_value < 0.05)
print(lisa_signifikan)
##         wilayah suara_pan      z_pan spatial_lag Local_Moran_I      Z_Ii
## 7   Kota Cimahi     84855 -0.8281059   1.2096191   -1.00169272 -2.111553
## 10 Kab. Cianjur    223892  0.2424963   0.7787509    0.18884421  2.086210
## 11   Kota Bogor    150358 -0.3237247   2.7789943   -0.89962898 -2.727958
## 15  Kota Bekasi    269862  0.5964710   1.1554269    0.68917866  2.456772
## 16   Kota Depok    208964  0.1275488   1.4349934    0.18303174  2.991401
## 19  Kab. Bekasi    190200 -0.0169363   1.0778243   -0.01825435 -2.552209
## 20 Kab. Cirebon    164567 -0.2143136  -0.9630737    0.20639978  2.017548
## 26  Kab. Ciamis    170575 -0.1680512  -0.8668930    0.14568244  2.068050
##        p_value kuadran signifikan       cluster
## 7  0.034724792      LH Signifikan LH Signifikan
## 10 0.036959599      HH Signifikan HH Signifikan
## 11 0.006372773      LH Signifikan LH Signifikan
## 15 0.014019162      HH Signifikan HH Signifikan
## 16 0.002777006      HH Signifikan HH Signifikan
## 19 0.010704221      LH Signifikan LH Signifikan
## 20 0.043638343      LL Signifikan LL Signifikan
## 26 0.038635301      LL Signifikan LL Signifikan

45. JUMLAH CLUSTER SIGNIFIKAN

cat("\nJumlah cluster LISA signifikan:\n")
## 
## Jumlah cluster LISA signifikan:
print(table(lisa_signifikan$kuadran))
## 
## HH LH LL 
##  3  3  2

46. HH SIGNIFIKAN

HH_signifikan <- hasil_final %>% filter(p_value < 0.05 & kuadran == "HH")
print(HH_signifikan)
##         wilayah suara_pan     z_pan spatial_lag Local_Moran_I     Z_Ii
## 10 Kab. Cianjur    223892 0.2424963   0.7787509     0.1888442 2.086210
## 15  Kota Bekasi    269862 0.5964710   1.1554269     0.6891787 2.456772
## 16   Kota Depok    208964 0.1275488   1.4349934     0.1830317 2.991401
##        p_value kuadran signifikan       cluster
## 10 0.036959599      HH Signifikan HH Signifikan
## 15 0.014019162      HH Signifikan HH Signifikan
## 16 0.002777006      HH Signifikan HH Signifikan

47. LH SIGNIFIKAN

LH_signifikan <- hasil_final %>% filter(p_value < 0.05 & kuadran == "LH")
print(LH_signifikan)
##        wilayah suara_pan      z_pan spatial_lag Local_Moran_I      Z_Ii
## 7  Kota Cimahi     84855 -0.8281059    1.209619   -1.00169272 -2.111553
## 11  Kota Bogor    150358 -0.3237247    2.778994   -0.89962898 -2.727958
## 19 Kab. Bekasi    190200 -0.0169363    1.077824   -0.01825435 -2.552209
##        p_value kuadran signifikan       cluster
## 7  0.034724792      LH Signifikan LH Signifikan
## 11 0.006372773      LH Signifikan LH Signifikan
## 19 0.010704221      LH Signifikan LH Signifikan

48. LL SIGNIFIKAN

LL_signifikan <- hasil_final %>% filter(p_value < 0.05 & kuadran == "LL")
print(LL_signifikan)
##         wilayah suara_pan      z_pan spatial_lag Local_Moran_I     Z_Ii
## 20 Kab. Cirebon    164567 -0.2143136  -0.9630737     0.2063998 2.017548
## 26  Kab. Ciamis    170575 -0.1680512  -0.8668930     0.1456824 2.068050
##       p_value kuadran signifikan       cluster
## 20 0.04363834      LL Signifikan LL Signifikan
## 26 0.03863530      LL Signifikan LL Signifikan

49. HL SIGNIFIKAN

HL_signifikan <- hasil_final %>% filter(p_value < 0.05 & kuadran == "HL")
print(HL_signifikan)
##  [1] wilayah       suara_pan     z_pan         spatial_lag   Local_Moran_I
##  [6] Z_Ii          p_value       kuadran       signifikan    cluster      
## <0 rows> (or 0-length row.names)

50. MEMASUKKAN HASIL LISA KE SHAPEFILE

shp_pan$kuadran <- hasil_lisa$kuadran
shp_pan$cluster <- hasil_lisa$cluster
shp_pan$p_value <- hasil_lisa$p_value
shp_pan$Local_Moran_I <- hasil_lisa$Local_Moran_I

51. VISUALISASI 5

# PETA KUADRAN MORAN
p_kuadran <- ggplot(shp_pan) +
  geom_sf(aes(fill = kuadran), color = "white", linewidth = 0.3) +
  scale_fill_manual(values = c("HH" = "#D73027","LH" = "#4575B4", "LL" = "#74ADD1", "HL" = "#FC8D59"),name = "Kuadran") +
  labs(title = "Moran Scatterplot Map Suara PAN",subtitle = "DKI Jakarta dan Jawa Barat") +
  theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold", size = 15), plot.subtitle = element_text(size = 11), legend.title = element_text(face = "bold"),
        panel.grid = element_blank())
print(p_kuadran)

# 52. VISUALISASI 6

# PETA LISA
p_lisa <- ggplot(shp_pan) +
  geom_sf(aes(fill = cluster), color = "white",linewidth = 0.3) +
  scale_fill_manual(values = c("HH Signifikan" = "#D73027", "LH Signifikan" = "#4575B4","LL Signifikan" = "#74ADD1", "HL Signifikan" = "#FC8D59", "Tidak Signifikan" = "#D9D9D9"), name = "Cluster") +
  labs(title = "Local Moran's I (LISA) Suara PAN", subtitle = "Cluster dan Outlier Spasial") +
  theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold", size = 15), plot.subtitle = element_text(size = 11),
    legend.title = element_text(face = "bold"), panel.grid = element_blank())
print(p_lisa)

# 53. VISUALISASI 7

# PETA NILAI LOCAL MORAN'S I
p_local <- ggplot(shp_pan) +
  geom_sf(
    aes(fill = Local_Moran_I),
    color = "white",
    linewidth = 0.3
  ) +
  scale_fill_gradient2(
    low = "#4575B4",
    mid = "white",
    high = "#D73027",
    midpoint = 0,
    name = "Local Moran's I"
  ) +
  labs(
    title = "Nilai Local Moran's I Suara PAN",
    subtitle = "DKI Jakarta dan Jawa Barat"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(size = 11),
    legend.title = element_text(face = "bold"),
    panel.grid = element_blank()
  )
print(p_local)

# 54. STATUS SIGNIFIKANSI LISA

shp_pan$status_lisa <- ifelse(shp_pan$p_value < 0.05, "Signifikan", "Tidak Signifikan")

55. VISUALISASI 8

# PETA SIGNIFIKANSI LISA
p_signifikan <- ggplot(shp_pan) +
  geom_sf(
    aes(fill = status_lisa),
    color = "white",
    linewidth = 0.3
  ) +
  scale_fill_manual(
    values = c(
      "Signifikan" = "#D73027",
      "Tidak Signifikan" = "#D9D9D9"
    ),
    name = "Status"
  ) +
  labs(
    title = "Signifikansi Local Moran's I",
    subtitle = "DKI Jakarta dan Jawa Barat"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(size = 11),
    legend.title = element_text(face = "bold"),
    panel.grid = element_blank()
  )

print(p_signifikan)

# 56. VISUALISASI 9

# PETA SUARA PAN DENGAN LABEL
p_label <- ggplot(shp_pan) +
  geom_sf(
    aes(fill = suara_pan),
    color = "white",
    linewidth = 0.3
  ) +
  geom_sf_text(
    aes(label = WADMKK),
    size = 2
  ) +
  scale_fill_gradient(
    low = "#E3F2FD",
    high = "#0D47A1",
    name = "Suara PAN"
  ) +
  labs(
    title = "Perolehan Suara PAN per Kabupaten/Kota",
    subtitle = "DKI Jakarta dan Jawa Barat"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(size = 11),
    legend.title = element_text(face = "bold"),
    panel.grid = element_blank()
  )
print(p_label)
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

# 57. RINGKASAN AKHIR

cat("\n============================================\n")
## 
## ============================================
cat("RINGKASAN ANALISIS SPASIAL PAN\n")
## RINGKASAN ANALISIS SPASIAL PAN
cat("============================================\n")
## ============================================
cat("Jumlah wilayah             :",n,"\n")
## Jumlah wilayah             : 31
cat("Total suara PAN            :",sum(y),"\n")
## Total suara PAN            : 5964384
cat("Queen nonzero links        :",jumlah_nonzero_links,"\n")
## Queen nonzero links        : 128
cat("Pasangan hubungan unik     :",jumlah_pasangan_unik,"\n")
## Pasangan hubungan unik     : 64
cat("S0                         :",S0,"\n")
## S0                         : 128
cat("Pembilang                  :",pembilang, "\n")
## Pembilang                  : 269434758621
cat("Penyebut                   :",penyebut, "\n")
## Penyebut                   : 522836865586
cat("Moran's I W*               :",MI,"\n")
## Moran's I W*               : 0.1248071
cat("Moran's I W standardized   :",I_value,"\n")
## Moran's I W standardized   : 0.08588489
cat("Expected Moran's I         :",E_value,"\n")
## Expected Moran's I         : -0.03333333
cat("Variance                   :",Var_value,"\n")
## Variance                   : 0.01620326
cat("Z hitung                   :",Z_value,"\n")
## Z hitung                   : 0.9365726
cat("Z kritis                   :",Z_kritis,"\n")
## Z kritis                   : 1.644854
cat("p-value                    :",p_value,"\n")
## p-value                    : 0.1744892
cat("============================================\n")
## ============================================

58. EXPORT HASIL

write.csv(pan, "data_suara_PAN.csv", row.names = FALSE)
write.csv(jumlah_tetangga, "jumlah_tetangga_PAN.csv", row.names = FALSE)
write.csv(tabel_z,"standardisasi_PAN.csv",row.names = FALSE)
write.csv(tabel_lag, "moran_scatterplot_PAN.csv",row.names = FALSE)
write.csv(hasil_moran,"hasil_Moran_Global_PAN.csv", row.names = FALSE)
write.csv(hasil_final, "hasil_LISA_PAN.csv",row.names = FALSE)
print(p1)