Sintaks Projek ADK Kelompok 5
Persiapan Data
## Loading required package: sp
## 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')`
## Loading required package: sf
## Linking to GEOS 3.13.1, GDAL 3.11.0, PROJ 9.6.0; sf_use_s2() is TRUE
## Loading required package: Matrix
##
## Attaching package: 'spatialreg'
## The following objects are masked from 'package:spdep':
##
## get.ClusterOption, get.coresOption, get.mcOption,
## get.VerboseOption, get.ZeroPolicyOption, set.ClusterOption,
## set.coresOption, set.mcOption, set.VerboseOption,
## set.ZeroPolicyOption
## GDAL 3.11.0 (released 2025-05-06), GEOS 3.13.1, PROJ 9.6.0
##
## Attaching package: 'gdalraster'
## The following objects are masked from 'package:raster':
##
## calc, rasterize
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Loading required package: carData
##
## Attaching package: 'tidyr'
## The following objects are masked from 'package:Matrix':
##
## expand, pack, unpack
## The following object is masked from 'package:raster':
##
## extract
Input file peta (.shp) di R
#Package yang diperlukan untuk data spasial
setwd("C:/Users/User/Documents/AKA/Tingkat 2/Semester 4/SIG/Modul 8 Material/Data Administrasi")
spKab = shapefile("kab_20201_byindo.shp")
spKab <- st_as_sf(spKab)
# Pastikan idkab sebagai karakter
spKab$idkab <- as.character(spKab$idkab)
# Simpan hanya yang tidak berakhiran “88”
spKab <- spKab[ !grepl("88$", spKab$idkab), ]
Join Data ke Shp
# Pastikan kedua objek punya kolom idkab dengan tipe sama (character)
spKab$idkab <- as.character(spKab$idkab)
data$idkab <- as.character(data$idkab)
# Lakukan merge (left join)
spKabm <- merge(
x = spKab,
y = data[, c("idkab", "Y", "X1", "X2", "X3", "X4", "X5")],
by = "idkab",
all.x = TRUE # agar semua baris spKab tetap ada meski data tidak match
)
# Hasilnya spKab sekarang memiliki kolom Y, X1…X5
if (!inherits(spKabm, "sf")) {
spKabm <- st_as_sf(spKabm)
}
# Proyeksikan ke CRS metrik (contoh: UTM Zone 49S, EPSG:32749)
spKab_utm <- st_transform(spKabm, crs = 32749)
colSums(is.na(spKab_utm))
## idkab fid nmprov nmkab kdprov kdkab sumber periode
## 0 0 0 0 0 0 0 0
## Y X1 X2 X3 X4 X5 geometry
## 0 0 0 0 0 0 0
Sebaran TPAK Perempuan
library(sf)
library(sp)
library(classInt)
library(RColorBrewer)
# Pastikan data bertipe Spatial* untuk spplot()
spKab_sp <- as(spKab_utm, "Spatial")
# Ambil data nilai
val <- spKab_sp$Y
# Hitung class breaks menggunakan Jenks natural breaks (k = 5)
breaks <- classIntervals(val, n = 5, style = "jenks")$brks
# Potong nilai ke dalam kelas
cat <- cut(val, breaks = breaks, include.lowest = TRUE, dig.lab = 2)
# Label kelas manual
labels <- c("Sangat Rendah", "Rendah", "Sedang", "Tinggi", "Sangat Tinggi")
levels(cat) <- labels
# Simpan kategori ke data
spKab_sp$Y_cat <- factor(cat, levels = labels)
# Gradasi warna: merah → biru
colors <- colorRampPalette(c("#8B0000", "#B22222", "#87CEFA", "#4682B4", "#00008B"))(5)
# Tampilkan peta
print(
spplot(spKab_sp, zcol = "Y_cat",
main = "Peta Choropleth: Variabel Y",
col.regions = colors,
par.settings = list(
layout.heights = list(key.bottom = 2),
axis.line = list(col = NA)
),
colorkey = list(
space = "bottom",
labels = list(
at = 1:5,
labels = labels,
cex = 1.1
),
height = 1
))
)
Eksplorasi Data
## tibble [514 × 8] (S3: tbl_df/tbl/data.frame)
## $ idkab : chr [1:514] "1101" "1102" "1103" "1104" ...
## $ Kab/Kota: chr [1:514] "SIMEULUE" "ACEH SINGKIL" "ACEH SELATAN" "ACEH TENGGARA" ...
## $ Y : num [1:514] 59.6 37.7 36.4 59.6 42.6 ...
## $ X1 : num [1:514] 2.71 3.04 2.39 2.71 2.41 2.51 2.3 2.25 2.35 2.44 ...
## $ X2 : num [1:514] 81.1 77.7 81.5 81.3 78.4 ...
## $ X3 : num [1:514] 20 12 10 10 10 ...
## $ X4 : num [1:514] 9.37 8.28 8.45 9.81 8.38 ...
## $ X5 : num [1:514] 52.4 58.4 52.3 53.8 52 ...
## idkab Kab/Kota Y X1
## Length:514 Length:514 Min. :24.21 Min. :1.540
## Class :character Class :character 1st Qu.:49.45 1st Qu.:2.150
## Mode :character Mode :character Median :54.90 Median :2.310
## Mean :56.42 Mean :2.377
## 3rd Qu.:62.13 3rd Qu.:2.507
## Max. :98.09 Max. :4.220
## X2 X3 X4 X5
## Min. :54.37 Min. : 0.00 Min. : 1.370 Min. : 6.07
## 1st Qu.:81.65 1st Qu.: 8.89 1st Qu.: 7.460 1st Qu.:46.77
## Median :84.56 Median :15.56 Median : 8.250 Median :51.70
## Mean :84.00 Mean :15.66 Mean : 8.360 Mean :50.80
## 3rd Qu.:86.85 3rd Qu.:22.16 3rd Qu.: 9.295 3rd Qu.:56.26
## Max. :95.50 Max. :48.57 Max. :12.870 Max. :72.92
## idkab Kab/Kota Y X1 X2 X3 X4 X5
## 0 0 0 0 0 0 0 0
##
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
##
## smiths
## Using idkab, Kab/Kota as id variables
ggplot(data_long, aes(x = value)) +
facet_wrap(~variable, scales = "free") +
geom_histogram(bins = 30, fill = "steelblue", color = "white") +
theme_minimal()
# Korelasi antar variabel numerik
cor_matrix <- cor(data[, c("Y", "X1", "X2", "X3", "X4", "X5")])
print(cor_matrix)
## Y X1 X2 X3 X4 X5
## Y 1.0000000 0.2182337 0.396781513 -0.21275680 -0.3371861 -0.100980462
## X1 0.2182337 1.0000000 -0.117695637 -0.31784225 -0.3291743 -0.157704519
## X2 0.3967815 -0.1176956 1.000000000 -0.09882240 -0.4383793 -0.001864755
## X3 -0.2127568 -0.3178422 -0.098822396 1.00000000 0.2427632 0.035496441
## X4 -0.3371861 -0.3291743 -0.438379266 0.24276322 1.0000000 0.356098011
## X5 -0.1009805 -0.1577045 -0.001864755 0.03549644 0.3560980 1.000000000
## corrplot 0.95 loaded
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
##
## group_rows
## The following object is masked from 'package:car':
##
## recode
## The following object is masked from 'package:gdalraster':
##
## combine
## The following objects are masked from 'package:raster':
##
## intersect, select, union
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
# Hitung summary statistik
summary_stats <- data %>%
dplyr::select(Y, X1, X2, X3, X4, X5) %>%
summarise_all(list(
Min = ~min(.),
Q1 = ~quantile(., 0.25),
Median = ~median(.),
Mean = ~mean(.),
Q3 = ~quantile(., 0.75),
Max = ~max(.),
SD = ~sd(.)
)) %>%
pivot_longer(everything(),
names_to = c("Variable", "Statistic"),
names_sep = "_") %>%
pivot_wider(names_from = Statistic, values_from = value)
# Hitung korelasi masing-masing variabel ke Y
# Karena korelasi Y ke Y = 1, variabel lain korelasi ke Y dihitung
variabel <- c("Y", "X1", "X2", "X3", "X4", "X5")
korelasi_ke_Y <- sapply(variabel, function(v) cor(data[[v]], data$Y))
# Buat data frame korelasi agar bisa digabung
df_korelasi <- data.frame(Variable = variabel,
Korelasi_ke_Y = korelasi_ke_Y)
# Gabungkan summary dengan korelasi
summary_final <- summary_stats %>%
left_join(df_korelasi, by = "Variable")
kable(summary_final)
Variable | Min | Q1 | Median | Mean | Q3 | Max | SD | Korelasi_ke_Y |
---|---|---|---|---|---|---|---|---|
Y | 24.21 | 49.45 | 54.900 | 56.417821 | 62.1350 | 98.09 | 10.8420715 | 1.0000000 |
X1 | 1.54 | 2.15 | 2.310 | 2.377237 | 2.5075 | 4.22 | 0.3829212 | 0.2182337 |
X2 | 54.37 | 81.65 | 84.565 | 84.002860 | 86.8525 | 95.50 | 4.3760083 | 0.3967815 |
X3 | 0.00 | 8.89 | 15.560 | 15.657763 | 22.1650 | 48.57 | 8.9755422 | -0.2127568 |
X4 | 1.37 | 7.46 | 8.250 | 8.359630 | 9.2950 | 12.87 | 1.7317112 | -0.3371861 |
X5 | 6.07 | 46.77 | 51.705 | 50.800175 | 56.2575 | 72.92 | 8.6782500 | -0.1009805 |
OLS Model
wr_formula <- Y ~ X1 + X2+X3+X4+X5
# Model OLS
ols_model <- lm(wr_formula, data = spKab_utm)
# Ringkasan hasil regresi
summary(ols_model)
##
## Call:
## lm(formula = wr_formula, data = spKab_utm)
##
## Residuals:
## Min 1Q Median 3Q Max
## -33.984 -6.329 -0.025 6.225 24.160
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -29.69830 12.41627 -2.392 0.0171 *
## X1 5.85012 1.26421 4.627 4.70e-06 ***
## X2 0.95153 0.11397 8.349 6.58e-16 ***
## X3 -0.11140 0.05002 -2.227 0.0264 *
## X4 -0.39788 0.32156 -1.237 0.2165
## X5 -0.05219 0.05260 -0.992 0.3216
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.481 on 508 degrees of freedom
## Multiple R-squared: 0.2427, Adjusted R-squared: 0.2353
## F-statistic: 32.57 on 5 and 508 DF, p-value: < 2.2e-16
## X1 X2 X3 X4 X5
## 1.337372 1.419524 1.150292 1.769555 1.189331
##
## studentized Breusch-Pagan test
##
## data: ols_model
## BP = 40.709, df = 5, p-value = 1.074e-07
##
## Jarque Bera Test
##
## data: residuals(ols_model)
## X-squared = 0.36987, df = 2, p-value = 0.8312
Geographically Weighted Regression (GWR)
Persiapan Data GWR
## NOTE: This package does not constitute approval of GWR
## as a method of spatial analysis; see example(gwr)
library(sf)
library(dplyr)
spKab_utm <- st_as_sf(spKab_utm)
# 1. Ubah ke lon-lat (WGS84)
gabung_final<-spKab_utm
gabung_final_ll <- st_transform(spKab_utm, crs = 4326)
# 2. Validasi geometri
gabung_final_ll <- st_make_valid(gabung_final_ll)
# 3. Hitung centroid dan ekstrak koordinat
centroid <- st_centroid(gabung_final_ll)
## Warning: st_centroid assumes attributes are constant over geometries
coords <- st_coordinates(centroid)
# 4. Tambah koordinat ke data
gabung_final_ll$lon_centroid <- coords[, 1]
gabung_final_ll$lat_centroid <- coords[, 2]
# 5. Buat salinan data.frame
# Tambahkan ID ke data yang akan dikonversi
gabung_df <- st_drop_geometry(gabung_final_ll)
gabung_df$idkab <- gabung_final_ll$idkab
# 6. Konversi ke SpatialPointsDataFrame
coordinates(gabung_df) <- ~lon_centroid + lat_centroid
proj4string(gabung_df) <- CRS("+proj=longlat +datum=WGS84")
# → Ini adalah objek final untuk spgwr
gabung_sp <- gabung_df
Pemilihan Pembobot dan Bandwith Terbaik
library(spgwr)
library(tibble)
library(dplyr)
# Formula tetap
gwr_formula <- Y ~ X1 + X2+X3+X4+X5
# Model OLS
y_actual <- gabung_sp$Y
# Fungsi menangkap ringkasan GWR
capture_gwr_summary <- function(model, y_actual, formula) {
printed <- capture.output(print(model))
ambil <- function(kunci) {
baris <- grep(kunci, printed, value = TRUE)
if (length(baris) == 0) return(NA_real_)
as.numeric(sub(".*:\\s*", "", baris))
}
aic_val <- ambil("^AIC \\(GWR")
aicc_val <- ambil("^AICc")
rss <- ambil("^Residual sum of squares")
r2 <- ambil("^Quasi-global R2")
tr_S <- model$results$edf
n <- length(y_actual)
k <- length(all.vars(formula)) - 1
adj_r2 <- 1 - ((1 - r2) * (n - 1) / (n - k - 1))
tibble(AIC = aic_val, AICc = aicc_val, RSS = rss, R2 = r2, Adjusted_R2 = adj_r2, traceS = tr_S)
}
# Daftar kernel dan tipe bandwidth
kernels <- c("gaussian", "bisquare")
bandwidth_types <- c("adaptive", "fixed")
# Simpan hasil GWR
result_list <- list()
for (kernel in kernels) {
for (bw_type in bandwidth_types) {
# Pilih fungsi bobot
gweight_fun <- if (kernel == "gaussian") gwr.Gauss else gwr.bisquare
# Pilih bandwidth
bw <- gwr.sel(
formula = gwr_formula,
data = gabung_sp,
gweight = gweight_fun,
adapt = (bw_type == "adaptive"),
longlat = TRUE,
verbose = FALSE
)
# Jalankan GWR
model <- gwr(
formula = gwr_formula,
data = gabung_sp,
gweight = gweight_fun,
hatmatrix = TRUE,
se.fit = TRUE,
longlat = TRUE,
adapt = if (bw_type == "adaptive") bw else NULL,
bandwidth = if (bw_type == "fixed") bw else NULL
)
# Ringkasan hasil
summary_tbl <- capture_gwr_summary(model, y_actual, gwr_formula)
summary_tbl$Kernel <- kernel
summary_tbl$Bandwidth <- bw_type
result_list[[length(result_list)+1]] <- summary_tbl
}
}
## Warning in optimize(gwr.cv.f, lower = beta1, upper = beta2, maximum = FALSE, :
## NA/NaN replaced by maximum positive value
# Tambahkan model OLS
ols_model <- lm(gwr_formula, data = gabung_sp)
ols_rss <- sum(resid(ols_model)^2)
ols_tss <- sum((y_actual - mean(y_actual))^2)
ols_r2 <- 1 - (ols_rss / ols_tss)
n <- nrow(gabung_sp)
k <- length(all.vars(gwr_formula)) - 1
ols_adj_r2 <- 1 - ((1 - ols_r2) * (n - 1) / (n - k - 1))
ols_aic <- AIC(ols_model)
ols_aicc <- ols_aic + (2 * k * (k + 1)) / (n - k - 1)
ols_summary <- tibble(
AIC = ols_aic,
AICc = ols_aicc,
RSS = ols_rss,
R2 = ols_r2,
Adjusted_R2 = ols_adj_r2,
traceS = NA_real_,
Kernel = "OLS",
Bandwidth = "NA"
)
# Gabungkan semua hasil
final_results <- bind_rows(result_list, ols_summary)
# Tampilkan tabel
kable(final_results)
AIC | AICc | RSS | R2 | Adjusted_R2 | traceS | Kernel | Bandwidth |
---|---|---|---|---|---|---|---|
3449.166 | 3535.771 | 21775.50 | 0.6389011 | 0.6353470 | 427.8478 | gaussian | adaptive |
3480.210 | 3559.867 | 23325.90 | 0.6131911 | 0.6093839 | 433.0405 | gaussian | fixed |
3417.553 | 3558.648 | 19322.01 | 0.6795868 | 0.6764331 | 394.1002 | bisquare | adaptive |
3510.019 | 3572.649 | 25261.23 | 0.5810978 | 0.5769747 | 451.1563 | bisquare | fixed |
3778.920 | 3779.038 | 45665.27 | 0.2427415 | 0.2352882 | NA | OLS | NA |
Model GWR Terbaik
library(spgwr)
# 1. Definisikan formula GWR
gwr_formula <- Y ~ X1 + X2+X3+X4+X5
# Model OLS
# 2. Pilih kernel dan tipe bandwidth
kernel <- "Gauss"
bw_type <- "adaptive"
# 3. Pilih fungsi bobot
gweight_fun <- gwr.bisquare
# 4. Cari bandwidth adaptif
bw_adaptive <- gwr.sel(
formula = gwr_formula,
data = gabung_sp,
gweight = gweight_fun,
adapt = TRUE,
longlat = TRUE
)
## Adaptive q: 0.381966 CV score: 31929.74
## Adaptive q: 0.618034 CV score: 35681.72
## Adaptive q: 0.236068 CV score: 29680.01
## Adaptive q: 0.145898 CV score: 28795.93
## Adaptive q: 0.09016994 CV score: 29331.07
## Adaptive q: 0.154129 CV score: 28905.6
## Adaptive q: 0.1314287 CV score: 28690.72
## Adaptive q: 0.1156693 CV score: 28762.37
## Adaptive q: 0.1293638 CV score: 28701.21
## Adaptive q: 0.1369555 CV score: 28706.1
## Adaptive q: 0.1328487 CV score: 28698.69
## Adaptive q: 0.131224 CV score: 28689.58
## Adaptive q: 0.1305135 CV score: 28686.3
## Adaptive q: 0.1300743 CV score: 28689.99
## Adaptive q: 0.130665 CV score: 28686.9
## Adaptive q: 0.1303457 CV score: 28685.77
## Adaptive q: 0.1302421 CV score: 28687.38
## Adaptive q: 0.1304098 CV score: 28685.92
## Adaptive q: 0.130305 CV score: 28686.4
## Adaptive q: 0.1303457 CV score: 28685.77
# 5. Jalankan GWR dengan bandwidth adaptif
gwr_adaptive_model <- gwr(
formula = gwr_formula,
data = gabung_sp,
gweight = gweight_fun,
adapt = bw_adaptive,
hatmatrix = TRUE,
se.fit = TRUE,
longlat = TRUE
)
# 6. Lihat hasil
gwr_adaptive_model
## Call:
## gwr(formula = gwr_formula, data = gabung_sp, gweight = gweight_fun,
## adapt = bw_adaptive, hatmatrix = TRUE, longlat = TRUE, se.fit = TRUE)
## Kernel function: gweight_fun
## Adaptive quantile: 0.1303457 (about 66 of 514 data points)
## Summary of GWR coefficient estimates at data points:
## Min. 1st Qu. Median 3rd Qu. Max.
## X.Intercept. -1.7214e+02 -8.8497e+01 -3.6525e+01 -1.2294e+01 1.0369e+02
## X1 -2.0044e+01 -9.7814e-01 4.6349e+00 1.6714e+01 2.7901e+01
## X2 -7.0028e-01 5.3061e-01 7.6404e-01 1.1814e+00 1.9528e+00
## X3 -4.2284e-01 -1.5797e-01 -5.9619e-03 1.0149e-01 3.3372e-01
## X4 -2.8709e+00 8.5916e-02 1.4626e+00 1.9098e+00 5.8301e+00
## X5 -6.7801e-01 -1.1615e-01 1.4915e-01 4.0478e-01 8.4654e-01
## Global
## X.Intercept. -29.6983
## X1 5.8501
## X2 0.9515
## X3 -0.1114
## X4 -0.3979
## X5 -0.0522
## Number of data points: 514
## Effective number of parameters (residual: 2traceS - traceS'S): 119.8998
## Effective degrees of freedom (residual: 2traceS - traceS'S): 394.1002
## Sigma (residual: 2traceS - traceS'S): 7.002011
## Effective number of parameters (model: traceS): 94.7208
## Effective degrees of freedom (model: traceS): 419.2792
## Sigma (model: traceS): 6.78851
## Sigma (ML): 6.131187
## AICc (GWR p. 61, eq 2.33; p. 96, eq. 4.21): 3558.648
## AIC (GWR p. 96, eq. 4.22): 3417.553
## Residual sum of squares: 19322.01
## Quasi-global R2: 0.6795868
Uji Anova
##
## Call:
## lm(formula = gwr_formula, data = gabung_sp)
##
## Coefficients:
## (Intercept) X1 X2 X3 X4 X5
## -29.69830 5.85012 0.95153 -0.11140 -0.39788 -0.05219
RSS_OLS <- sum(residuals(ols_model)^2)
DF_OLS <- df.residual(ols_model)
# Ambil RSS dan DOF dari GWR
RSS_GWR <- sum(gwr_adaptive_model$SDF$gwr.e^2)
EDF_GWR <- gwr_adaptive_model$results$edf # Effective Degrees of Freedom
DF_GWR <- EDF_GWR # Sesuai definisi DOF residual GWR
# Hitung peningkatan penyesuaian model
Improvement <- RSS_OLS - RSS_GWR
DF_Improvement <- DF_OLS - DF_GWR
# Mean Square (MS)
MS_Improvement <- Improvement / DF_Improvement
MS_GWR <- RSS_GWR / DF_GWR
# F-Hitung
F_hit <- MS_Improvement / MS_GWR
# Tabel ANOVA manual GWR
anova_manual <- data.frame(
Sumber = c("Global Residuals (OLS)", "GWR Improvement", "GWR Residuals"),
SS = c(RSS_OLS, Improvement, RSS_GWR),
DF = c(DF_OLS, DF_Improvement, DF_GWR),
MS = c(NA, MS_Improvement, MS_GWR),
F = c(NA, NA, F_hit)
)
print(anova_manual)
## Sumber SS DF MS F
## 1 Global Residuals (OLS) 45665.27 508.0000 NA NA
## 2 GWR Improvement 26343.26 113.8998 231.28451 NA
## 3 GWR Residuals 19322.01 394.1002 49.02816 4.717381
Sumber | SS | DF | MS | F |
---|---|---|---|---|
Global Residuals (OLS) | 45665.27 | 508.0000 | NA | NA |
GWR Improvement | 26343.26 | 113.8998 | 231.28451 | NA |
GWR Residuals | 19322.01 | 394.1002 | 49.02816 | 4.71738 |
## Analysis of Variance Table
## Df Sum Sq Mean Sq F value
## OLS Residuals 6.0 45665
## GWR Improvement 113.9 26343 231.285
## GWR Residuals 394.1 19322 49.028 4.7174
## [1] 1.269287
## [1] 0.7724948
Visualiasasi dan Tabel
library(sf)
library(dplyr)
# 1. Data GWR dari SDF, tambahkan idkab dari spKab_utm (asumsi urutannya cocok)
gwr_sf <- st_as_sf(gwr_adaptive_model$SDF)
gwr_sf$idkab <- spKab_utm$idkab # <- pastikan ini cocok!
# 2. Ambil geometri asli dari spKab_utm (pastikan ini adalah polygon, bukan titik!)nmkab
geom_ref <- spKab_utm %>% dplyr::select(idkab,nmkab ,geometry)
# 3. Gabungkan: gunakan data dari GWR (gwr_sf) dan ambil geometri dari geom_ref
gwr_joined <- left_join(st_drop_geometry(gwr_sf), geom_ref, by = "idkab") %>%
st_as_sf()
# 4. Visualisasi: geometri harus polygon, bukan titik!
plot(st_geometry(gwr_joined)) # Cek, harus terlihat area, bukan titik
Uji Signifikansi Parsial Lokal
Peta Lengkap Signifikansi Parsial
library(sf)
library(sp)
vars <- c("X1","X2","X3","X4","X5")
for (v in vars) {
# Koefisien dan standar error
coef_val <- gwr_sp@data[[v]]
se_val <- gwr_sp@data[[paste0(v, "_se")]]
t_val <- coef_val / se_val
# 1. Simpan koefisien
gwr_sp@data[[paste0("b_", v)]] <- coef_val
# 2. Simpan status signifikan
signif_flag <- ifelse(abs(t_val) > 1.96, "Ya", "Tidak")
gwr_sp@data[[paste0("sig_", v)]] <- factor(signif_flag, levels = c("Tidak", "Ya"))
# 3. Simpan koefisien hanya signifikan
gwr_sp@data[[paste0("b_", v, "_sig")]] <- ifelse(abs(t_val) > 1.96, coef_val, NA)
# --- Peta 1: Koefisien
print(spplot(gwr_sp, zcol = paste0("b_", v),
main = paste("Peta Koefisien", v),
col.regions = colorRampPalette(c("blue", "white", "red"))(100),
na.col = "grey"))
# --- Peta 2: Signifikansi
print(spplot(gwr_sp, zcol = paste0("sig_", v),
main = paste("Signifikansi", v),
col.regions = c("black", "red")))
# --- Peta 3: Koefisien Hanya Signifikan
print(spplot(gwr_sp, zcol = paste0("b_", v, "_sig"),
main = paste("Koefisien Signifikan", v),
col.regions = colorRampPalette(c("blue", "green", "red"))(100),
na.col = "black"))
}
Tabel Jumlah Kabupaten berdasarkan Variabel Signifikan
# Hitung jumlah kabupaten/kota yang signifikan (bernilai "Ya")
sig_counts <- sapply(vars, function(v) {
kolom_nama <- paste0("sig_", v)
sum(gwr_sp@data[[kolom_nama]] == "Ya", na.rm = TRUE)
})
# Buat data frame hasil
tabel7 <- data.frame(
`Variabel Independen` = vars,
`Jumlah Kabupaten/Kota Signifikan` = sig_counts
)
# Tampilkan tabel
kable(tabel7)
Variabel.Independen | Jumlah.Kabupaten.Kota.Signifikan | |
---|---|---|
X1 | X1 | 151 |
X2 | X2 | 257 |
X3 | X3 | 77 |
X4 | X4 | 149 |
X5 | X5 | 234 |
Visualisasi Final Koefisien Signifikan
library(RColorBrewer)
library(classInt)
library(sp)
for (v in vars) {
val <- gwr_sp@data[[paste0("b_", v, "_sig")]]
# Inisialisasi vektor kategori NA
cat_val <- rep(NA_character_, length(val))
label_list <- c()
color_list <- c()
# --- NEGATIF ---
val_neg <- val[val < 0 & !is.na(val)]
if (length(val_neg) >= 3) {
brk_neg <- classIntervals(val_neg, n = 3, style = "quantile")$brks
neg_cuts <- cut(val, breaks = brk_neg, include.lowest = TRUE, dig.lab = 2)
neg_lvls <- levels(neg_cuts)
# Format label
labels_neg <- gsub(",", ";", neg_lvls)
labels_neg <- gsub("\\.", ",", labels_neg)
cat_val[val < 0 & !is.na(val)] <- labels_neg[as.numeric(neg_cuts[val < 0 & !is.na(val)])]
label_list <- c(label_list, labels_neg)
color_list <- c(color_list, c("#8B0000", "#B22222", "#CD5C5C")[1:length(labels_neg)])
}
# --- POSITIF ---
val_pos <- val[val > 0 & !is.na(val)]
if (length(val_pos) >= 3) {
brk_pos <- classIntervals(val_pos, n = 3, style = "quantile")$brks
pos_cuts <- cut(val, breaks = brk_pos, include.lowest = TRUE, dig.lab = 2)
pos_lvls <- levels(pos_cuts)
# Format label
labels_pos <- gsub(",", ";", pos_lvls)
labels_pos <- gsub("\\.", ",", labels_pos)
cat_val[val > 0 & !is.na(val)] <- labels_pos[as.numeric(pos_cuts[val > 0 & !is.na(val)])]
label_list <- c(label_list, labels_pos)
color_list <- c(color_list, c("#87CEFA", "#4682B4", "#00008B")[1:length(labels_pos)])
}
# --- Tidak Signifikan (NA) ---
cat_val[is.na(cat_val)] <- "Tidak Signifikan"
label_list <- c(label_list, "Tidak Signifikan")
color_list <- c(color_list, "black")
# Faktor berurutan
cat_val <- factor(cat_val, levels = label_list)
# Tambahkan ke data
gwr_sp@data[[paste0("b_", v, "_sig_cat")]] <- cat_val
# Plot
print(
spplot(gwr_sp, zcol = paste0("b_", v, "_sig_cat"),
main = paste("Koefisien Signifikan", v),
col.regions = setNames(color_list, label_list),
par.settings = list(layout.heights = list(key.bottom = 2), axis.line = list(col = NA)),
colorkey = list(
space = "bottom",
labels = list(
at = 1:length(label_list),
labels = label_list,
cex = 1
),
height = 1
))
)
}
Pengelompokkan Nilai Koefisien dan Signifikansi Parsial
# Daftar variabel yang dianalisis (misalnya sudah didefinisikan sebelumnya)
vars <- c("X1","X2","X3","X4","X5") # ganti sesuai variabelmu
# Inisialisasi hasil
hasil_tabel <- data.frame(Koef = c("Positif", "Negatif"), stringsAsFactors = FALSE)
# Loop per variabel (misalnya X1 sampai Xn)
for (v in vars) {
kolom_nama <- paste0("b_", v, "_sig") # Kolom berisi koefisien signifikan
# Pastikan kolom ada
if (!kolom_nama %in% names(gwr_sp@data)) next
val <- gwr_sp@data[[kolom_nama]]
nama <- gwr_sp@data$nmkab # atau NAMOBJ jika itu nama wilayah
# Filter yang signifikan dan positif/negatif
positif <- nama[which(val > 0 & !is.na(val))]
negatif <- nama[which(val < 0 & !is.na(val))]
# Gabungkan nama kecamatan
hasil_tabel[[v]] <- c(
if (length(positif) > 0) paste(sort(positif), collapse = ", ") else "-",
if (length(negatif) > 0) paste(sort(negatif), collapse = ", ") else "-"
)
}
# Tampilkan hasil
kable(hasil_tabel, row.names = FALSE)
Koef | X1 | X2 | X3 | X4 | X5 |
---|---|---|---|---|---|
Positif | ACEH BARAT, ACEH BARAT DAYA, ACEH BESAR, ACEH JAYA, ACEH SELATAN, ACEH SINGKIL, ACEH TAMIANG, ACEH TENGAH, ACEH TENGGARA, ACEH TIMUR, ACEH UTARA, AGAM, ASAHAN, BANDA ACEH, BANGGAI, BANGGAI KEPULAUAN, BANGGAI LAUT, BANTAENG, BARRU, BATU BARA, BAUBAU, BENER MERIAH, BENGKALIS, BINJAI, BIREUEN, BOMBANA, BONE, BONTANG, BUKITTINGGI, BULUKUMBA, BURU, BURU SELATAN, BUTON, BUTON SELATAN, BUTON TENGAH, BUTON UTARA, D U M A I, DAIRI, DELI SERDANG, DONGGALA, ENREKANG, GAYO LUES, GOWA, GUNUNGSITOLI, HUMBANG HASUNDUTAN, JENEPONTO, KAMPAR, KARO, KENDARI, KEPULAUAN MENTAWAI, KEPULAUAN SELAYAR, KEPULAUAN SULA, KOLAKA, KOLAKA TIMUR, KOLAKA UTARA, KONAWE, KONAWE KEPULAUAN, KONAWE SELATAN, KONAWE UTARA, LABUHAN BATU, LABUHAN BATU SELATAN, LABUHAN BATU UTARA, LANGKAT, LANGSA, LHOKSEUMAWE, LIMA PULUH KOTA, LUWU, LUWU TIMUR, LUWU UTARA, MAJENE, MAKASSAR, MAMASA, MAMUJU, MAMUJU TENGAH, MANDAILING NATAL, MANGGARAI, MANGGARAI BARAT, MANGGARAI TIMUR, MAROS, MEDAN, MOROWALI, MOROWALI UTARA, MUNA, MUNA BARAT, NAGAN RAYA, NIAS, NIAS BARAT, NIAS SELATAN, NIAS UTARA, PADANG, PADANG LAWAS, PADANG LAWAS UTARA, PADANG PANJANG, PADANG PARIAMAN, PADANGSIDIMPUAN, PAKPAK BHARAT, PALOPO, PALU, PANGKAJENE DAN KEPULAUAN, PAREPARE, PARIAMAN, PASAMAN, PASAMAN BARAT, PASANGKAYU, PAYAKUMBUH, PEKANBARU, PEMATANG SIANTAR, PIDIE, PIDIE JAYA, PINRANG, POLEWALI MANDAR, POSO, PULAU TALIABU, ROKAN HILIR, ROKAN HULU, S I A K, SABANG, SAMOSIR, SAWAH LUNTO, SERDANG BEDAGAI, SIBOLGA, SIDENRENG RAPPANG, SIGI, SIJUNJUNG, SIMALUNGUN, SIMEULUE, SINJAI, SOLOK, SOLOK, SOPPENG, SUBULUSSALAM, TAKALAR, TANA TORAJA, TANAH DATAR, TANJUNG BALAI, TAPANULI SELATAN, TAPANULI TENGAH, TAPANULI UTARA, TEBING TINGGI, TOBA, TOJO UNA-UNA, TORAJA UTARA, WAJO, WAKATOBI | ACEH BARAT, ACEH BARAT DAYA, ACEH BESAR, ACEH JAYA, ACEH SELATAN, ACEH SINGKIL, ACEH TAMIANG, ACEH TENGAH, ACEH TENGGARA, ACEH TIMUR, ACEH UTARA, AMBON, ASAHAN, ASMAT, BANDA ACEH, BANDUNG, BANDUNG, BANGGAI KEPULAUAN, BANGGAI LAUT, BANJAR, BANJARNEGARA, BANTAENG, BANTUL, BANYU ASIN, BANYUMAS, BARRU, BATANG, BATU, BATU BARA, BENER MERIAH, BENGKULU SELATAN, BIAK NUMFOR, BINJAI, BIREUEN, BLITAR, BLITAR, BLORA, BOJONEGORO, BOMBANA, BONE, BOVEN DIGOEL, BOYOLALI, BREBES, BULUKUMBA, BURU, BURU SELATAN, CIAMIS, CILACAP, CIMAHI, CIREBON, CIREBON, DAIRI, DEIYAI, DELI SERDANG, DEMAK, DOGIYAI, EMPAT LAWANG, ENREKANG, FAKFAK, GARUT, GAYO LUES, GOWA, GROBOGAN, GUNUNG KIDUL, GUNUNGSITOLI, HALMAHERA BARAT, HALMAHERA TENGAH, HALMAHERA TIMUR, HALMAHERA UTARA, HUMBANG HASUNDUTAN, INDRAMAYU, INTAN JAYA, JAYAPURA, JAYAPURA, JAYAWIJAYA, JENEPONTO, JEPARA, JOMBANG, KAIMANA, KARANGANYAR, KARO, KAUR, KEBUMEN, KEDIRI, KEDIRI, KEEROM, KENDAL, KENDARI, KEPULAUAN ARU, KEPULAUAN SELAYAR, KEPULAUAN SULA, KEPULAUAN TANIMBAR, KEPULAUAN YAPEN, KLATEN, KOLAKA, KOLAKA TIMUR, KOLAKA UTARA, KONAWE, KONAWE SELATAN, KONAWE UTARA, KUDUS, KULON PROGO, KUNINGAN, LABUHAN BATU, LABUHAN BATU SELATAN, LABUHAN BATU UTARA, LAHAT, LAMONGAN, LAMPUNG BARAT, LANGKAT, LANGSA, LANNY JAYA, LHOKSEUMAWE, LUMAJANG, LUWU, LUWU TIMUR, LUWU UTARA, MADIUN, MADIUN, MAGELANG, MAGELANG, MAGETAN, MAJALENGKA, MAJENE, MAKASSAR, MALANG, MALANG, MALUKU BARAT DAYA, MALUKU TENGAH, MALUKU TENGGARA, MAMASA, MAMBERAMO RAYA, MAMBERAMO TENGAH, MAMUJU, MANDAILING NATAL, MANOKWARI, MANOKWARI SELATAN, MAPPI, MAROS, MAYBRAT, MEDAN, MERAUKE, MIMIKA, MOJOKERTO, MOJOKERTO, MOROWALI, MUARA ENIM, MUSI BANYUASIN, NABIRE, NAGAN RAYA, NDUGA, NGANJUK, NGAWI, NIAS, NIAS BARAT, NIAS SELATAN, NIAS UTARA, OGAN ILIR, OGAN KOMERING ULU, OGAN KOMERING ULU SELATAN, OGAN KOMERING ULU TIMUR, PACITAN, PADANG LAWAS, PADANG LAWAS UTARA, PADANGSIDIMPUAN, PAGAR ALAM, PAKPAK BHARAT, PALEMBANG, PALOPO, PANGANDARAN, PANGKAJENE DAN KEPULAUAN, PANIAI, PAREPARE, PASURUAN, PASURUAN, PATI, PEGUNUNGAN ARFAK, PEGUNUNGAN BINTANG, PEKALONGAN, PEKALONGAN, PEMALANG, PEMATANG SIANTAR, PENUKAL ABAB LEMATANG ILIR, PESISIR BARAT, PIDIE, PIDIE JAYA, PINRANG, POLEWALI MANDAR, PONOROGO, PRABUMULIH, PULAU MOROTAI, PULAU TALIABU, PUNCAK, PUNCAK JAYA, PURBALINGGA, PURWOREJO, RAJA AMPAT, REMBANG, SABANG, SALATIGA, SAMOSIR, SARMI, SEMARANG, SEMARANG, SERAM BAGIAN BARAT, SERAM BAGIAN TIMUR, SERDANG BEDAGAI, SIBOLGA, SIDENRENG RAPPANG, SIDOARJO, SIMALUNGUN, SIMEULUE, SINJAI, SLEMAN, SOPPENG, SORONG, SORONG, SORONG SELATAN, SRAGEN, SUBULUSSALAM, SUKOHARJO, SUMEDANG, SUPIORI, SURABAYA, SURAKARTA, TAKALAR, TAMBRAUW, TANA TORAJA, TANJUNG BALAI, TAPANULI SELATAN, TAPANULI TENGAH, TAPANULI UTARA, TASIKMALAYA, TASIKMALAYA, TEBING TINGGI, TEGAL, TEGAL, TELUK BINTUNI, TELUK WONDAMA, TEMANGGUNG, TIDORE KEPULAUAN, TOBA, TOLIKARA, TORAJA UTARA, TRENGGALEK, TUAL, TUBAN, TULANG BAWANG BARAT, TULUNGAGUNG, WAJO, WAROPEN, WAY KANAN, WONOGIRI, WONOSOBO, YAHUKIMO, YALIMO, YOGYAKARTA | KENDARI, KOLAKA, KOLAKA TIMUR, KOLAKA UTARA, KONAWE, KONAWE KEPULAUAN, KONAWE SELATAN, KONAWE UTARA, LUWU TIMUR, MOROWALI | ACEH BARAT, ACEH BARAT DAYA, ACEH BESAR, ACEH JAYA, ACEH SELATAN, ACEH SINGKIL, ACEH TAMIANG, ACEH TENGAH, ACEH TENGGARA, ACEH TIMUR, ACEH UTARA, ASAHAN, BANDA ACEH, BANGGAI, BANGGAI KEPULAUAN, BANGGAI LAUT, BANYU ASIN, BATU BARA, BENER MERIAH, BENGKALIS, BINJAI, BIREUEN, BURU, BURU SELATAN, D U M A I, DAIRI, DELI SERDANG, GAYO LUES, GUNUNGSITOLI, HUMBANG HASUNDUTAN, KAMPAR, KARO, KAUR, KENDARI, KEPULAUAN SULA, KOLAKA UTARA, KONAWE, KONAWE KEPULAUAN, KONAWE UTARA, LABUHAN BATU, LABUHAN BATU SELATAN, LABUHAN BATU UTARA, LAMPUNG BARAT, LAMPUNG TENGAH, LAMPUNG UTARA, LANGKAT, LANGSA, LHOKSEUMAWE, LUWU TIMUR, MAJENE, MAMASA, MAMUJU, MAMUJU TENGAH, MEDAN, MESUJI, MOROWALI, MUARA ENIM, NAGAN RAYA, NIAS, NIAS BARAT, NIAS UTARA, OGAN ILIR, OGAN KOMERING ILIR, OGAN KOMERING ULU, OGAN KOMERING ULU SELATAN, OGAN KOMERING ULU TIMUR, PADANG LAWAS, PADANG LAWAS UTARA, PADANGSIDIMPUAN, PAGAR ALAM, PAKPAK BHARAT, PALEMBANG, PALU, PASANGKAYU, PEKANBARU, PEMATANG SIANTAR, PENUKAL ABAB LEMATANG ILIR, PESISIR BARAT, PIDIE, PIDIE JAYA, PRABUMULIH, PRINGSEWU, PULAU TALIABU, ROKAN HILIR, ROKAN HULU, S I A K, SABANG, SAMOSIR, SERDANG BEDAGAI, SIBOLGA, SIGI, SIMALUNGUN, SIMEULUE, SUBULUSSALAM, TANGGAMUS, TANJUNG BALAI, TAPANULI SELATAN, TAPANULI TENGAH, TAPANULI UTARA, TEBING TINGGI, TOBA, TULANG BAWANG BARAT, TULANGBAWANG, WAY KANAN | AGAM, ASMAT, B A T A M, BANDAR LAMPUNG, BANDUNG, BANDUNG, BANDUNG BARAT, BANGGAI, BANGGAI KEPULAUAN, BANGGAI LAUT, BANJAR, BANJARNEGARA, BANYUMAS, BARRU, BATANG, BEKASI, BEKASI, BENGKALIS, BIAK NUMFOR, BOGOR, BOGOR, BOMBANA, BONE, BOVEN DIGOEL, BREBES, BUKITTINGGI, BUNGO, BURU, BURU SELATAN, BUTON UTARA, CIAMIS, CIANJUR, CILACAP, CILEGON, CIMAHI, CIREBON, CIREBON, D U M A I, DEIYAI, DEPOK, DHARMASRAYA, DOGIYAI, DONGGALA, ENREKANG, FAKFAK, GARUT, GOWA, INDRAGIRI HILIR, INDRAGIRI HULU, INDRAMAYU, INTAN JAYA, JAKARTA BARAT, JAKARTA PUSAT, JAKARTA SELATAN, JAKARTA TIMUR, JAKARTA UTARA, JAYAPURA, JAYAPURA, JAYAWIJAYA, KAIMANA, KAMPAR, KARAWANG, KARIMUN, KEBUMEN, KEEROM, KENDARI, KEPULAUAN ARU, KEPULAUAN MERANTI, KEPULAUAN SERIBU, KEPULAUAN TANIMBAR, KEPULAUAN YAPEN, KERINCI, KOLAKA, KOLAKA TIMUR, KOLAKA UTARA, KONAWE, KONAWE KEPULAUAN, KONAWE SELATAN, KONAWE UTARA, KUANTAN SINGINGI, KUNINGAN, LAMPUNG SELATAN, LAMPUNG TIMUR, LANNY JAYA, LEBAK, LIMA PULUH KOTA, LUWU, LUWU TIMUR, LUWU UTARA, MAJALENGKA, MAJENE, MAKASSAR, MALUKU TENGGARA, MAMASA, MAMBERAMO RAYA, MAMBERAMO TENGAH, MAMUJU, MAMUJU TENGAH, MANOKWARI, MANOKWARI SELATAN, MAPPI, MAROS, MAYBRAT, MERAUKE, METRO, MIMIKA, MOROWALI, MOROWALI UTARA, MUNA, MUNA BARAT, NABIRE, NDUGA, PADANG, PADANG PANJANG, PADANG PARIAMAN, PALOPO, PALU, PANDEGLANG, PANGANDARAN, PANGKAJENE DAN KEPULAUAN, PANIAI, PAREPARE, PARIAMAN, PARIGI MOUTONG, PASAMAN, PASANGKAYU, PAYAKUMBUH, PEGUNUNGAN ARFAK, PEGUNUNGAN BINTANG, PEKALONGAN, PEKALONGAN, PEKANBARU, PELALAWAN, PEMALANG, PESAWARAN, PESISIR SELATAN, PINRANG, POLEWALI MANDAR, POSO, PULAU TALIABU, PUNCAK, PUNCAK JAYA, PURBALINGGA, PURWAKARTA, ROKAN HULU, S I A K, SARMI, SAWAH LUNTO, SERANG, SERANG, SIDENRENG RAPPANG, SIGI, SIJUNJUNG, SINJAI, SOLOK, SOLOK, SOLOK SELATAN, SOPPENG, SUBANG, SUKABUMI, SUKABUMI, SUMEDANG, SUNGAI PENUH, SUPIORI, TAMBRAUW, TANA TORAJA, TANAH DATAR, TANGERANG, TANGERANG, TANGERANG SELATAN, TANJUNG JABUNG BARAT, TANJUNG PINANG, TASIKMALAYA, TASIKMALAYA, TEBO, TEGAL, TEGAL, TELUK BINTUNI, TELUK WONDAMA, TOJO UNA-UNA, TOLIKARA, TORAJA UTARA, TUAL, WAJO, WAROPEN, WONOSOBO, YAHUKIMO, YALIMO |
Negatif | BANJARNEGARA, BANYUMAS, KEBUMEN, PEKALONGAN, PEMALANG, PURBALINGGA, TANAH LAUT | - | ALOR, BADUNG, BANGKALAN, BANGLI, BANYUWANGI, BATU, BELU, BIMA, BIMA, BLITAR, BLITAR, BOJONEGORO, BONDOWOSO, BULELENG, DENPASAR, DOMPU, ENDE, FLORES TIMUR, GIANYAR, GRESIK, JEMBER, JEMBRANA, JOMBANG, KARANGASEM, KEDIRI, KEDIRI, KEPULAUAN SELAYAR, KLUNGKUNG, KUPANG, KUPANG, LAMONGAN, LEMBATA, LUMAJANG, MADIUN, MALAKA, MALANG, MALANG, MANGGARAI, MANGGARAI BARAT, MANGGARAI TIMUR, MOJOKERTO, MOJOKERTO, NAGEKEO, NGADA, NGANJUK, PAMEKASAN, PASURUAN, PASURUAN, PONOROGO, PROBOLINGGO, PROBOLINGGO, ROTE NDAO, SABU RAIJUA, SAMPANG, SIDOARJO, SIKKA, SITUBONDO, SUMBA TENGAH, SUMBA TIMUR, SUMENEP, SURABAYA, TABANAN, TIMOR TENGAH SELATAN, TIMOR TENGAH UTARA, TRENGGALEK, TUBAN, TULUNGAGUNG | ASMAT, BIAK NUMFOR, BOVEN DIGOEL, DEIYAI, DOGIYAI, FAKFAK, INTAN JAYA, JAYAPURA, JAYAPURA, JAYAWIJAYA, KAIMANA, KEEROM, KEPULAUAN ARU, KEPULAUAN TANIMBAR, KEPULAUAN YAPEN, LANNY JAYA, MALUKU TENGGARA, MAMBERAMO RAYA, MAMBERAMO TENGAH, MANOKWARI, MANOKWARI SELATAN, MAPPI, MAYBRAT, MERAUKE, MIMIKA, NABIRE, NDUGA, PANIAI, PEGUNUNGAN ARFAK, PEGUNUNGAN BINTANG, PUNCAK, PUNCAK JAYA, SARMI, SORONG, SORONG, SORONG SELATAN, SUPIORI, TAMBRAUW, TELUK BINTUNI, TELUK WONDAMA, TOLIKARA, TUAL, WAROPEN, YAHUKIMO, YALIMO | ACEH BARAT, ACEH BARAT DAYA, ACEH BESAR, ACEH JAYA, ACEH SELATAN, ACEH SINGKIL, ACEH TAMIANG, ACEH TENGAH, ACEH TENGGARA, ACEH TIMUR, ACEH UTARA, ASAHAN, BANDA ACEH, BATU BARA, BENER MERIAH, BINJAI, BIREUEN, DAIRI, DELI SERDANG, GAYO LUES, GUNUNGSITOLI, HUMBANG HASUNDUTAN, KARO, LANGKAT, LANGSA, LHOKSEUMAWE, MEDAN, NAGAN RAYA, NIAS, NIAS BARAT, NIAS UTARA, PAKPAK BHARAT, PEMATANG SIANTAR, PIDIE, PIDIE JAYA, SABANG, SAMOSIR, SERDANG BEDAGAI, SIBOLGA, SIMALUNGUN, SIMEULUE, SUBULUSSALAM, TAPANULI TENGAH, TAPANULI UTARA, TEBING TINGGI, TOBA |
Tabel Jumlah Kabupaten dengan Kelompok Kombinasi Signifikansi Parsial
# Ambil kolom signifikan (TRUE/FALSE) dari variabel tertentu
sig_df <- gwr_sp@data[, paste0("sig_", vars)]
# Pastikan dalam bentuk logical TRUE/FALSE
sig_df <- lapply(sig_df, function(x) {
if (is.factor(x)) as.logical(as.numeric(as.character(x) == "Ya")) else as.logical(x)
})
sig_df <- as.data.frame(sig_df)
# Buat kolom var_sig (nama variabel yang signifikan)
gwr_sf$var_sig <- apply(sig_df, 1, function(row) {
signif_vars <- vars[which(row)]
if (length(signif_vars) == 0) {
return("Tidak ada")
} else {
return(paste(signif_vars, collapse = ", "))
}
})
library(dplyr)
# --- Ambil nilai signifikan dari gwr_sp
sig_df <- gwr_sp@data[, paste0("sig_", vars)]
# --- Pastikan hasilnya logical
sig_df <- lapply(sig_df, function(x) {
if (is.factor(x)) as.character(x) == "Ya" else as.logical(x)
})
sig_df <- as.data.frame(sig_df)
# --- Buat kolom var_sig langsung di @data
gwr_sp@data$var_sig <- apply(sig_df, 1, function(row) {
signif_vars <- vars[which(row)]
if (length(signif_vars) == 0) {
return("Tidak ada")
} else {
return(paste(sort(signif_vars), collapse = ", "))
}
})
# --- Rekap: nama kecamatan per kategori var_sig
tabel_kec_per_kategori <- gwr_sp@data %>%
group_by(var_sig) %>%
summarise(
daftar_kabupaten = paste(sort(unique(nmkab)), collapse = ", "),
jumlah = dplyr::n()
) %>%
arrange(var_sig)
# --- Tampilkan semua hasil
kable(tabel_kec_per_kategori, n = Inf)
var_sig | daftar_kabupaten | jumlah |
---|---|---|
Tidak ada | BALANGAN, BALIKPAPAN, BANGKA, BANGKA BARAT, BANGKA SELATAN, BANGKA TENGAH, BANJAR, BANJAR BARU, BANJARMASIN, BARITO KUALA, BARITO SELATAN, BARITO TIMUR, BARITO UTARA, BATANG HARI, BELITUNG, BELITUNG TIMUR, BENGKAYANG, BENGKULU, BENGKULU TENGAH, BENGKULU UTARA, BERAU, BINTAN, BITUNG, BOALEMO, BOLAANG MONGONDOW, BOLAANG MONGONDOW SELATAN, BOLAANG MONGONDOW TIMUR, BOLAANG MONGONDOW UTARA, BONE BOLANGO, BULUNGAN, BUOL, GORONTALO, GORONTALO UTARA, GUNUNG MAS, HALMAHERA SELATAN, HULU SUNGAI SELATAN, HULU SUNGAI TENGAH, HULU SUNGAI UTARA, JAMBI, KAPUAS, KAPUAS HULU, KATINGAN, KAYONG UTARA, KEPAHIANG, KEPULAUAN ANAMBAS, KEPULAUAN SANGIHE, KEPULAUAN TALAUD, KETAPANG, KOTABARU, KOTAMOBAGU, KOTAWARINGIN BARAT, KOTAWARINGIN TIMUR, KUBU RAYA, KUTAI BARAT, KUTAI KARTANEGARA, KUTAI TIMUR, LAMANDAU, LANDAK, LEBONG, LINGGA, LOMBOK BARAT, LOMBOK TENGAH, LOMBOK TIMUR, LOMBOK UTARA, LUBUKLINGGAU, MAHAKAM HULU, MALINAU, MANADO, MATARAM, MELAWI, MEMPAWAH, MERANGIN, MINAHASA, MINAHASA SELATAN, MINAHASA TENGGARA, MINAHASA UTARA, MUARO JAMBI, MUKOMUKO, MURUNG RAYA, MUSI RAWAS, MUSI RAWAS UTARA, NATUNA, NUNUKAN, PALANGKA RAYA, PANGKALPINANG, PASER, PENAJAM PASER UTARA, POHUWATO, PONTIANAK, PULANG PISAU, REJANG LEBONG, SAMARINDA, SAMBAS, SANGGAU, SAROLANGUN, SEKADAU, SELUMA, SERUYAN, SIAU TAGULANDANG BIARO, SINGKAWANG, SINTANG, SUKAMARA, SUMBA BARAT, SUMBA BARAT DAYA, SUMBAWA, SUMBAWA BARAT, TABALONG, TANA TIDUNG, TANAH BUMBU, TANJUNG JABUNG TIMUR, TAPIN, TARAKAN, TERNATE, TOLI-TOLI, TOMOHON | 116 |
X1 | BAUBAU, BONTANG, BUTON, BUTON SELATAN, BUTON TENGAH, KEPULAUAN MENTAWAI, PASAMAN BARAT, TANAH LAUT, WAKATOBI | 9 |
X1, X2 | BANTAENG, BULUKUMBA, JENEPONTO, MANDAILING NATAL, NIAS SELATAN, TAKALAR | 6 |
X1, X2, X3 | KEPULAUAN SELAYAR | 1 |
X1, X2, X3, X4, X5 | KENDARI, KOLAKA UTARA, KONAWE, KONAWE UTARA, LUWU TIMUR, MOROWALI | 6 |
X1, X2, X3, X5 | KOLAKA, KOLAKA TIMUR, KONAWE SELATAN | 3 |
X1, X2, X4 | KEPULAUAN SULA, LABUHAN BATU, LABUHAN BATU SELATAN, LABUHAN BATU UTARA, PADANG LAWAS, PADANG LAWAS UTARA, PADANGSIDIMPUAN, TANJUNG BALAI, TAPANULI SELATAN | 9 |
X1, X2, X4, X5 | ACEH BARAT, ACEH BARAT DAYA, ACEH BESAR, ACEH JAYA, ACEH SELATAN, ACEH SINGKIL, ACEH TAMIANG, ACEH TENGAH, ACEH TENGGARA, ACEH TIMUR, ACEH UTARA, ASAHAN, BANDA ACEH, BANGGAI KEPULAUAN, BANGGAI LAUT, BATU BARA, BENER MERIAH, BINJAI, BIREUEN, BURU, BURU SELATAN, DAIRI, DELI SERDANG, GAYO LUES, GUNUNGSITOLI, HUMBANG HASUNDUTAN, KARO, LANGKAT, LANGSA, LHOKSEUMAWE, MAJENE, MAMASA, MAMUJU, MEDAN, NAGAN RAYA, NIAS, NIAS BARAT, NIAS UTARA, PAKPAK BHARAT, PEMATANG SIANTAR, PIDIE, PIDIE JAYA, PULAU TALIABU, SABANG, SAMOSIR, SERDANG BEDAGAI, SIBOLGA, SIMALUNGUN, SIMEULUE, SUBULUSSALAM, TAPANULI TENGAH, TAPANULI UTARA, TEBING TINGGI, TOBA | 54 |
X1, X2, X5 | BANJARNEGARA, BANYUMAS, BARRU, BOMBANA, BONE, ENREKANG, GOWA, KEBUMEN, LUWU, LUWU UTARA, MAKASSAR, MAROS, PALOPO, PANGKAJENE DAN KEPULAUAN, PAREPARE, PEKALONGAN, PEMALANG, PINRANG, POLEWALI MANDAR, PURBALINGGA, SIDENRENG RAPPANG, SINJAI, SOPPENG, TANA TORAJA, TORAJA UTARA, WAJO | 26 |
X1, X3 | MANGGARAI, MANGGARAI BARAT, MANGGARAI TIMUR | 3 |
X1, X3, X4, X5 | KONAWE KEPULAUAN | 1 |
X1, X4 | ROKAN HILIR | 1 |
X1, X4, X5 | BANGGAI, BENGKALIS, D U M A I, KAMPAR, MAMUJU TENGAH, PALU, PASANGKAYU, PEKANBARU, ROKAN HULU, S I A K, SIGI | 11 |
X1, X5 | AGAM, BUKITTINGGI, BUTON UTARA, DONGGALA, LIMA PULUH KOTA, MOROWALI UTARA, MUNA, MUNA BARAT, PADANG, PADANG PANJANG, PADANG PARIAMAN, PARIAMAN, PASAMAN, PAYAKUMBUH, POSO, SAWAH LUNTO, SIJUNJUNG, SOLOK, TANAH DATAR, TOJO UNA-UNA | 21 |
X2 | AMBON, BANTUL, BENGKULU SELATAN, BLORA, BOYOLALI, DEMAK, EMPAT LAWANG, GROBOGAN, GUNUNG KIDUL, HALMAHERA BARAT, HALMAHERA TENGAH, HALMAHERA TIMUR, HALMAHERA UTARA, JEPARA, KARANGANYAR, KENDAL, KLATEN, KUDUS, KULON PROGO, LAHAT, MADIUN, MAGELANG, MAGETAN, MALUKU BARAT DAYA, MALUKU TENGAH, MUSI BANYUASIN, NGAWI, PACITAN, PATI, PULAU MOROTAI, PURWOREJO, RAJA AMPAT, REMBANG, SALATIGA, SEMARANG, SERAM BAGIAN BARAT, SERAM BAGIAN TIMUR, SLEMAN, SRAGEN, SUKOHARJO, SURAKARTA, TEMANGGUNG, TIDORE KEPULAUAN, WONOGIRI, YOGYAKARTA | 47 |
X2, X3 | BATU, BLITAR, BOJONEGORO, JOMBANG, KEDIRI, LAMONGAN, LUMAJANG, MADIUN, MALANG, MOJOKERTO, NGANJUK, PASURUAN, PONOROGO, SIDOARJO, SURABAYA, TRENGGALEK, TUBAN, TULUNGAGUNG | 23 |
X2, X4 | BANYU ASIN, KAUR, LAMPUNG BARAT, MUARA ENIM, OGAN ILIR, OGAN KOMERING ULU, OGAN KOMERING ULU SELATAN, OGAN KOMERING ULU TIMUR, PAGAR ALAM, PALEMBANG, PENUKAL ABAB LEMATANG ILIR, PESISIR BARAT, PRABUMULIH, SORONG, SORONG SELATAN, TULANG BAWANG BARAT, WAY KANAN | 18 |
X2, X4, X5 | ASMAT, BIAK NUMFOR, BOVEN DIGOEL, DEIYAI, DOGIYAI, FAKFAK, INTAN JAYA, JAYAPURA, JAYAWIJAYA, KAIMANA, KEEROM, KEPULAUAN ARU, KEPULAUAN TANIMBAR, KEPULAUAN YAPEN, LANNY JAYA, MALUKU TENGGARA, MAMBERAMO RAYA, MAMBERAMO TENGAH, MANOKWARI, MANOKWARI SELATAN, MAPPI, MAYBRAT, MERAUKE, MIMIKA, NABIRE, NDUGA, PANIAI, PEGUNUNGAN ARFAK, PEGUNUNGAN BINTANG, PUNCAK, PUNCAK JAYA, SARMI, SUPIORI, TAMBRAUW, TELUK BINTUNI, TELUK WONDAMA, TOLIKARA, TUAL, WAROPEN, YAHUKIMO, YALIMO | 42 |
X2, X5 | BANDUNG, BANJAR, BATANG, BREBES, CIAMIS, CILACAP, CIMAHI, CIREBON, GARUT, INDRAMAYU, KUNINGAN, MAJALENGKA, PANGANDARAN, PEKALONGAN, SUMEDANG, TASIKMALAYA, TEGAL, WONOSOBO | 22 |
X3 | ALOR, BADUNG, BANGKALAN, BANGLI, BANYUWANGI, BELU, BIMA, BONDOWOSO, BULELENG, DENPASAR, DOMPU, ENDE, FLORES TIMUR, GIANYAR, GRESIK, JEMBER, JEMBRANA, KARANGASEM, KLUNGKUNG, KUPANG, LEMBATA, MALAKA, NAGEKEO, NGADA, PAMEKASAN, PROBOLINGGO, ROTE NDAO, SABU RAIJUA, SAMPANG, SIKKA, SITUBONDO, SUMBA TENGAH, SUMBA TIMUR, SUMENEP, TABANAN, TIMOR TENGAH SELATAN, TIMOR TENGAH UTARA | 40 |
X4 | LAMPUNG TENGAH, LAMPUNG UTARA, MESUJI, OGAN KOMERING ILIR, PRINGSEWU, TANGGAMUS, TULANGBAWANG | 7 |
X5 | B A T A M, BANDAR LAMPUNG, BANDUNG BARAT, BEKASI, BOGOR, BUNGO, CIANJUR, CILEGON, DEPOK, DHARMASRAYA, INDRAGIRI HILIR, INDRAGIRI HULU, JAKARTA BARAT, JAKARTA PUSAT, JAKARTA SELATAN, JAKARTA TIMUR, JAKARTA UTARA, KARAWANG, KARIMUN, KEPULAUAN MERANTI, KEPULAUAN SERIBU, KERINCI, KUANTAN SINGINGI, LAMPUNG SELATAN, LAMPUNG TIMUR, LEBAK, METRO, PANDEGLANG, PARIGI MOUTONG, PELALAWAN, PESAWARAN, PESISIR SELATAN, PURWAKARTA, SERANG, SOLOK SELATAN, SUBANG, SUKABUMI, SUNGAI PENUH, TANGERANG, TANGERANG SELATAN, TANJUNG JABUNG BARAT, TANJUNG PINANG, TEBO | 48 |
Visualisasi Kelompok Kombinasi Signifikansi Parsial
library(ggplot2)
library(sf)
# Ubah ke sf jika belum
gwr_sf <- st_as_sf(gwr_sp)
gwr_sf$var_sig <- factor(gwr_sf$var_sig)
warna_kategori_final <- c(
"black", "#0000CD", "#4169E1", "#4682B4", "#5F9EA0", "#6495ED", "#87CEEB", "#87CEFA",
"#8B0000", "#A52A2A", "#B22222", "#CD5C5C", "#DC143C", "#E9967A", "#FA8072", "#FFA07A",
"#008000", "#32CD32", "#3CB371", "#00FA9A", "#20B2AA", "#40E0D0"
)
# Buat warna sesuai urutan faktor
warna_kategori_named <- setNames(warna_kategori_final, levels(gwr_sf$var_sig))
# Plot
ggplot(gwr_sf) +
geom_sf(aes(fill = var_sig), color = "black", size = 0.2) +
scale_fill_manual(
values = warna_kategori_named,
name = "Signifikansi Variabel Lokal",
guide = guide_legend(
direction = "horizontal",
title.position = "top",
label.position = "bottom",
nrow = 2
)
) +
labs(title = "Peta Choropleth: Kelompok Kombinasi Variabel Signifikan (GWR)") +
coord_sf(datum = NA) + # Hilangkan label koordinat dan garis sumbu
theme_void() + # Hilangkan seluruh grid & axis
theme(
legend.position = "bottom",
legend.title.align = 0.5,
legend.text = element_text(size = 12),
plot.title = element_text(hjust = 0.5, face = "bold")
)
## Warning: The `legend.title.align` argument of `theme()` is deprecated as of ggplot2
## 3.5.0.
## ℹ Please use theme(legend.title = element_text(hjust)) instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.