Data

Data yang digunakan dalam melakukan penelitian ini adalah dataset terkait faktor-faktor yang mempengaruhi kasus TBC berdasarkan 34 provinsi di Indonesia pada tahun 2023. Dataset bersumber dari Survei Kesehatan Indonesia 2023 dan terdiri dari satu variabel dependen dan lima variabel idependen dengan rincian:

  1. Persentase dari populasi yang menderita tuberculosis (Y)

  2. Persentase dari populasi rumah tangga yang memiliki akses terhadap fasilitas kesehatan dasar (x1)

  3. Persentase penduduk dengan jenis kelamin laki-laki (x2)

  4. Persentase penduduk miskin (x3)

  5. Rata-rata lama sekolah (tahun) (x4)

  6. Persentase tingkat pengangguran terbuka (x5)

Analisis dengan Menggunakan R

Install Package

Install package yang dibutuhkan dalam melakukan analisis pada R

library(readxl)
library(rgdal)
## Loading required package: sp
## Warning: package 'sp' was built under R version 4.3.3
## Please note that rgdal will be retired during October 2023,
## plan transition to sf/stars/terra functions using GDAL and PROJ
## at your earliest convenience.
## See https://r-spatial.org/r/2023/05/15/evolution4.html and https://github.com/r-spatial/evolution
## rgdal: version: 1.6-7, (SVN revision 1203)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 3.7.2, released 2023/09/05
## Path to GDAL shared files: C:/Users/ASUS/AppData/Local/R/win-library/4.3/rgdal/gdal
##  GDAL does not use iconv for recoding strings.
## GDAL binary built with GEOS: TRUE 
## Loaded PROJ runtime: Rel. 9.3.0, September 1st, 2023, [PJ_VERSION: 930]
## Path to PROJ shared files: C:/Users/ASUS/AppData/Local/R/win-library/4.3/rgdal/proj
## PROJ CDN enabled: FALSE
## Linking to sp version:2.1-1
## To mute warnings of possible GDAL/OSR exportToProj4() degradation,
## use options("rgdal_show_exportToProj4_warnings"="none") before loading sp or rgdal.
library(spdep)
## Warning: package 'spdep' was built under R version 4.3.3
## Loading required package: spData
## Warning: package 'spData' was built under R version 4.3.3
## Loading required package: sf
## Warning: package 'sf' was built under R version 4.3.3
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(raster)
## Warning: package 'raster' was built under R version 4.3.2
library(spatialreg)
## Warning: package 'spatialreg' was built under R version 4.3.3
## Loading required package: Matrix
## Warning: package 'Matrix' was built under R version 4.3.3
## 
## Attaching package: 'spatialreg'
## The following objects are masked from 'package:spdep':
## 
##     get.ClusterOption, get.coresOption, get.mcOption,
##     get.VerboseOption, get.ZeroPolicyOption, set.ClusterOption,
##     set.coresOption, set.mcOption, set.VerboseOption,
##     set.ZeroPolicyOption
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library(maps)
## Warning: package 'maps' was built under R version 4.3.3
library(raster)
library(maptools)
## Please note that 'maptools' will be retired during October 2023,
## plan transition at your earliest convenience (see
## https://r-spatial.org/r/2023/05/15/evolution4.html and earlier blogs
## for guidance);some functionality will be moved to 'sp'.
##  Checking rgeos availability: TRUE
## 
## Attaching package: 'maptools'
## The following object is masked from 'package:sp':
## 
##     sp2Mondrian
library(sp)
library(spdep)
library(gstat)
## Warning: package 'gstat' was built under R version 4.3.2
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.2
## 
## Attaching package: 'dplyr'
## 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(sf)
library(ggmap)
## Warning: package 'ggmap' was built under R version 4.3.3
## ℹ Google's Terms of Service: <https://mapsplatform.google.com>
##   Stadia Maps' Terms of Service: <https://stadiamaps.com/terms-of-service/>
##   OpenStreetMap's Tile Usage Policy: <https://operations.osmfoundation.org/policies/tiles/>
## ℹ Please cite ggmap if you use it! Use `citation("ggmap")` for details.
library(RColorBrewer)
library(spgwr)
## Warning: package 'spgwr' was built under R version 4.3.3
## NOTE: This package does not constitute approval of GWR
## as a method of spatial analysis; see example(gwr)
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.3.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.2
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:maptools':
## 
##     pointLabel
library(dplyr)

Input Data

Input data yang akan digunakan. Data diambil dari folder yang sama hingga akhir analisis yang sebelumnya dipanggil dengan fungsi setwd(). Setelahnya, input data (berbentuk CSV) dan panggil file yang memuat data spasial Indonesia dengan menggunakan fungsi st_read().

setwd("D:/Delta/Statistika/Semester 5/Spasial/UTS")
Data <- read_xlsx("DataUTS.xlsx")
Indo<-st_read("gadm41_IDN.gpkg", layer = "ADM_ADM_1")
## Reading layer `ADM_ADM_1' from data source 
##   `D:\Delta\Statistika\Semester 5\Spasial\UTS\gadm41_IDN.gpkg' 
##   using driver `GPKG'
## Simple feature collection with 34 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 95.00971 ymin: -11.00761 xmax: 141.0194 ymax: 6.076941
## Geodetic CRS:  WGS 84

Plot Sebaran Kasus TBC

Setelahnya, buat plot sebaran data persentase TBC untuk melihat provinsi mana yang tergolong rendah atau tinggi dalam persentase kasus TBC. Namun sebelum itu, gabungkan data spasial dan dataset TBC dengan menggunakan syntax berikut

Indo$id<-c(1:34)
Indo_sf<-st_as_sf(Indo)
Indo_merged <- Indo_sf %>%left_join(Data, by = "id")

Plot Sebaran Kasus TBC Berdasarkan Kuartil

Plot ini membagi provinsi mana yang memiliki kasus TBC tinggi, rendah, atau di antaranya berdasarkan nilai kuartilnya. Artinya, terdapat empat kategori untuk melihat pesebaran kasus TBC tersebut. Langkah pertama yang harus dilakukan adalah menentukan kuantil data persentase TBC dengan menggunakan fungsi summary().

summary(Data$Y)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0900  0.2025  0.2450  0.2671  0.3175  0.5800
breaks <- c(-Inf, 0.2025, 0.2450, 0.3175, Inf)
labels <- c("Very Low", "Low", "High","Very High")
Indo_merged$Y <- cut(Indo_merged$Y, 
                                     breaks = breaks, 
                                     labels = labels, 
                                     right = TRUE)

Selanjutnya, buat plot sebaran kasus TBC

ggplot() +
  geom_sf(data=Indo_merged, aes(fill = Y),color=NA) +
  theme_bw() +
  scale_fill_manual(values = c("Very Low" = "yellow", 
                               "Low" = "orange",
                               "High" = "red",
                               "Very High" = "red3"))+
  labs(fill = "Kasus TBC")+theme(legend.position = "right",
                             axis.text.x = element_blank(),  
                             axis.text.y = element_blank())+    
  labs(title = "",
       fill = "TBC")       

Berdasarkan plot tersebut, dapat kita lihat provinsi mana saja yang termasuk ke dalam masing-masing dari keempat kategorinya. Lebih rincinya, berikut daftar provinsi dari masing-masing kategori:

  1. Very Low : Sumatera Utara, Riau, Kepulauan Riau, Jambi, Bangka Belitung, Kalimantan Timur, Kalimantan Utara, Bali, dan Maluku (9)

  2. Low : Bengkulu, Sumatera Selatan, Lampung, DI Yogyakarta, Jawa Timur, Nusa Tenggara Barat, Kalimantan Tengah, dan Sulawesi Tengah (8)

  3. High : Aceh, Sumatera Barat, Jawa Tengah, Nusa Tenggara Timur, Kalimantan Barat, Sulawesi Selatan, Sulawesi Tenggara dan Maluku Utara (8)

  4. Very High : Banten, DKI Jakarta, Jawa Barat, Kalimantan Selatan, Sulawesi Barat, Gorontalo, Sulawesi Utara, Papua Barat, dan Papua (9)

Perbandingan Model OLS dan GWR

Selanjutnya, akan dilakukan perbandingan antara model OLS (Ordinary Least Square) dengan model GWR (Geographically Weighted Regression). Perbandingan dilakukan dengan tujuan memilih model mana yang terbaik terhadap faktor-faktor yang mempengaruhi Kasus TBC.

OLS

Regresi kuadrat terkecil biasa (Ordinary Least Squares - OLS) adalah teknik umum untuk mengestimasi koefisien persamaan regresi linier yang menggambarkan hubungan antara satu atau lebih variabel kuantitatif independen dengan variabel dependen (regresi linier sederhana atau berganda), yang sering kali dievaluasi dengan menggunakan R-Square.

Model OLS

Definisikan model OLS terlebih dahulu

model_ols = lm(Y ~ X1 + X2 + X3 + X4 + X5, data = Data)
summary(model_ols)
## 
## Call:
## lm(formula = Y ~ X1 + X2 + X3 + X4 + X5, data = Data)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.150075 -0.061987 -0.008175  0.058275  0.185434 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  0.424928   1.270443   0.334   0.7405  
## X1          -0.001931   0.002283  -0.846   0.4049  
## X2           0.003435   0.022749   0.151   0.8810  
## X3           0.004816   0.004915   0.980   0.3356  
## X4          -0.040727   0.024638  -1.653   0.1095  
## X5           0.031973   0.013938   2.294   0.0295 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.09409 on 28 degrees of freedom
## Multiple R-squared:  0.3154, Adjusted R-squared:  0.1932 
## F-statistic:  2.58 on 5 and 28 DF,  p-value: 0.04848

Dapat dilihat bahwa nilai R-Squared yang dihasilkan dari model tersebut adalah sebesar 0.3154

Asumsi

Melakukan uji asumsi terlebih dahulu kepada model OLS. P-Value yang diterapkan pada penelitian ini adalah 0.1

  1. uji normalitas residual

Uji normalitas residual dilakukan dengan menggunakan uji statistik Shapiro-Wilks. Kriterianya adalah apabila p-value > 0,1 , maka distribusi data memenuhi asumsi normalitas. Sebaliknya, jika p-value < 0,1 , maka distribusi data tidak memenuhi asumsi normalitas

shapiro.test(model_ols$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  model_ols$residuals
## W = 0.97123, p-value = 0.4961

Berdasarkan hasil tes tersebut, dapat disimpulkan bahwa residual dari model OLS memenuhi asumsi normalitas

  1. uji heteroskedastisitas

Uji heteroskedastisitas dilakukan pada model regresi untuk menguji apakah terdapat ketidaksamaan varians dari residual pada suatu pengamatan ke pengamatan lainnya. Uji heteroskedastisitas dilakukan dengan tujuan untuk menguji apakah terdapat ketidaksamaan variance maupun residual dari suatu pengamatan ke pengamatan lainnya. Uji heteroskedastisitas dilakukan dengan menggunakan uji statistik Breusch-Pagan dengan kriteria pengujian: - Jika p-value > 0,1 , tidak ada indikasi terjadinya heteroskedastisitas (homoskedastisitas) - Jika p-value < 0,1 , terdapat indikasi terjadinya heteroskedastisitas

bptest(model_ols)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_ols
## BP = 9.8576, df = 5, p-value = 0.07937

Berdasarkan hasil tes tersebut, dapat disimpulkan bahwa terdapat indikasi terjadinya heteroskedastisitas pada dataset faktor-faktor TBC di Indonesia.

  1. uji multikolinieritas

Uji multikolinearitas dilakukan untuk menguji apakah terdapat korelasi antar variabel bebas dalam model regresi. Multikolinearitas berarti adanya hubungan linier yang sempurna antara beberapa atau semua variabel yang menjelaskan model regresi. Pengecekan multikolinieritas dilakukan dengan melihat nilai variance inflation factor (VIF). Kriterianya adalah: - Jika nilai VIF < 10, tidak terjadi multikolinearitas - Jika nilai VIF > 10, terjadi multikolinearitas

vif <- vif(model_ols)
vif
##       X1       X2       X3       X4       X5 
## 2.651042 1.229748 2.419409 1.516646 1.458254

Berdasarkan hasil tes tersebut, dapat disimpulkan bahwa tidak terjadi multikolinieritas pada semua variabel independen dari dataset.

  1. uji autokorelasi

Uji autokorelasi yang dapat muncul karena adanya observasi yang berurutan sepanjang waktu dan saling berkaitan satu sama lainnya, di mana hal ini muncul karena residual tidak bebas pada satu observasi ke observasi lainnya. Pengujian autokorelasi spasial dilakukan dengan menggunakan uji Moran’s I. Kriteria pengujiannya adalah: - Jika p-value > 0.1, tidak ada indikasi autokorelasi spasial - Jika p-value < 0.1, terdapat indikasi autokorelasi spasial

centroid <- st_centroid(Indo)
## Warning: st_centroid assumes attributes are constant over geometries
CoordK <- st_coordinates(centroid)
nb = knn2nb(knearneigh(CoordK, k = 7))
listw = nb2listw(nb, style = "W")
moran.test(model_ols$residuals, listw)
## 
##  Moran I test under randomisation
## 
## data:  model_ols$residuals  
## weights: listw    
## 
## Moran I statistic standard deviate = 1.8902, p-value = 0.02937
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##       0.110858144      -0.030303030       0.005577296

Berdasarkan hasil tes tersebut, dapat disimpulkan bahwa terdapat indikasi adanya autokorelasi spasial pada residual model.

AIC

Akaike Information Criterion (AIC) merupakan metode analisis yang digunakan untuk memperoleh model faktor produksi yang terbaik dengan menggunakan estimasi maximum likelihood sebagai perhitungan yang sesuai.

AIC(model_ols)
## [1] -56.83091

Model GWR

Geographically Weighted Regression (GWR) adalah metode populer yang digunakan dalam bidang Ilmu Informasi Geografis yang mengeksplorasi analisis data spasial, dan memodelkan hubungan spasial. Ide dasar di balik GWR adalah untuk mengeksplorasi hubungan antara variabel dependen (Y), dan satu atau beberapa variabel independen (X), yang bervariasi di seluruh bentang alam.

indo_merged <- Indo_sf %>%left_join(Data, by = "id")

Perhitungan AICc dari masing-masing kernel

  1. Adaptive Bisquare
a_bisquare = gwr.sel(
  Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  gweight = gwr.bisquare,
  adapt = TRUE
)
## Adaptive q: 0.381966 CV score: 0.7535265 
## Adaptive q: 0.618034 CV score: 0.3233908 
## Adaptive q: 0.763932 CV score: 0.3155837 
## Adaptive q: 0.6967614 CV score: 0.2987429 
## Adaptive q: 0.6979067 CV score: 0.298681 
## Adaptive q: 0.7031919 CV score: 0.2984183 
## Adaptive q: 0.7263926 CV score: 0.3026092 
## Adaptive q: 0.7120538 CV score: 0.2994324 
## Adaptive q: 0.7065768 CV score: 0.2984191 
## Adaptive q: 0.7048661 CV score: 0.2983441 
## Adaptive q: 0.7049068 CV score: 0.2983424 
## Adaptive q: 0.7055447 CV score: 0.2983154 
## Adaptive q: 0.705939 CV score: 0.2983108 
## Adaptive q: 0.7058983 CV score: 0.298304 
## Adaptive q: 0.7057531 CV score: 0.2983067 
## Adaptive q: 0.7058428 CV score: 0.298303 
## Adaptive q: 0.7058021 CV score: 0.2983046 
## Adaptive q: 0.7058428 CV score: 0.298303
modelgwr1 = gwr( 
  Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  adapt = a_bisquare,
  gweight = gwr.bisquare,
  hatmatrix = TRUE,
  se.fit = TRUE
)
  1. Fixed Bisquare
f_bisquare = gwr.sel(
  Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  gweight = gwr.bisquare,
  adapt = F
)
## Bandwidth: 16.79511 CV score: NA
## Warning in optimize(gwr.cv.f, lower = beta1, upper = beta2, maximum = FALSE, :
## NA/Inf replaced by maximum positive value
## Bandwidth: 27.14792 CV score: 0.3453498 
## Bandwidth: 27.14788 CV score: 0.3453498 
## Bandwidth: 27.14784 CV score: 0.3453498 
## Bandwidth: 23.19345 CV score: 0.3375299 
## Bandwidth: 20.7495 CV score: 0.3249059 
## Bandwidth: 19.23906 CV score: 0.3072229 
## Bandwidth: 18.30555 CV score: 0.2963177 
## Bandwidth: 17.72861 CV score: 0.2932911 
## Bandwidth: 17.4015 CV score: 0.2930756 
## Bandwidth: 17.50013 CV score: 0.2930105 
## Bandwidth: 17.50797 CV score: 0.2930121 
## Bandwidth: 17.4915 CV score: 0.2930096 
## Bandwidth: 17.45713 CV score: 0.2930159 
## Bandwidth: 17.4866 CV score: 0.2930095 
## Bandwidth: 17.48714 CV score: 0.2930095 
## Bandwidth: 17.48721 CV score: 0.2930095 
## Bandwidth: 17.48725 CV score: 0.2930095 
## Bandwidth: 17.48721 CV score: 0.2930095
modelgwr2 = gwr( 
  Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  bandwidth = f_bisquare,
  gweight = gwr.bisquare,
  hatmatrix = TRUE,
  se.fit = TRUE
)
  1. Adaptive Gaussian
a_gauss = gwr.sel(
  Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  gweight = gwr.Gauss,
  adapt = TRUE
)
## Adaptive q: 0.381966 CV score: 0.3846214 
## Adaptive q: 0.618034 CV score: 0.4093971 
## Adaptive q: 0.236068 CV score: 0.3353551 
## Adaptive q: 0.145898 CV score: 0.323143 
## Adaptive q: 0.1119393 CV score: 0.3361402 
## Adaptive q: 0.1747612 CV score: 0.3169653 
## Adaptive q: 0.1791034 CV score: 0.3166568 
## Adaptive q: 0.1851828 CV score: 0.3163962 
## Adaptive q: 0.2046192 CV score: 0.3187294 
## Adaptive q: 0.1900684 CV score: 0.3166027 
## Adaptive q: 0.1849038 CV score: 0.3163948 
## Adaptive q: 0.1846961 CV score: 0.3163945 
## Adaptive q: 0.1847368 CV score: 0.3163945 
## Adaptive q: 0.1847774 CV score: 0.3163946 
## Adaptive q: 0.1847368 CV score: 0.3163945
modelgwr3 = gwr( 
  Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  adapt = a_gauss,
  gweight = gwr.Gauss,
  hatmatrix = TRUE,
  se.fit = TRUE
)
  1. Fixed Gaussian
f_gauss = gwr.sel(
  Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  gweight = gwr.Gauss
)
## Bandwidth: 16.79511 CV score: 0.3950566 
## Bandwidth: 27.14792 CV score: 0.4306578 
## Bandwidth: 10.39671 CV score: 0.3270416 
## Bandwidth: 6.442291 CV score: 0.274381 
## Bandwidth: 3.998323 CV score: 0.3981635 
## Bandwidth: 7.952747 CV score: 0.2936786 
## Bandwidth: 5.508778 CV score: 0.2739756 
## Bandwidth: 5.932542 CV score: 0.2713395 
## Bandwidth: 5.958905 CV score: 0.2713682 
## Bandwidth: 5.912177 CV score: 0.2713299 
## Bandwidth: 5.904558 CV score: 0.2713292 
## Bandwidth: 5.90504 CV score: 0.2713292 
## Bandwidth: 5.905085 CV score: 0.2713292 
## Bandwidth: 5.905126 CV score: 0.2713292 
## Bandwidth: 5.905085 CV score: 0.2713292
modelgwr4 = gwr( 
 Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  bandwidth = f_gauss,
  gweight = gwr.Gauss,
  hatmatrix = TRUE,
  se.fit = TRUE
)
  1. Adaptive Tricube
a_tricube = gwr.sel(
 Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  gweight = gwr.tricube,
  adapt = TRUE
)
## Adaptive q: 0.381966 CV score: 0.9089253 
## Adaptive q: 0.618034 CV score: 0.3473555 
## Adaptive q: 0.763932 CV score: 0.3230587 
## Adaptive q: 0.7053593 CV score: 0.3080984 
## Adaptive q: 0.7082156 CV score: 0.3084092 
## Adaptive q: 0.686112 CV score: 0.3092222 
## Adaptive q: 0.6980075 CV score: 0.3084948 
## Adaptive q: 0.7033746 CV score: 0.3082025 
## Adaptive q: 0.7051542 CV score: 0.308109 
## Adaptive q: 0.7064503 CV score: 0.3081515 
## Adaptive q: 0.7055913 CV score: 0.3080863 
## Adaptive q: 0.7059194 CV score: 0.3080765 
## Adaptive q: 0.7061406 CV score: 0.3081076 
## Adaptive q: 0.7057941 CV score: 0.3080759 
## Adaptive q: 0.7057534 CV score: 0.308078 
## Adaptive q: 0.7058348 CV score: 0.3080738 
## Adaptive q: 0.7058755 CV score: 0.3080717 
## Adaptive q: 0.7058755 CV score: 0.3080717
modelgwr5 = gwr( 
  Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  adapt = a_tricube,
  gweight = gwr.tricube,
  hatmatrix = TRUE,
  se.fit = TRUE
)
  1. Fixed Tricube
f_tricube = gwr.sel(
  Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  gweight = gwr.tricube
)
## Bandwidth: 16.79511 CV score: NA
## Warning in optimize(gwr.cv.f, lower = beta1, upper = beta2, maximum = FALSE, :
## NA/Inf replaced by maximum positive value
## Bandwidth: 27.14792 CV score: 0.3611692 
## Bandwidth: 27.14788 CV score: 0.3611692 
## Bandwidth: 27.14784 CV score: 0.3611691 
## Bandwidth: 23.19345 CV score: 0.3519103 
## Bandwidth: 20.7495 CV score: 0.3309302 
## Bandwidth: 19.23906 CV score: 0.3119279 
## Bandwidth: 18.30555 CV score: 0.3059693 
## Bandwidth: 17.51375 CV score: 0.3063297 
## Bandwidth: 17.96708 CV score: 0.3056747 
## Bandwidth: 17.98749 CV score: 0.3056711 
## Bandwidth: 18.00375 CV score: 0.3056699 
## Bandwidth: 18.00955 CV score: 0.3056698 
## Bandwidth: 18.00911 CV score: 0.3056698 
## Bandwidth: 18.00907 CV score: 0.3056698 
## Bandwidth: 18.00903 CV score: 0.3056698 
## Bandwidth: 18.00907 CV score: 0.3056698
modelgwr6 = gwr( 
  Y ~ X1 + X2 + X3 + X4 + X5,
  data = indo_merged,
  coords = CoordK,
  bandwidth = f_tricube,
  gweight = gwr.tricube,
  hatmatrix = TRUE,
  se.fit = TRUE
)

Pemilihan Model berdasarkan AICc

Model yang dipilih adalah model kernel yang memiliki nilai AICc terkecil

aicc_results = data.frame(Bobot = c("Adaptive Bisquare",
                                    "Fixed Bisquare",
                                    "Adaptive Gaussian",
                                    "Fixed Gaussian",                         
                                    "Adaptive Tricube",
                                    "Fixed Tricube"),
                          Bandwidth = c( 0.7058428,
                                         17.48721,
                                         0.1847368,
                                         5.905085,
                                         0.7058755,
                                         18.00907),
                          AICc = c(modelgwr1$results$AICc,
                                   modelgwr2$results$AICc,
                                   modelgwr3$results$AICc,
                                   modelgwr4$results$AICc,
                                   modelgwr5$results$AICc,
                                   modelgwr6$results$AICc))

aicc_results
##               Bobot  Bandwidth      AICc
## 1 Adaptive Bisquare  0.7058428 -32.19715
## 2    Fixed Bisquare 17.4872100 -38.48060
## 3 Adaptive Gaussian  0.1847368 -27.19524
## 4    Fixed Gaussian  5.9050850 -24.63650
## 5  Adaptive Tricube  0.7058755 -35.00996
## 6     Fixed Tricube 18.0090700 -41.88594

Didapatkan model terbaik untuk model GWR adalah model dengan kernel Fixed Tricube karena memiliki nilai AICc terkecil

Model GWR dengan kernel Fixed Gaussian

modelgwr <- modelgwr6
modelgwr
## Call:
## gwr(formula = Y ~ X1 + X2 + X3 + X4 + X5, data = indo_merged, 
##     coords = CoordK, bandwidth = f_tricube, gweight = gwr.tricube, 
##     hatmatrix = TRUE, se.fit = TRUE)
## Kernel function: gwr.tricube 
## Fixed bandwidth: 18.00907 
## Summary of GWR coefficient estimates at data points:
##                     Min.     1st Qu.      Median     3rd Qu.        Max.
## X.Intercept. -3.27541774  0.83360587  1.67473840  2.39329726  3.04476954
## X1           -0.00340709 -0.00222697 -0.00104037  0.00081629  0.00416253
## X2           -0.05469217 -0.03768429 -0.02602648 -0.00742725  0.08604438
## X3           -0.00103480  0.00052671  0.00136412  0.00367693  0.00976476
## X4           -0.14399429 -0.04869908 -0.02808657 -0.02232338 -0.01487079
## X5            0.01761787  0.02796828  0.04086955  0.04764940  0.05422914
##               Global
## X.Intercept.  0.4249
## X1           -0.0019
## X2            0.0034
## X3            0.0048
## X4           -0.0407
## X5            0.0320
## Number of data points: 34 
## Effective number of parameters (residual: 2traceS - traceS'S): 14.51536 
## Effective degrees of freedom (residual: 2traceS - traceS'S): 19.48464 
## Sigma (residual: 2traceS - traceS'S): 0.07939867 
## Effective number of parameters (model: traceS): 12.8125 
## Effective degrees of freedom (model: traceS): 21.1875 
## Sigma (model: traceS): 0.07614118 
## Sigma (ML): 0.0601063 
## AICc (GWR p. 61, eq 2.33; p. 96, eq. 4.21): -45.75259 
## AIC (GWR p. 96, eq. 4.22): -81.89124 
## Residual sum of squares: 0.1228341 
## Quasi-global R2: 0.6607786

Perbandingan AIC

Karena nilai AIC dari model GWR (fixed tricube) lebih kecil daripada nilai AIC model OLS (-81 < -54), maka model GWR yang dipilih.

Uji Asumsi Model GWR

Normalitas Residu

residual_gwr = modelgwr$SDF$gwr.e
shapiro.test(residual_gwr)
## 
##  Shapiro-Wilk normality test
## 
## data:  residual_gwr
## W = 0.96969, p-value = 0.4531

Autokorelasi Spasial

nb = knn2nb(knearneigh(CoordK, k = 7))
listw = nb2listw(nb, style = "W")
moran.test(residual_gwr, listw)
## 
##  Moran I test under randomisation
## 
## data:  residual_gwr  
## weights: listw    
## 
## Moran I statistic standard deviate = 0.62751, p-value = 0.2652
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##       0.015283528      -0.030303030       0.005277521

Homoskedastisitas

bptest(residual_gwr ~ modelgwr$SDF$X1 + modelgwr$SDF$X2 + modelgwr$SDF$X3 + modelgwr$SDF$X4 + modelgwr$SDF$X5)
## 
##  studentized Breusch-Pagan test
## 
## data:  residual_gwr ~ modelgwr$SDF$X1 + modelgwr$SDF$X2 + modelgwr$SDF$X3 +     modelgwr$SDF$X4 + modelgwr$SDF$X5
## BP = 3.9564, df = 5, p-value = 0.5557

Uji Signifikansi Parsial Lokal

Dataframe untuk hasil signifikansi

Buat terlebih dahulu dataframe yang berisikan hasil uji signifikansi parsial lokal

gwr_results <- data.frame(
  id = indo_merged$id,
  intercept = modelgwr$SDF$`(Intercept)`,          
  x1 = modelgwr$SDF$X1,                             
  x2 = modelgwr$SDF$X2,
  x3 = modelgwr$SDF$X3,                             
  x4 = modelgwr$SDF$X4,
  x5 = modelgwr$SDF$X5,                             
  intercept_se = modelgwr$SDF$`(Intercept)_se`,    
  x1_se = modelgwr$SDF$X1_se,                       
  x2_se = modelgwr$SDF$X2_se,
  x3_se = modelgwr$SDF$X3_se,                       
  x4_se = modelgwr$SDF$X4_se,
  x5_se = modelgwr$SDF$X5_se
)

Uji signifikansi parsial lokal terhadap intercept

num_params <- length(coef(modelgwr))

gwr_results$t_intercept <- gwr_results$intercept / gwr_results$intercept_se
gwr_results$p_intercept <- 2 * (1 - pt(abs(gwr_results$t_intercept), df = nrow(indo_merged) - num_params))
gwr_results$significant_intercept <- ifelse(gwr_results$p_intercept < 0.1, "Significant", "Not Significant")

Uji signifikansi parsial lokal terhadap x1

gwr_results$t_x1 <- gwr_results$x1 / gwr_results$x1_se
gwr_results$p_x1 <- 2 * (1 - pt(abs(gwr_results$t_x1), df = nrow(indo_merged) - num_params))
gwr_results$significant_x1 <- ifelse(gwr_results$p_x1 < 0.1, "Significant", "Not Significant")

Uji signifikansi parsial lokal terhadap x2

gwr_results$t_x2 <- gwr_results$x2 / gwr_results$x2_se
gwr_results$p_x2 <- 2 * (1 - pt(abs(gwr_results$t_x2), df = nrow(indo_merged) - num_params))
gwr_results$significant_x2 <- ifelse(gwr_results$p_x2 < 0.1, "Significant", "Not Significant")

Uji signifikansi parsial lokal terhadap x3

gwr_results$t_x3 <- gwr_results$x2 / gwr_results$x3_se
gwr_results$p_x3 <- 2 * (1 - pt(abs(gwr_results$t_x3), df = nrow(indo_merged) - num_params))
gwr_results$significant_x3 <- ifelse(gwr_results$p_x3 < 0.1, "Significant", "Not Significant")

Uji signifikansi parsial lokal terhadap x4

gwr_results$t_x4 <- gwr_results$x2 / gwr_results$x4_se
gwr_results$p_x4 <- 2 * (1 - pt(abs(gwr_results$t_x4), df = nrow(indo_merged) - num_params))
gwr_results$significant_x4 <- ifelse(gwr_results$p_x4 < 0.1, "Significant", "Not Significant")

Uji signifikansi parsial lokal terhadap x5

gwr_results$t_x5 <- gwr_results$x2 / gwr_results$x5_se
gwr_results$p_x5 <- 2 * (1 - pt(abs(gwr_results$t_x5), df = nrow(indo_merged) - num_params))
gwr_results$significant_x5 <- ifelse(gwr_results$p_x5 < 0.1, "Significant", "Not Significant")

Hasil dataframe uji signifikansi parsial lokal

gwr_results
##    id   intercept            x1           x2            x3          x4
## 1   1  3.04476954  2.074801e-03 -0.054692169  9.764758e-03 -0.04622169
## 2   2  1.81694701 -2.256259e-03 -0.027727643 -2.160992e-04 -0.01496338
## 3   3  2.44178469 -2.414307e-03 -0.038384947 -2.659116e-04 -0.02797437
## 4   4  2.41408944 -2.864948e-03 -0.038995139  5.059939e-04 -0.02157986
## 5   5  1.33646241 -7.414869e-04 -0.022773305  3.802004e-03 -0.01899066
## 6   6  0.60724137  2.044832e-03 -0.001157843  4.558955e-03 -0.06242383
## 7   7  2.54916650 -3.121855e-03 -0.040704081 -1.230742e-05 -0.02288239
## 8   8  1.47438281 -8.496039e-04 -0.024325310  3.170445e-03 -0.02264188
## 9   9  2.62222172 -3.407090e-03 -0.041868770 -2.505844e-04 -0.02130490
## 10 10  2.53202626 -3.258876e-03 -0.040283301 -5.369507e-04 -0.01844732
## 11 11  2.18909685 -2.706480e-03 -0.034747383 -8.612779e-05 -0.01487079
## 12 12  2.69327673 -2.745963e-03 -0.041624033  5.888612e-04 -0.02847419
## 13 13  2.07034569 -1.677669e-03 -0.031955504  9.848157e-04 -0.02221722
## 14 14  2.33092072 -2.139089e-03 -0.036411777  1.369067e-03 -0.02322743
## 15 15  2.15243749 -1.231129e-03 -0.032429603  9.785948e-04 -0.02819877
## 16 16  2.51145061 -1.342081e-03 -0.038108462  7.289345e-04 -0.03102959
## 17 17  2.08542826 -1.374029e-03 -0.032931690  6.724307e-04 -0.02949615
## 18 18  2.14406621 -2.084894e-03 -0.034806972  9.351173e-04 -0.02290303
## 19 19 -1.95644107  1.866615e-03  0.062457803  1.884758e-03 -0.13617522
## 20 20 -0.96751358  2.918116e-03  0.041310578  5.903456e-03 -0.14399429
## 21 21  1.53252980 -1.802641e-03 -0.020612672 -1.034799e-03 -0.02361325
## 22 22 -0.22489119  3.335781e-04  0.018399725  1.576003e-03 -0.06314198
## 23 23 -3.27541774  4.162530e-03  0.086044376  4.361429e-03 -0.14264670
## 24 24 -2.29569731  1.645232e-03  0.068788653  8.993351e-04 -0.12856209
## 25 25  1.20070490 -5.285354e-04 -0.019367945  4.947350e-03 -0.02533680
## 26 26  1.39110769 -2.856889e-04 -0.017722628  1.359168e-03 -0.03505549
## 27 27  1.10494767 -4.416722e-05 -0.011700513  1.590557e-03 -0.03941684
## 28 28  0.82269223  1.069011e-03 -0.006002828  3.301696e-03 -0.04952488
## 29 29  0.35326276  9.771971e-04  0.004552208  3.299897e-03 -0.05674733
## 30 30  0.07481988  2.675048e-03  0.013091535  5.949667e-03 -0.09350313
## 31 31  0.86634677 -2.085046e-04 -0.014538022  6.497922e-03 -0.02200522
## 32 32  1.90316843 -1.503035e-03 -0.031000329  1.431033e-03 -0.02357371
## 33 33  0.97084206  2.925852e-04 -0.015531525  8.612121e-03 -0.03275466
## 34 34  2.49139087 -3.309788e-03 -0.039725895 -6.942603e-04 -0.01680127
##            x5 intercept_se       x1_se      x2_se       x3_se      x4_se
## 1  0.02675493     5.144307 0.004646366 0.09641002 0.009146679 0.04595923
## 2  0.04002002     1.428446 0.002324088 0.02527292 0.006397122 0.02367927
## 3  0.04323828     1.681828 0.003474262 0.02805974 0.006420601 0.02426162
## 4  0.04949561     1.839999 0.003403898 0.03129522 0.006787773 0.02501517
## 5  0.05303638     2.239608 0.003715450 0.03801578 0.007024364 0.02764425
## 6  0.02216369     1.360304 0.002736658 0.02641415 0.005396445 0.03388854
## 7  0.04765430     1.720958 0.003190689 0.02939490 0.006708964 0.02448466
## 8  0.05068830     2.102066 0.003713746 0.03542926 0.006977792 0.02706482
## 9  0.04763472     1.649929 0.002890042 0.02854214 0.006721629 0.02429807
## 10 0.04424079     1.449003 0.002323570 0.02559265 0.006434812 0.02360233
## 11 0.04219675     1.405423 0.002248863 0.02490022 0.006362820 0.02357492
## 12 0.03316389     1.421239 0.002556781 0.02469212 0.005965813 0.02312041
## 13 0.03278097     1.385241 0.002218931 0.02462865 0.006015647 0.02292221
## 14 0.03345339     1.371586 0.002167147 0.02429138 0.006064421 0.02311244
## 15 0.02473312     1.420604 0.002306020 0.02524404 0.006173263 0.02358422
## 16 0.01761787     1.498822 0.002457819 0.02645322 0.006687188 0.02531152
## 17 0.04200893     1.769882 0.003656309 0.02937949 0.006655025 0.02548086
## 18 0.04915149     1.897875 0.003573220 0.03198405 0.006692349 0.02533550
## 19 0.04171909     1.442633 0.003188882 0.02791698 0.007343259 0.05736700
## 20 0.04761579     1.364377 0.003077478 0.02616158 0.006006149 0.05540966
## 21 0.03526649     1.443409 0.002380760 0.02577863 0.006118626 0.02356288
## 22 0.02370633     1.347179 0.002610693 0.02568968 0.005451278 0.03023731
## 23 0.03543611     3.708547 0.008547123 0.06717981 0.014591745 0.12230875
## 24 0.03639535     1.723879 0.003723004 0.03270385 0.009117425 0.06550311
## 25 0.05078233     2.295081 0.003814959 0.03908151 0.007423604 0.02872342
## 26 0.02529151     1.283515 0.002407112 0.02354459 0.005267774 0.02379234
## 27 0.02529150     1.260547 0.002436724 0.02332549 0.005158019 0.02447415
## 28 0.02136407     1.290909 0.002569591 0.02444087 0.005220247 0.02799948
## 29 0.02303066     1.264649 0.002567616 0.02393966 0.005169003 0.02818128
## 30 0.03160831     1.377570 0.002888362 0.02691155 0.005572904 0.04267887
## 31 0.05422914     2.665591 0.003859030 0.04605172 0.007750240 0.03070853
## 32 0.04896590     1.927098 0.003612826 0.03236568 0.006686718 0.02568949
## 33 0.04999381     3.882084 0.004116450 0.07041615 0.008402127 0.03651117
## 34 0.04511776     1.458040 0.002313273 0.02581009 0.006467522 0.02370734
##         x5_se t_intercept p_intercept significant_intercept        t_x1
## 1  0.03256918  0.59187162  0.55785204       Not Significant  0.44654272
## 2  0.01305181  1.27197450  0.21201367       Not Significant -0.97081444
## 3  0.01310603  1.45186323  0.15570561       Not Significant -0.69491239
## 4  0.01351317  1.31200600  0.19830773       Not Significant -0.84166670
## 5  0.01522355  0.59673945  0.55463439       Not Significant -0.19956851
## 6  0.01830429  0.44640133  0.65813768       Not Significant  0.74720043
## 7  0.01331942  1.48124854  0.14774922       Not Significant -0.97842669
## 8  0.01538346  0.70139712  0.48782861       Not Significant -0.22877278
## 9  0.01330698  1.58929376  0.12125109       Not Significant -1.17890644
## 10 0.01309923  1.74742709  0.08959102           Significant -1.40252959
## 11 0.01310850  1.55760746  0.12858698       Not Significant -1.20348824
## 12 0.01256706  1.89501979  0.06661896           Significant -1.07399206
## 13 0.01253764  1.49457463  0.14424960       Not Significant -0.75607098
## 14 0.01263818  1.69943451  0.09837054           Significant -0.98705307
## 15 0.01293346  1.51515646  0.13897527       Not Significant -0.53387630
## 16 0.01405015  1.67561629  0.10298759       Not Significant -0.54604541
## 17 0.01449111  1.17828643  0.24686363       Not Significant -0.37579672
## 18 0.01365824  1.12971960  0.26650178       Not Significant -0.58347769
## 19 0.03027563 -1.35616006  0.18398687       Not Significant  0.58535072
## 20 0.02900535 -0.70912462  0.48308174       Not Significant  0.94821656
## 21 0.01288147  1.06174298  0.29583620       Not Significant -0.75717013
## 22 0.01618176 -0.16693492  0.86841014       Not Significant  0.12777378
## 23 0.05483181 -0.88320786  0.38332647       Not Significant  0.48700946
## 24 0.03415686 -1.33170472  0.19181669       Not Significant  0.44190975
## 25 0.01724259  0.52316446  0.60425296       Not Significant -0.13854287
## 26 0.01342192  1.08382632  0.28606801       Not Significant -0.11868537
## 27 0.01383433  0.87656230  0.38687591       Not Significant -0.01812566
## 28 0.01581194  0.63729681  0.52819997       Not Significant  0.41602382
## 29 0.01580340  0.27933659  0.78167877       Not Significant  0.38058533
## 30 0.02226909  0.05431293  0.95700374       Not Significant  0.92614707
## 31 0.01783057  0.32501112  0.74716416       Not Significant -0.05403031
## 32 0.01407521  0.98758283  0.33033337       Not Significant -0.41602752
## 33 0.02200988  0.25008270  0.80402833       Not Significant  0.07107707
## 34 0.01317012  1.70872561  0.09661692           Significant -1.43078093
##         p_x1  significant_x1        t_x2       p_x2  significant_x2       t_x3
## 1  0.6580366 Not Significant -0.56728718 0.57424589 Not Significant -5.9794564
## 2  0.3384968 Not Significant -1.09712851 0.28029502 Not Significant -4.3343936
## 3  0.4918323 Not Significant -1.36797213 0.18029464 Not Significant -5.9784043
## 4  0.4058558 Not Significant -1.24604125 0.22126702 Not Significant -5.7449090
## 5  0.8430068 Not Significant -0.59904876 0.55311126 Not Significant -3.2420450
## 6  0.4600791 Not Significant -0.04383418 0.96529301 Not Significant -0.2145565
## 7  0.3347743 Not Significant -1.38473299 0.17515451 Not Significant -6.0671189
## 8  0.8204160 Not Significant -0.68658820 0.49699850 Not Significant -3.4861044
## 9  0.2466200 Not Significant -1.46691089 0.15158983 Not Significant -6.2289620
## 10 0.1698225 Not Significant -1.57401835 0.12474379 Not Significant -6.2602146
## 11 0.2371003 Not Significant -1.39546511 0.17192370 Not Significant -5.4610034
## 12 0.2903896 Not Significant -1.68572140 0.10100722 Not Significant -6.9770937
## 13 0.4548135 Not Significant -1.29749292 0.20319642 Not Significant -5.3120645
## 14 0.3305892 Not Significant -1.49895883 0.14311286 Not Significant -6.0041640
## 15 0.5969006 Not Significant -1.28464417 0.20760051 Not Significant -5.2532354
## 16 0.5886001 Not Significant -1.44059821 0.15884438 Not Significant -5.6987280
## 17 0.7094026 Not Significant -1.12090766 0.27018218 Not Significant -4.9483948
## 18 0.5634226 Not Significant -1.08826043 0.28413440 Not Significant -5.2010099
## 19 0.5621772 Not Significant  2.23726926 0.03193187     Significant  8.5054606
## 20 0.3497106 Not Significant  1.57905527 0.12358316 Not Significant  6.8780469
## 21 0.4541635 Not Significant -0.79960300 0.42949210 Not Significant -3.3688400
## 22 0.8990808 Not Significant  0.71623021 0.47874012 Not Significant  3.3753049
## 23 0.6293767 Not Significant  1.28080700 0.20892968 Not Significant  5.8967847
## 24 0.6613526 Not Significant  2.10338087 0.04290753     Significant  7.5447457
## 25 0.8906287 Not Significant -0.49557823 0.62338017 Not Significant -2.6089681
## 26 0.9062231 Not Significant -0.75272619 0.45679483 Not Significant -3.3643487
## 27 0.9856446 Not Significant -0.50161917 0.61916823 Not Significant -2.2684122
## 28 0.6800069 Not Significant -0.24560612 0.80746371 Not Significant -1.1499126
## 29 0.7058785 Not Significant  0.19015343 0.85031969 Not Significant  0.8806743
## 30 0.3608972 Not Significant  0.48646522 0.62975846 Not Significant  2.3491406
## 31 0.9572272 Not Significant -0.31568904 0.75416827 Not Significant -1.8758159
## 32 0.6800043 Not Significant -0.95781478 0.34491788 Not Significant -4.6361051
## 33 0.9437529 Not Significant -0.22056766 0.82674824 Not Significant -1.8485230
## 34 0.1616204 Not Significant -1.53916160 0.13302087 Not Significant -6.1423670
##            p_x3  significant_x3       t_x4       p_x4  significant_x4
## 1  9.157441e-07     Significant -1.1900149 0.24228393 Not Significant
## 2  1.229782e-04     Significant -1.1709668 0.24975371 Not Significant
## 3  9.186277e-07     Significant -1.5821263 0.12287985 Not Significant
## 4  1.847234e-06     Significant -1.5588597 0.12829038 Not Significant
## 5  2.658744e-03     Significant -0.8237990 0.41579530 Not Significant
## 6  8.313948e-01 Not Significant -0.0341662 0.97294441 Not Significant
## 7  7.048134e-07     Significant -1.6624322 0.10561976 Not Significant
## 8  1.372327e-03     Significant -0.8987797 0.37509137 Not Significant
## 9  4.350549e-07     Significant -1.7231318 0.09394955     Significant
## 10 3.964132e-07     Significant -1.7067508 0.09698745     Significant
## 11 4.324634e-06     Significant -1.4739129 0.14970440 Not Significant
## 12 4.778692e-08     Significant -1.8003153 0.08068874     Significant
## 13 6.756653e-06     Significant -1.3940845 0.17233669 Not Significant
## 14 8.505792e-07     Significant -1.5754190 0.12442016 Not Significant
## 15 8.058033e-06     Significant -1.3750549 0.17810843 Not Significant
## 16 2.121247e-06     Significant -1.5055775 0.14141038 Not Significant
## 17 2.003580e-05     Significant -1.2924087 0.20493053 Not Significant
## 18 9.421240e-06     Significant -1.3738421 0.17848131 Not Significant
## 19 6.198095e-10     Significant  1.0887411 0.28392537 Not Significant
## 20 6.386016e-08     Significant  0.7455482 0.46106379 Not Significant
## 21 1.889900e-03     Significant -0.8747944 0.38782369 Not Significant
## 22 1.857045e-03     Significant  0.6085107 0.54689297 Not Significant
## 23 1.172497e-06     Significant  0.7035014 0.48653338 Not Significant
## 24 9.234826e-09     Significant  1.0501585 0.30105265 Not Significant
## 25 1.340127e-02     Significant -0.6742911 0.50468541 Not Significant
## 26 1.913052e-03     Significant -0.7448880 0.46145765 Not Significant
## 27 2.977036e-02     Significant -0.4780764 0.63565548 Not Significant
## 28 2.582042e-01 Not Significant -0.2143907 0.83152305 Not Significant
## 29 3.846772e-01 Not Significant  0.1615331 0.87262965 Not Significant
## 30 2.476633e-02     Significant  0.3067451 0.76090816 Not Significant
## 31 6.928821e-02     Significant -0.4734196 0.63893952 Not Significant
## 32 5.065047e-05     Significant -1.2067319 0.23586463 Not Significant
## 33 7.323928e-02     Significant -0.4253910 0.67323219 Not Significant
## 34 5.631023e-07     Significant -1.6756793 0.10297514 Not Significant
##           t_x5        p_x5  significant_x5
## 1  -1.67926130 0.102269569 Not Significant
## 2  -2.12442822 0.040986698     Significant
## 3  -2.92880126 0.006035800     Significant
## 4  -2.88571442 0.006737101     Significant
## 5  -1.49592631 0.143898367 Not Significant
## 6  -0.06325526 0.949933669 Not Significant
## 7  -3.05599421 0.004345169     Significant
## 8  -1.58126417 0.123076957 Not Significant
## 9  -3.14637688 0.003427841     Significant
## 10 -3.07524138 0.004132202     Significant
## 11 -2.65075282 0.012105211     Significant
## 12 -3.31215265 0.002202846     Significant
## 13 -2.54876527 0.015494748     Significant
## 14 -2.88109337 0.006816698     Significant
## 15 -2.50741941 0.017102291     Significant
## 16 -2.71231778 0.010405767     Significant
## 17 -2.27254408 0.029493672     Significant
## 18 -2.54842229 0.015507492     Significant
## 19  2.06297270 0.046819052     Significant
## 20  1.42423998 0.163491060 Not Significant
## 21 -1.60018058 0.118810921 Not Significant
## 22  1.13706581 0.263461205 Not Significant
## 23  1.56924187 0.125852601 Not Significant
## 24  2.01390422 0.051987442     Significant
## 25 -1.12326199 0.269195321 Not Significant
## 26 -1.32042386 0.195513657 Not Significant
## 27 -0.84575910 0.403600260 Not Significant
## 28 -0.37963907 0.706574371 Not Significant
## 29  0.28805249 0.775055257 Not Significant
## 30  0.58787930 0.560498029 Not Significant
## 31 -0.81534244 0.420551466 Not Significant
## 32 -2.20247700 0.034511928     Significant
## 33 -0.70566156 0.485205788 Not Significant
## 34 -3.01636489 0.004816801     Significant

Berdasarkan hasil tersebut, dapat disimpulkan bahwa semua koefisien dari masing-masing provinsi pada variabel X1 tidak ada yang signifikan. Artinya, variabel X1 (Persentase dari populasi rumah tangga yang memiliki akses terhadap fasilitas kesehatan dasar) tidak memberikan kontribusi yang kuat untuk menjelaskan variasi pada persentase kasus TBC di semua provinsi di Indonesia. Selain itu, terdapat tiga provinsi yang sama sekali tidak menunjukkan signifikansi terhadap semua variabel faktor kasus TBC, yakni Gorontalo, Sulawesi Tengah, dan Sulawesi Tenggara.

Variabel X3 memiliki jumlah koefisien yang signifikan terbanyak, berada pada 31 dari 34 provinsi di Indonesia. Hal ini memberi arti bahwa variabel X3 (Persentase penduduk miskin) memberikan pengaruh yang kuat dalam menjelaskan variasi pada persentase kasus TBC di hampir semua wilayah di Indonesia.

Gabungkan dataframe gwr_results dengan dataframe indo_merged dengan menggunakan syntax berikut

indo_combined <- indo_merged %>% left_join(gwr_results, by = "id")

Pemetaan uji signifikansi parsial lokal

x1

ggplot(data = indo_combined) +
  geom_sf(aes(fill = significant_x1)) +
  scale_fill_manual(values = c("Significant" = "green", "Not Significant" = "red")) +
  labs(title = "Signifikansi x1 pada Model GWR") +
  theme_minimal()

x2

ggplot(data = indo_combined) +
  geom_sf(aes(fill = significant_x2)) +
  scale_fill_manual(values = c("Significant" = "green", "Not Significant" = "red")) +
  labs(title = "Signifikansi x2 pada Model GWR") +
  theme_minimal()

x3

ggplot(data = indo_combined) +
  geom_sf(aes(fill = significant_x3)) +
  scale_fill_manual(values = c("Significant" = "green", "Not Significant" = "red")) +
  labs(title = "Signifikansi x3 pada Model GWR") +
  theme_minimal()

x4

ggplot(data = indo_combined) +
  geom_sf(aes(fill = significant_x4)) +
  scale_fill_manual(values = c("Significant" = "green", "Not Significant" = "red")) +
  labs(title = "Signifikansi x4 pada Model GWR") +
  theme_minimal()

x5

ggplot(data = indo_combined) +
  geom_sf(aes(fill = significant_x5)) +
  scale_fill_manual(values = c("Significant" = "green", "Not Significant" = "red")) +
  labs(title = "Signifikansi x5 pada Model GWR") +
  theme_minimal()

Pemetaan Koefisien Lokal

koeflokal <- as.data.frame(modelgwr$SDF)
indokoef_sf <- st_as_sf(indo_merged, coords = CoordK, crs = 4326)
Mapkoef <- cbind(indokoef_sf, koeflokal)

Untuk x1 (Persentase dari populasi rumah tangga yang memiliki akses terhadap fasilitas kesehatan dasar)

ggplot(Mapkoef) +
  geom_sf(aes(fill = X1.1), color = NA) +
  scale_fill_gradient(low = "yellow", high = "red",
                       limits = c(min(Mapkoef$X1.1), max(Mapkoef$X1.1)),
                       name = "Koefisien Lokal") +
  labs(title = "Peta Koefisien Lokal untuk variabel Persentase dari populasi rumah tangga yang memiliki akses terhadap fasilitas kesehatan dasar  (x1)") +
  theme_minimal() +
  coord_sf()

Untuk x2 (Persentase penduduk dengan jenis kelamin laki-laki)

ggplot(Mapkoef) +
  geom_sf(aes(fill = X2.1), color = NA) +
  scale_fill_gradient(low = "yellow", high = "red",
                      limits = c(min(Mapkoef$X2.1), max(Mapkoef$X2.1)),
                      name = "Koefisien Lokal") +
  labs(title = "Peta Koefisien Lokal untuk variabel Persentase penduduk dengan jenis kelamin laki-laki  (x2)") +
  theme_minimal() +
  coord_sf()

Untuk x3 (Persentase penduduk miskin)

ggplot(Mapkoef) +
  geom_sf(aes(fill = X3.1), color = NA) +
  scale_fill_gradient(low = "yellow", high = "red",
                      limits = c(min(Mapkoef$X3.1), max(Mapkoef$X3.1)),
                      name = "Koefisien Lokal") +
  labs(title = "Peta Koefisien Lokal untuk variabel Persentase penduduk miskin (x3)") +
  theme_minimal() +
  coord_sf()

Untuk x4 (Rata-rata lama sekolah (tahun))

ggplot(Mapkoef) +
  geom_sf(aes(fill = X4.1), color = NA) +
  scale_fill_gradient(low = "yellow", high = "red",
                      limits = c(min(Mapkoef$X4.1), max(Mapkoef$X4.1)),
                      name = "Koefisien Lokal") +
  labs(title = "Peta Koefisien Lokal untuk variabel Rata-rata lama sekolah (tahun) (x4)") +
  theme_minimal() +
  coord_sf()

Untuk x5 (Persentase tingkat pengangguran terbuka)

ggplot(Mapkoef) +
  geom_sf(aes(fill = X5.1), color = NA) +
  scale_fill_gradient(low = "yellow", high = "red",
                      limits = c(min(Mapkoef$X5.1), max(Mapkoef$X5.1)),
                      name = "Koefisien Lokal") +
  labs(title = "Peta Koefisien Lokal untuk variabel Persentase tingkat pengangguran terbuka (x5)") +
  theme_minimal() +
  coord_sf()

Kesimpulan

Berdasarkan penelitian yang telah dilakukan, didapatkan model dari regresi global dalam bentuk:

Y=0.424928-0.001931X_1+0.003435X_2+0.004816X_3-0.040727X_4+0.031973X_5

Artinya, setiap penurunan pada Persentase dari populasi rumah tangga yang memiliki akses terhadap fasilitas kesehatan dasar dan Rata-rata lama sekolah, terjadi kenaikan pada persentase kasus TBC. Selain itu, penambahan persentase kasus TBC akan bertambah jika Persentase penduduk dengan jenis kelamin laki-laki, Persentase penduduk miskin, dan Persentase tingkat pengangguran terbuka meningkat. Hal-hal tersebut sejalan dengan penelitian-penelitian sebelumnya yang mengungkapkan pengaruh sosio-ekonomi terhadap kasus TBC.

Pemilihan model terbaik dilakukan dengan menggunakan nilai AIC terkecil. Karena nilai AIC pada model GWR dengan kernel fixed tricube lebih kecil daripada nilai AIC yang dihasilkan oleh model OLS, Pertimbangan menggunakan model GWR dengan kernel fixed tricube dilakukan. Setelah melakukan pengujian parsial pada model GWR, didapatkan bahwa variabel X1 (Persentase dari populasi rumah tangga yang memiliki akses terhadap fasilitas kesehatan dasar) tidak memberikan kontribusi yang kuat untuk menjelaskan variasi pada persentase kasus TBC di semua provinsi di Indonesia. Hal ini sebelumnya dibuktikan dengan variasi dari estimasi parameter model GWR di variabel tersebut yang kecil. Selain itu, tiga provinsi menunjukkan koefisien yang tidak signifikansi terhadap semua variabel faktor kasus TBC, yakni Gorontalo, Sulawesi Tengah, dan Sulawesi Tenggara. Sebaliknya, variabel X3 (Persentase penduduk miskin) memberikan pengaruh yang kuat dalam menjelaskan variasi pada persentase kasus TBC di hampir semua wilayah di Indonesia. Hal tersebut juga dibuktikan dengan variasi dari estimasi parameter model GWR di variabel tersebut yang besar. Peneliti menyarankan agar mencari faktor-faktor lainnya yang terbukti berhubungan terhadap persentase kasus TBC dan memiliki efek variasi yang besar pada antar wilayah.