Mempersiapkan library untuk analisis GWPR IPM Provinsi Sulawesi Selatan (2020-2024)

library(readxl)
library(car)
## Loading required package: carData
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(plm)
library(tseries)
## Warning: package 'tseries' was built under R version 4.5.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(sf)
## Linking to GEOS 3.13.1, GDAL 3.11.0, PROJ 9.6.0; sf_use_s2() is TRUE
library(sp)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:plm':
## 
##     between, lag, lead
## The following object is masked from 'package:car':
## 
##     recode
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
library(units)
## udunits database from C:/Users/halfi/AppData/Local/R/win-library/4.5/units/share/udunits/udunits2.xml
library(ggspatial)
## Warning: package 'ggspatial' was built under R version 4.5.3
library(plm)
library(openxlsx)
library(tibble)
library(GWmodel)
## Warning: package 'GWmodel' was built under R version 4.5.3
## Loading required package: robustbase
## Warning: package 'robustbase' was built under R version 4.5.3
## Loading required package: Rcpp
## Welcome to GWmodel version 2.4-2.
library(GWPR.light)

Pemanggilan data IPM Provinsi Sulawesi Selatan tahun 2020-2024

Data_IPM_Sulawesi_Selatan <- read_excel("D:/Artikel Obaja/IPM Sulawesi Selatan Tahun 2020-2024.xlsx")
colnames(Data_IPM_Sulawesi_Selatan)
##  [1] "ID"             "Kabupaten/Kota" "Tahun"          "IPM"           
##  [5] "X1"             "X2"             "X3"             "X4"            
##  [9] "X5"             "X6"
head(Data_IPM_Sulawesi_Selatan)
## # A tibble: 6 × 10
##      ID `Kabupaten/Kota` Tahun   IPM    X1    X2    X3    X4    X5    X6
##   <dbl> <chr>            <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1     1 Bantaeng          2020  68.7  57.2  3572  16.8 0.344  77.8  45.8
## 2     2 Barru             2020  71    70.5  3724  14.4 0.357  56.0  88.4
## 3     3 Bone              2020  66.1  64.4 19513  81.3 0.404  53.7  86.1
## 4     4 Bulukumba         2020  69.0  74.2 11430  30   0.371  42.2  55.4
## 5     5 Enrekang          2020  72.8  79.8  7624  25.2 0.366  57.0  87.9
## 6     6 Gowa              2020  70.1  71.5 16841  57.7 0.345  33.9  93.5

1. Melakukan Analisis Data IPM Menggunakan Regresi Data Panel

A. Membuat Tabel Statistika Deskriptif untuk Data IPM Sulsel Tahun 2020-2024

# Membuat Daftar variabel Penelitian
variabel <- c("IPM", "X1", "X2", "X3", "X4", "X5", "X6")

# Mengubah ke dalam Format Long (Panjang ke Bawah)
Data_Long <- Data_IPM_Sulawesi_Selatan %>%
  select(Tahun, all_of(variabel)) %>%
  pivot_longer(cols = -Tahun, names_to = "Variabel", values_to = "Nilai")
# Menghitung Nilai statistik Deskriptif
Stat_Deskriptif <- Data_Long %>%
  group_by(Variabel, Tahun) %>%
  summarise(
    Min = min(Nilai, na.rm = TRUE),
    Max = max(Nilai, na.rm = TRUE),
    Mean = mean(Nilai, na.rm = TRUE),
    SD = sd(Nilai, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(Variabel, Tahun)

# Menampilkan Nilai statistik Deskriptif sebanyak 4 Angka dibelakang Koma
Statistika_Deskriptif <- Stat_Deskriptif %>%
  mutate(
    Min  = sprintf("%.3f", Min),
    Max  = sprintf("%.3f", Max),
    Mean = sprintf("%.3f", Mean),
    SD   = sprintf("%.3f", SD)
  )
View(Statistika_Deskriptif)

B. Melakukan Analisis Ordinary Least Square (OLS)

OLS_IPM <- lm(IPM ~ X1 + X2 + X3 + X4 + X5 + X6, data = Data_IPM_Sulawesi_Selatan)
summary(OLS_IPM)
## 
## Call:
## lm(formula = IPM ~ X1 + X2 + X3 + X4 + X5 + X6, data = Data_IPM_Sulawesi_Selatan)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.0105 -1.1629 -0.1852  0.9614  5.6595 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.611e+01  3.985e+00  14.080  < 2e-16 ***
## X1           1.607e-01  3.601e-02   4.462 1.93e-05 ***
## X2           6.039e-04  4.957e-05  12.184  < 2e-16 ***
## X3          -1.878e-01  1.910e-02  -9.833  < 2e-16 ***
## X4          -1.704e+01  8.168e+00  -2.086   0.0392 *  
## X5           8.519e-03  1.108e-02   0.769   0.4434    
## X6           1.096e-01  2.500e-02   4.384 2.63e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.166 on 113 degrees of freedom
## Multiple R-squared:  0.7132, Adjusted R-squared:  0.698 
## F-statistic: 46.84 on 6 and 113 DF,  p-value: < 2.2e-16

C. Melakukan Uji Multikolenieritas

VIF <- as.data.frame(vif(OLS_IPM))  
VIF
##    vif(OLS_IPM)
## X1     1.262759
## X2     3.317094
## X3     3.156762
## X4     1.213910
## X5     1.316986
## X6     1.352046

D. Melakukan Pemodelan Common Effect Model (CEM)

Model_CEM <- plm(IPM ~ X1 + X2 + X3 + X4 + X5 + X6, 
                 index = c("ID", "Tahun"), model = "pooling", data = Data_IPM_Sulawesi_Selatan)
summary(Model_CEM)
## Pooling Model
## 
## Call:
## plm(formula = IPM ~ X1 + X2 + X3 + X4 + X5 + X6, data = Data_IPM_Sulawesi_Selatan, 
##     model = "pooling", index = c("ID", "Tahun"))
## 
## Balanced Panel: n = 24, T = 5, N = 120
## 
## Residuals:
##     Min.  1st Qu.   Median  3rd Qu.     Max. 
## -5.01054 -1.16287 -0.18517  0.96140  5.65946 
## 
## Coefficients:
##                Estimate  Std. Error t-value  Pr(>|t|)    
## (Intercept)  5.6111e+01  3.9850e+00 14.0804 < 2.2e-16 ***
## X1           1.6070e-01  3.6012e-02  4.4624 1.926e-05 ***
## X2           6.0389e-04  4.9566e-05 12.1835 < 2.2e-16 ***
## X3          -1.8779e-01  1.9099e-02 -9.8325 < 2.2e-16 ***
## X4          -1.7042e+01  8.1680e+00 -2.0864   0.03919 *  
## X5           8.5192e-03  1.1075e-02  0.7692   0.44338    
## X6           1.0958e-01  2.4996e-02  4.3838 2.626e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    1848.3
## Residual Sum of Squares: 530.06
## R-Squared:      0.71322
## Adj. R-Squared: 0.69799
## F-statistic: 46.8387 on 6 and 113 DF, p-value: < 2.22e-16
round(coef(Model_CEM), 3)
## (Intercept)          X1          X2          X3          X4          X5 
##      56.111       0.161       0.001      -0.188     -17.042       0.009 
##          X6 
##       0.110

D. Melakukan Pemodelan Fixed Effect Model (FEM)

Model_FEM <- plm(IPM ~ X1 + X2 + X3 + X4 + X5 + X6, 
                 index = c("ID", "Tahun"), model = "within", data = Data_IPM_Sulawesi_Selatan)
summary(Model_FEM)
## Oneway (individual) effect Within Model
## 
## Call:
## plm(formula = IPM ~ X1 + X2 + X3 + X4 + X5 + X6, data = Data_IPM_Sulawesi_Selatan, 
##     model = "within", index = c("ID", "Tahun"))
## 
## Balanced Panel: n = 24, T = 5, N = 120
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -0.979201 -0.350670 -0.013542  0.350852  0.949383 
## 
## Coefficients:
##       Estimate  Std. Error t-value  Pr(>|t|)    
## X1 -4.2196e-02  1.2516e-01 -0.3371  0.736810    
## X2  4.1325e-04  1.9294e-04  2.1418  0.034909 *  
## X3 -1.1773e-01  3.7416e-02 -3.1465  0.002241 ** 
## X4 -1.7687e+01  2.8511e+00 -6.2034 1.652e-08 ***
## X5  1.6724e-02  2.9498e-03  5.6695 1.709e-07 ***
## X6  3.8428e-02  9.1633e-03  4.1937 6.412e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    84.374
## Residual Sum of Squares: 23.854
## R-Squared:      0.71728
## Adj. R-Squared: 0.62618
## F-statistic: 38.0564 on 6 and 90 DF, p-value: < 2.22e-16
round(coef(Model_FEM), 3)
##      X1      X2      X3      X4      X5      X6 
##  -0.042   0.000  -0.118 -17.687   0.017   0.038
## Menampilkan Nilai Coefisien perlokasi di Provinsi Sulsel
fixef(Model_FEM)
##      1      2      3      4      5      6      7      8      9     10     11 
## 74.076 76.124 73.203 74.550 78.334 75.147 71.784 73.506 80.520 82.958 82.574 
##     12     13     14     15     16     17     18     19     20     21     22 
## 76.967 77.183 75.929 75.369 76.264 77.349 75.465 72.548 75.555 71.636 75.715 
##     23     24 
## 75.863 74.582

E. Melakukan Pemodelan Random Effect Model (REM)

Model_REM <- plm(IPM ~ X1 + X2 + X3 + X4 + X5 + X6, 
                 index = c("ID", "Tahun"), model = "random", random.method = "walhus", data = Data_IPM_Sulawesi_Selatan)
summary(Model_REM)
## Oneway (individual) effect Random Effect Model 
##    (Wallace-Hussain's transformation)
## 
## Call:
## plm(formula = IPM ~ X1 + X2 + X3 + X4 + X5 + X6, data = Data_IPM_Sulawesi_Selatan, 
##     model = "random", random.method = "walhus", index = c("ID", 
##         "Tahun"))
## 
## Balanced Panel: n = 24, T = 5, N = 120
## 
## Effects:
##                  var std.dev share
## idiosyncratic 0.4560  0.6753 0.103
## individual    3.9611  1.9903 0.897
## theta: 0.85
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -1.428763 -0.380385  0.033532  0.429115  1.457688 
## 
## Coefficients:
##                Estimate  Std. Error z-value  Pr(>|z|)    
## (Intercept)  6.0343e+01  4.0487e+00 14.9043 < 2.2e-16 ***
## X1           1.6386e-01  5.3605e-02  3.0568  0.002237 ** 
## X2           5.7530e-04  6.9897e-05  8.2306 < 2.2e-16 ***
## X3          -1.6894e-01  2.5560e-02 -6.6095 3.856e-11 ***
## X4          -1.6326e+01  3.0090e+00 -5.4258 5.769e-08 ***
## X5           1.6242e-02  3.2469e-03  5.0022 5.667e-07 ***
## X6           4.5379e-02  9.6788e-03  4.6885 2.752e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    124.08
## Residual Sum of Squares: 37.338
## R-Squared:      0.69907
## Adj. R-Squared: 0.68309
## Chisq: 262.506 on 6 DF, p-value: < 2.22e-16
round(coef(Model_REM), 3)
## (Intercept)          X1          X2          X3          X4          X5 
##      60.343       0.164       0.001      -0.169     -16.326       0.016 
##          X6 
##       0.045

F. Melakukan Uji Pemilihan Model Terbaik

1. Uji Chow: Menguji Apakah FEM Lebih Baik dari CEM

H0: Model CEM Lebih Baik

H1: Model FEM Lebih Baik

Chow_Test <- pFtest(Model_FEM, Model_CEM)
Chow_Test
## 
##  F test for individual effects
## 
## data:  IPM ~ X1 + X2 + X3 + X4 + X5 + X6
## F = 83.038, df1 = 23, df2 = 90, p-value < 2.2e-16
## alternative hypothesis: significant effects

2. Uji Hausman: Memilih antara FEM dan REM

H0: Model REM Lebih Baik

H1: Model FEM lebih baik

Hausman_Test <- phtest(Model_FEM, Model_REM)
Hausman_Test
## 
##  Hausman Test
## 
## data:  IPM ~ X1 + X2 + X3 + X4 + X5 + X6
## chisq = 4.8944, df = 6, p-value = 0.5574
## alternative hypothesis: one model is inconsistent

3. Uji Lagrange Multiplier LM: Memilih antara CEM dan REM

H0: Model CEM Lebih Baik

H1: Model REM lebih baik

plmtest(Model_CEM, type = "bp")
## 
##  Lagrange Multiplier Test - (Breusch-Pagan)
## 
## data:  IPM ~ X1 + X2 + X3 + X4 + X5 + X6
## chisq = 193, df = 1, p-value < 2.2e-16
## alternative hypothesis: significant effects

G. Melakukan Uji Asumsi Klasik pada Model Panel Terbaik (REM)

1. Uji Normalitas Residual dengan Jarque Bera Test

Residuals_REM <- residuals(Model_REM)
jarque.bera.test(Residuals_REM)
## 
##  Jarque Bera Test
## 
## data:  Residuals_REM
## X-squared = 1.3864, df = 2, p-value = 0.5

2. Uji Homokedastisitas Menggunakan Breusch-Pagan Test

bptest(Model_REM, studentize = TRUE)
## 
##  studentized Breusch-Pagan test
## 
## data:  Model_REM
## BP = 20.008, df = 6, p-value = 0.002761

3. Uji Autokorelasi Menggunakan Breusch–Godfrey Test

pbgtest(Model_REM)
## 
##  Breusch-Godfrey/Wooldridge test for serial correlation in panel models
## 
## data:  IPM ~ X1 + X2 + X3 + X4 + X5 + X6
## chisq = 52.617, df = 5, p-value = 4.03e-10
## alternative hypothesis: serial correlation in idiosyncratic errors

2. Melakukan Analisis GWPR IPM Provinsi Sulawesi Selatan (2020-2024)

A. Pemanggilan Data SHP Kabupaten/Kota Provinsi Sulawesi Selatan

SHP_Kabupaten_Sulsel <- st_read("D:/Artikel Obaja/SHP Provinsi Sulawesi Selatan/SHP Provinsi Sulawesi Selatan")
## Reading layer `RBI_50K_2023_Sulawesi Selatan' from data source 
##   `D:\Artikel Obaja\SHP Provinsi Sulawesi Selatan\SHP Provinsi Sulawesi Selatan' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 25 features and 25 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 117.0383 ymin: -7.758941 xmax: 122.2226 ymax: -1.947286
## Geodetic CRS:  WGS 84
st_geometry(SHP_Kabupaten_Sulsel)
## Geometry set for 25 features 
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 117.0383 ymin: -7.758941 xmax: 122.2226 ymax: -1.947286
## Geodetic CRS:  WGS 84
## First 5 geometries:
## MULTIPOLYGON (((119.9556 -5.35437, 119.9556 -5....
## MULTIPOLYGON (((119.5721 -4.488175, 119.5719 -4...
## MULTIPOLYGON (((120.3106 -5.037077, 120.3107 -5...
## MULTIPOLYGON (((120.4291 -5.63984, 120.4292 -5....
## MULTIPOLYGON (((120.0407 -3.369293, 120.0407 -3...

B. Mempersiapkan Data Spasial

## Mengganti Nama Kolom NAMOBJ Menjadi Kabupaten/Kota
names(SHP_Kabupaten_Sulsel)[names(SHP_Kabupaten_Sulsel) == "NAMOBJ"] <- "Kabupaten/Kota"

## Memfilter Wilayah Kabupaten/Kota yang terdapat pada data IPM Sulawesi Selatan
SHP_Kabupaten_Sulsel_filtered <- SHP_Kabupaten_Sulsel %>%
  filter(`Kabupaten/Kota` %in% Data_IPM_Sulawesi_Selatan$`Kabupaten/Kota`)

## Memperbaiki Geometri yang Tidak Valid
SHP_Kabupaten_Sulsel <- st_make_valid(SHP_Kabupaten_Sulsel_filtered)

## Menambahkan Kolom ID pada Data Shapefile Provinsi Sulawesi Selatan
SHP_Kabupaten_Sulsel <- SHP_Kabupaten_Sulsel_filtered %>%
  arrange(`Kabupaten/Kota`) %>%
  mutate(ID = row_number())

## Melakukan Transformasi CRS
SHP_Kabupaten_Sulsel <- st_transform(SHP_Kabupaten_Sulsel, 32750)

C. Mengambil Nilai Koordinat Centroid untuk Setiap Kabupaten/Kota

## Menghitung Titik Label Menggunakan Koordinat WGS84 (sebelum ditransformasi)
Centroid_LL <- st_centroid(st_geometry(SHP_Kabupaten_Sulsel_filtered))
Coords_LL <- st_coordinates(Centroid_LL)

Data_LL <- tibble(
  `Kabupaten/Kota` = SHP_Kabupaten_Sulsel_filtered$`Kabupaten/Kota`,
  Longitude = Coords_LL[,1],
  Latitude = Coords_LL[,2]
)

## Menghitung Titik Label Menggunakan Koordinat UTM (Setelah ditransformasi)
Centroid_UTM <- st_centroid(st_geometry(SHP_Kabupaten_Sulsel))
Coords_UTM <- st_coordinates(Centroid_UTM)

Data_UTM <- tibble(
  `Kabupaten/Kota` = SHP_Kabupaten_Sulsel$`Kabupaten/Kota`,
  Easting = Coords_UTM[,1],
  Northing = Coords_UTM[,2]
)

## Membuat Tabel Koordinat untuk Data Long-Lat serta Nort dan Easting
Tabel_Koordinat <- Data_LL %>%
  left_join(Data_UTM, by = "Kabupaten/Kota")

View(Tabel_Koordinat)

D. Menggabungkan Data Panel IPM dengan Data Shapefile Sulawesi Selatan

## Menampilkan Hasil Gabungan Data SHP dan IPM Provinsi Sulawesi Selatan 
Data_GWPR_IPM <- Data_IPM_Sulawesi_Selatan %>%
  select(-any_of("ID")) %>%   
  left_join(
    SHP_Kabupaten_Sulsel %>%
      st_drop_geometry() %>%
      select(`Kabupaten/Kota`, ID),
    by = "Kabupaten/Kota"
  ) %>%
  arrange(Tahun, ID)

E. Menggabungkan Data Koordinat dengan Data Panel

Data_GWPR_IPM_Sulsel <- Data_GWPR_IPM %>%
  left_join(Data_UTM, by=c("Kabupaten/Kota"="Kabupaten/Kota"))

## Mengubah Format Data Panel Gabungan ke Dalam Data Frame
Data_GWPR_IPM_Sulsel <- as.data.frame(Data_GWPR_IPM_Sulsel)

Data_GWPR_IPM_Sulsel$aim <- 0
rownames(Data_GWPR_IPM_Sulsel) <- NULL
head(Data_GWPR_IPM_Sulsel)
##   Kabupaten/Kota Tahun   IPM    X1    X2    X3    X4    X5    X6 ID  Easting
## 1       Bantaeng  2020 68.73 57.22  3572 16.84 0.344 77.80 45.78  1 831052.9
## 2          Barru  2020 71.00 70.48  3724 14.44 0.357 56.02 88.39  2 799082.6
## 3           Bone  2020 66.06 64.39 19513 81.33 0.404 53.74 86.12  3 847313.8
## 4      Bulukumba  2020 68.99 74.18 11430 30.00 0.371 42.16 55.35  4 858485.4
## 5       Enrekang  2020 72.76 79.80  7624 25.25 0.366 56.99 87.87  5 819409.1
## 6           Gowa  2020 70.14 71.48 16841 57.68 0.345 33.93 93.54  6 801353.4
##   Northing aim
## 1  9392325   0
## 2  9508697   0
## 3  9480283   0
## 4  9398684   0
## 5  9612225   0
## 6  9412527   0
view(Data_GWPR_IPM_Sulsel)

F. Mengubah Data Shapefile Sulawesi Selatan ke Dalam Format sp

SHP_Kabupaten_Sulsel_sp <- as(SHP_Kabupaten_Sulsel, "Spatial")
SHP_Kabupaten_Sulsel_sp@data$ID <- SHP_Kabupaten_Sulsel$ID

G. Menghitung Matriks Jarak Euclidean pada Setiap Kabupaten/Kota

## Mengambil Nilai Koordinat
u <- as.matrix(Data_GWPR_IPM_Sulsel$Easting[1:24])
v <- as.matrix(Data_GWPR_IPM_Sulsel$Northing[1:24])

## Mengambil Nama Kabupaten/Kota di Provinsi Sulawesi Selatan
Nama_Kab <- Data_GWPR_IPM_Sulsel$`Kabupaten/Kota`[1:24]

## Membuat Matriks Jarak
Jarak <- matrix(nrow=24,ncol=24)

## Memberi Nama pada Baris dan Kolom
rownames(Jarak) <- Nama_Kab
colnames(Jarak) <- Nama_Kab

## Menghitung Jarak Euclidean Antar Setiap Kabupaten/Kota
for(i in 1:24){
  for(j in 1:24){
    Jarak[i,j] <- sqrt((u[i]-u[j])^2 + (v[i]-v[j])^2)
  }
}

View(Jarak)

H. Pemodelan GWPR dengan Fungsi Pembobot Adaptive Gaussian Kernel

1. Menentukan Nilai Bandwidth Optimal

Bandwidth.GWPR_Gaussian <- bw.GWPR(formula = IPM ~ X1 + X2 + X3 + X4 + X5 + X6,
                                   data = Data_GWPR_IPM_Sulsel,
                                   index = c("ID", "Tahun"),
                                   SDF = SHP_Kabupaten_Sulsel_sp,
                                   adaptive = TRUE,
                                   approach = "CV",
                                   kernel = "gaussian",
                                   effect = "individual",
                                   model = "random") # Menyesuaikan dengan Hasil Regresi Panel
## To make sure every subsample have enough freedom, the minimum number of individuals is 2
## The upper boundary is 24, and the lower boundary is 8
## Adaptive Bandwidth: 17 CV score: 0.2396852 
## Adaptive Bandwidth: 14 CV score: 0.2451317 
## Adaptive Bandwidth: 20 CV score: 0.253616 
## Adaptive Bandwidth: 16 CV score: 0.2381249 
## Adaptive Bandwidth: 14 CV score: 0.2451317 
## Adaptive Bandwidth: 15 CV score: 0.2382259 
## Adaptive Bandwidth: 14 CV score: 0.2451317 
## Adaptive Bandwidth: 15 CV score: 0.2382259 
## Adaptive Bandwidth: 14 CV score: 0.2451317 
## Adaptive Bandwidth: 14 CV score: 0.2451317 
## Adaptive Bandwidth: 13 CV score: 0.2404945 
## Adaptive Bandwidth: 13 CV score: 0.2404945 
## Adaptive Bandwidth: 12 CV score: 0.2404974 
## Adaptive Bandwidth: 12 CV score: 0.2404974 
## Adaptive Bandwidth: 11 CV score: 0.265203 
## Adaptive Bandwidth: 11 CV score: 0.265203 
## Adaptive Bandwidth: 10 CV score: 0.2874691 
## Adaptive Bandwidth: 10 CV score: 0.2874691 
## Adaptive Bandwidth: 9 CV score: 0.2952363 
## Adaptive Bandwidth: 9 CV score: 0.2952363 
## Adaptive Bandwidth: 8 CV score: 0.3427139 
## Adaptive Bandwidth: 8 CV score: 0.3427139 
## Adaptive Bandwidth: 8 CV score: 0.3427139 
## Adaptive Bandwidth: 8 CV score: 0.3427139 
## Adaptive Bandwidth: 8 CV score: 0.3427139 
## Adaptive Bandwidth: 8 CV score: 0.3427139
print(Bandwidth.GWPR_Gaussian)
## [1] 16
## Menampilkan Nilai Bandwidth untuk Setiap Lokasi di Provinsi Sulsel
k <- Bandwidth.GWPR_Gaussian

bandwidth_lokal_Gaussian <- sapply(1:nrow(Jarak), function(i){
  sort(Jarak[i, ])[k]
})

Hasil_Bandwidth_Gaussian <- data.frame(
  Kabupaten_Kota = Nama_Kab,
  Bandwidth_Gaussian = bandwidth_lokal_Gaussian
)

View(Hasil_Bandwidth_Gaussian)

2. Menentukan Nilai Pembobot Gaussian pada Masing-Masing Kabupaten/Kota

## Menghitung Nilai Bobot Kernel Gaussian Adaptif
Nilai.Bobot_Gaussian <- gw.weight(vd = Jarak,
                                  bw = Bandwidth.GWPR_Gaussian,
                                  kernel = "gaussian",
                                  adaptive = TRUE)

## Memberi Nama kabupaten/kota pada Matriks Pembobot
rownames(Nilai.Bobot_Gaussian) <- Nama_Kab
colnames(Nilai.Bobot_Gaussian) <- Nama_Kab

## Menampilkan Nilai Pembobot pada Setiap Kabupaten/Kota
cat("\n=== Matriks Pembobot Gaussian Adaptif ===\n")
## 
## === Matriks Pembobot Gaussian Adaptif ===
print(round(Nilai.Bobot_Gaussian, 4))
##                          Bantaeng  Barru   Bone Bulukumba Enrekang   Gowa
## Bantaeng                   1.0000 0.6262 0.7943    0.9881   0.4516 0.9797
## Barru                      0.8096 1.0000 0.9138    0.7893   0.8332 0.8629
## Bone                       0.8905 0.9042 1.0000    0.9024   0.7422 0.8987
## Bulukumba                  0.9886 0.6051 0.8226    1.0000   0.4619 0.9464
## Enrekang                   0.4950 0.6992 0.5925    0.4901   1.0000 0.5270
## Gowa                       0.9815 0.7427 0.8245    0.9490   0.5173 1.0000
## Jeneponto                  0.9842 0.6065 0.7160    0.9448   0.4228 0.9870
## Kepulauan Selayar          0.7425 0.1129 0.2599    0.7566   0.1329 0.6065
## Kota Makassar              0.9313 0.8093 0.7978    0.8809   0.5663 0.9816
## Kota Palopo                0.3248 0.3981 0.3542    0.3275   0.9321 0.3345
## Kota Parepare              0.6726 0.9361 0.7926    0.6544   0.9371 0.7270
## Luwu                       0.3908 0.4962 0.4538    0.3966   0.9628 0.4021
## Luwu Timur                 0.1713 0.1090 0.1394    0.1855   0.6065 0.1538
## Luwu Utara                 0.1814 0.1768 0.1550    0.1809   0.7683 0.1835
## Maros                      0.9466 0.8837 0.9134    0.9206   0.6353 0.9815
## Pangkajene Dan Kepulauan   0.9048 0.8907 0.8433    0.8598   0.6413 0.9627
## Pinrang                    0.5261 0.7690 0.6065    0.5080   0.9821 0.5748
## Sidenreng Rappang          0.6065 0.8330 0.7522    0.6065   0.9796 0.6388
## Sinjai                     0.9822 0.7335 0.9109    0.9891   0.5500 0.9646
## Soppeng                    0.7884 0.9804 0.9370    0.7836   0.8698 0.8267
## Takalar                    0.9532 0.6730 0.7139    0.8980   0.4638 0.9860
## Tana Toraja                0.3624 0.5014 0.3900    0.3515   0.9650 0.3912
## Toraja Utara               0.2972 0.3792 0.3051    0.2914   0.9247 0.3148
## Wajo                       0.6672 0.8441 0.8397    0.6806   0.9362 0.6847
##                          Jeneponto Kepulauan Selayar Kota Makassar Kota Palopo
## Bantaeng                    0.9859            0.9019        0.9162      0.4776
## Barru                       0.8172            0.7110        0.8893      0.7610
## Bone                        0.8602            0.7903        0.8695      0.7092
## Bulukumba                   0.9525            0.9115        0.8613      0.4951
## Enrekang                    0.5059            0.5386        0.5389      0.9599
## Gowa                        0.9894            0.8541        0.9794      0.5194
## Jeneponto                   1.0000            0.8829        0.9486      0.4470
## Kepulauan Selayar           0.7250            1.0000        0.4556      0.2155
## Kota Makassar               0.9623            0.8012        1.0000      0.5501
## Kota Palopo                 0.3341            0.4451        0.3271      1.0000
## Kota Parepare               0.6874            0.6300        0.7598      0.8549
## Luwu                        0.3950            0.4901        0.3936      0.9942
## Luwu Timur                  0.1703            0.3684        0.1269      0.8740
## Luwu Utara                  0.1953            0.3373        0.1744      0.9609
## Maros                       0.9500            0.8103        0.9810      0.6082
## Pangkajene Dan Kepulauan    0.9319            0.7740        0.9914      0.6065
## Pinrang                     0.5495            0.5457        0.6065      0.9193
## Sidenreng Rappang           0.6065            0.6065        0.6466      0.9183
## Sinjai                      0.9505            0.8754        0.9047      0.5596
## Soppeng                     0.7815            0.7075        0.8355      0.8003
## Takalar                     0.9885            0.8391        0.9827      0.4735
## Tana Toraja                 0.3848            0.4526        0.4050      0.9757
## Toraja Utara                0.3160            0.4152        0.3179      0.9894
## Wajo                        0.6505            0.6543        0.6732      0.8870
##                          Kota Parepare   Luwu Luwu Timur Luwu Utara  Maros
## Bantaeng                        0.5001 0.4718     0.5393     0.5021 0.9217
## Barru                           0.9493 0.7766     0.7048     0.7294 0.9205
## Bone                            0.8150 0.7274     0.7066     0.6844 0.9345
## Bulukumba                       0.4916 0.4924     0.5685     0.5161 0.8890
## Enrekang                        0.9045 0.9735     0.8566     0.9102 0.5510
## Gowa                            0.6022 0.5152     0.5510     0.5364 0.9751
## Jeneponto                       0.4811 0.4361     0.5005     0.4787 0.9184
## Kepulauan Selayar               0.0974 0.1930     0.3650     0.2821 0.4061
## Kota Makassar                   0.6767 0.5452     0.5556     0.5635 0.9771
## Kota Palopo                     0.6591 0.9930     0.9308     0.9758 0.3251
## Kota Parepare                   1.0000 0.8719     0.7632     0.8106 0.7803
## Luwu                            0.7411 1.0000     0.9213     0.9547 0.4023
## Luwu Timur                      0.2593 0.8291     1.0000     0.9330 0.1224
## Luwu Utara                      0.4029 0.9123     0.9417     1.0000 0.1589
## Maros                           0.7468 0.6124     0.6097     0.6065 1.0000
## Pangkajene Dan Kepulauan        0.7670 0.6065     0.5926     0.6083 0.9831
## Pinrang                         0.9497 0.9282     0.8043     0.8766 0.6065
## Sidenreng Rappang               0.9586 0.9412     0.8318     0.8633 0.6797
## Sinjai                          0.6065 0.5630     0.6065     0.5668 0.9455
## Soppeng                         0.9556 0.8220     0.7459     0.7592 0.8841
## Takalar                         0.5446 0.4624     0.5060     0.5019 0.9388
## Tana Toraja                     0.7702 0.9676     0.8644     0.9493 0.3921
## Toraja Utara                    0.6542 0.9713     0.8985     0.9770 0.3041
## Wajo                            0.9217 0.9145     0.8304     0.8329 0.7257
##                          Pangkajene Dan Kepulauan Pinrang Sidenreng Rappang
## Bantaeng                                   0.8498  0.4542            0.4942
## Barru                                      0.9185  0.8645            0.8903
## Bone                                       0.8695  0.7337            0.8169
## Bulukumba                                  0.7901  0.4504            0.5090
## Enrekang                                   0.5275  0.9805            0.9746
## Gowa                                       0.9453  0.5383            0.5627
## Jeneponto                                  0.8796  0.4394            0.4549
## Kepulauan Selayar                          0.3002  0.1167            0.1309
## Kota Makassar                              0.9887  0.6065            0.6065
## Kota Palopo                                0.2899  0.8544            0.8330
## Kota Parepare                              0.7811  0.9643            0.9664
## Luwu                                       0.3614  0.8919            0.8986
## Luwu Timur                                 0.0876  0.4652            0.4762
## Luwu Utara                                 0.1347  0.6696            0.5985
## Maros                                      0.9815  0.6611            0.6932
## Pangkajene Dan Kepulauan                   1.0000  0.6856            0.6874
## Pinrang                                    0.6065  1.0000            0.9601
## Sidenreng Rappang                          0.6487  0.9651            1.0000
## Sinjai                                     0.8642  0.5444            0.6088
## Soppeng                                    0.8573  0.8796            0.9325
## Takalar                                    0.9354  0.4951            0.4942
## Tana Toraja                                0.3771  0.9418            0.8718
## Toraja Utara                               0.2816  0.8716            0.8023
## Wajo                                       0.6717  0.9044            0.9807
##                          Sinjai Soppeng Takalar Tana Toraja Toraja Utara   Wajo
## Bantaeng                 0.9769  0.6081  0.9538      0.4470       0.4692 0.5333
## Barru                    0.8335  0.9815  0.8382      0.7811       0.7612 0.8880
## Bone                     0.9406  0.9337  0.8456      0.6864       0.6886 0.8722
## Bulukumba                0.9864  0.6135  0.9031      0.4518       0.4785 0.5640
## Enrekang                 0.5021  0.7726  0.5110      0.9753       0.9577 0.9134
## Gowa                     0.9582  0.6961  0.9874      0.5078       0.5189 0.5854
## Jeneponto                0.9288  0.5621  0.9873      0.4289       0.4479 0.4741
## Kepulauan Selayar        0.6065  0.1240  0.6065      0.1630       0.2057 0.1495
## Kota Makassar            0.8993  0.7365  0.9861      0.5580       0.5590 0.6065
## Kota Palopo              0.3164  0.4922  0.3251      0.9708       0.9899 0.7533
## Kota Parepare            0.6888  0.9470  0.7092      0.8882       0.8594 0.9300
## Luwu                     0.3923  0.5989  0.3856      0.9679       0.9776 0.8406
## Luwu Timur               0.1555  0.1733  0.1461      0.7186       0.8262 0.4383
## Luwu Utara               0.1601  0.2399  0.1850      0.9029       0.9646 0.4949
## Maros                    0.9521  0.8407  0.9589      0.6065       0.6065 0.7152
## Pangkajene Dan Kepulauan 0.8898  0.8205  0.9603      0.6217       0.6153 0.6841
## Pinrang                  0.5249  0.8039  0.5684      0.9620       0.9326 0.8807
## Sidenreng Rappang        0.6322  0.9014  0.6102      0.9257       0.9071 0.9787
## Sinjai                   1.0000  0.7374  0.9187      0.5256       0.5435 0.6643
## Soppeng                  0.8272  1.0000  0.7897      0.8066       0.7902 0.9470
## Takalar                  0.8943  0.6065  1.0000      0.4701       0.4815 0.4984
## Tana Toraja              0.3478  0.5675  0.3906      1.0000       0.9913 0.7624
## Toraja Utara             0.2800  0.4541  0.3143      0.9889       1.0000 0.6920
## Wajo                     0.7096  0.9293  0.6421      0.8706       0.8625 1.0000
View(Nilai.Bobot_Gaussian)

3. Melakukan Estimasi Parameter Model GWPR Gaussian

Model.GWPR_Gaussian <- GWPR(formula =  IPM ~ X1 + X2 + X3 + X4 + X5 + X6,
                            data = Data_GWPR_IPM_Sulsel,
                            SDF = SHP_Kabupaten_Sulsel_sp,
                            index = c("ID", "Tahun"),
                            bw = Bandwidth.GWPR_Gaussian,
                            adaptive = TRUE,
                            longlat = FALSE,
                            kernel = "gaussian",
                            effect = "individual",
                            model = "random")
## ************************ GWPR Begin *************************
## Formula: IPM  =  X1 + X2 + X3 + X4 + X5 + X6 -- Individuals: 24
## Bandwidth: 16 ---- Adaptive: TRUE
## Model: random ---- Effect: individual
## The R2 is: 0.985968377143061
## Note: in order to avoid mistakes, we forced a rename of the individuals'ID as "id".
summary(Model.GWPR_Gaussian)
##                Length Class                    Mode     
## GW.arguments    7     -none-                   list     
## R2              1     -none-                   numeric  
## index           2     -none-                   character
## plm.result     11     plm                      list     
## raw.data       13     data.frame               list     
## GWPR.residuals  5     data.frame               list     
## SDF            24     SpatialPolygonsDataFrame S4

4. Menampilkan Hasil Ringkasan Estimasi Parameter Model GWPR Gaussian

Coefisien_Data_Gaussian <- Model.GWPR_Gaussian$SDF@data
Variabel <- c("Intercept","X1","X2","X3","X4","X5","X6")

Tabel_Estimasi_Gaussian <- data.frame(Variabel = Variabel,
                             Min = apply(Coefisien_Data_Gaussian[, Variabel], 2, min),
                             Q1 = apply(Coefisien_Data_Gaussian[, Variabel], 2, quantile, 0.25),
                             Median = apply(Coefisien_Data_Gaussian[, Variabel], 2, median),
                             Q3 = apply(Coefisien_Data_Gaussian[, Variabel], 2, quantile, 0.75),
                             Max = apply(Coefisien_Data_Gaussian[, Variabel], 2, max))
Tabel_Estimasi_Gaussian
##            Variabel           Min            Q1        Median            Q3
## Intercept Intercept  6.323078e+01  6.475659e+01  6.539434e+01  6.687406e+01
## X1               X1  7.249438e-02  8.135744e-02  9.903893e-02  1.028482e-01
## X2               X2  2.612661e-04  2.821141e-04  6.193558e-04  6.614049e-04
## X3               X3 -1.817672e-01 -1.798735e-01 -1.738962e-01 -1.433042e-01
## X4               X4 -2.113647e+01 -1.769902e+01 -1.646679e+01 -1.351591e+01
## X5               X5  1.288035e-02  1.306895e-02  1.673985e-02  1.723332e-02
## X6               X6  3.253934e-02  3.503985e-02  3.567123e-02  5.700208e-02
##                     Max
## Intercept  6.749967e+01
## X1         1.404144e-01
## X2         6.655205e-04
## X3        -1.402446e-01
## X4        -1.345860e+01
## X5         1.731495e-02
## X6         5.919382e-02

5. Melakukan Uji Kesesuaian Model GWPR Gaussian

## A. Perhitungan Derajat Kebebasan (df) - Adaptive Gaussian Kernel
### Menyiapkan Data Panel
Data_Gaussian <- Data_GWPR_IPM_Sulsel

### Membentuk Matriks Variabel Independen (X)(120x7)
X <- cbind(1,
           Data_Gaussian$X1,
           Data_Gaussian$X2,
           Data_Gaussian$X3,
           Data_Gaussian$X4,
           Data_Gaussian$X5,
           Data_Gaussian$X6)

n <- nrow(X)
j <- ncol(X)

### Mengidentifikasi Kabupaten/Kota GWPR Gaussian
kab_Gaussian <- as.factor(Data_Gaussian$`Kabupaten/Kota`)

### Mapping indeks kabupaten ke matriks bobot Gaussian (24 x 24)
index_kab_Gaussian <- match(kab_Gaussian, rownames(Nilai.Bobot_Gaussian))

### Melakukan Inisialisasi Elemen Diagonal Hat Matrix Gaussian
sii_Gaussian <- numeric(n)

### Melakukan Perhitungan Nilai s_ii untuk Setiap Observasi Gaussian
for(i in 1:n){
  ## Bobot spasial gaussian kabupaten (24)
  wi_kab_Gaussian <- Nilai.Bobot_Gaussian[index_kab_Gaussian[i], ]
  
  ## Mapping Bobot Gaussian ke 120 Observasi Panel
  wi_full_Gaussian <- wi_kab_Gaussian[index_kab_Gaussian]
  
  ## Membentuk Matriks Diagonal Gaussian(120 x 120)
  Wi_Gaussian <- diag(wi_full_Gaussian)
  
  ## hitung (X' W_i X) Gaussian
  XtWiX_Gaussian <- t(X) %*% Wi_Gaussian %*% X
  XtWiX_inv_Gaussian <- solve(XtWiX_Gaussian + diag(1e-5, j))
  xi_Gaussian <- matrix(X[i, ], ncol = 1)
  wii_Gaussian <- wi_full_Gaussian[i]
  sii_Gaussian[i] <- t(xi_Gaussian) %*% XtWiX_inv_Gaussian %*% xi_Gaussian * wii_Gaussian
}

### Menghitung Derajat Kebebasan Gaussian
df_model_Gaussian <- sum(sii_Gaussian)
df_residual_Gaussian <- n - df_model_Gaussian

### Membentuk Model Global (Random Effect Model)
Model_REM <- plm(IPM ~ X1 + X2 + X3 + X4 + X5 + X6, 
                 index = c("ID", "Tahun"), 
                 model = "random", 
                 random.method = "walhus", 
                 data = Data_GWPR_IPM_Sulsel)
summary(Model_REM) 
## Oneway (individual) effect Random Effect Model 
##    (Wallace-Hussain's transformation)
## 
## Call:
## plm(formula = IPM ~ X1 + X2 + X3 + X4 + X5 + X6, data = Data_GWPR_IPM_Sulsel, 
##     model = "random", random.method = "walhus", index = c("ID", 
##         "Tahun"))
## 
## Balanced Panel: n = 24, T = 5, N = 120
## 
## Effects:
##                  var std.dev share
## idiosyncratic 0.4560  0.6753 0.103
## individual    3.9611  1.9903 0.897
## theta: 0.85
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -1.428763 -0.380385  0.033532  0.429115  1.457688 
## 
## Coefficients:
##                Estimate  Std. Error z-value  Pr(>|z|)    
## (Intercept)  6.0343e+01  4.0487e+00 14.9043 < 2.2e-16 ***
## X1           1.6386e-01  5.3605e-02  3.0568  0.002237 ** 
## X2           5.7530e-04  6.9897e-05  8.2306 < 2.2e-16 ***
## X3          -1.6894e-01  2.5560e-02 -6.6095 3.856e-11 ***
## X4          -1.6326e+01  3.0090e+00 -5.4258 5.769e-08 ***
## X5           1.6242e-02  3.2469e-03  5.0022 5.667e-07 ***
## X6           4.5379e-02  9.6788e-03  4.6885 2.752e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    124.08
## Residual Sum of Squares: 37.338
## R-Squared:      0.69907
## Adj. R-Squared: 0.68309
## Chisq: 262.506 on 6 DF, p-value: < 2.22e-16
### Menghitung Nilai SSE (GWPR Gaussian)
SSE_REM <- sum(residuals(Model_REM)^2)
SSE_GWPR_Gaussian <- sum(Model.GWPR_Gaussian$GWPR.residuals$resid^2)

### Menghitung Derajat Bebas Model Global dan Model GWPR Gaussian
df_REM <- df.residual(Model_REM)
df_GWPR_Gaussian <- df_residual_Gaussian

### Melakukan Uji Kesesuaian Model GWPR Gaussian
F_hitung_Gaussian <- (SSE_REM/df_REM)/(SSE_GWPR_Gaussian/df_GWPR_Gaussian)
F_hitung_Gaussian
## [1] 1.410004
### Menentukan Nilai F Tabel GWPR Gaussian
alpha_Gaussian <- 0.10
F_tabel <- qf(1 - alpha_Gaussian, df_REM, df_GWPR_Gaussian)
F_tabel
## [1] 1.275641
### Menentukan Daerah Keputusan Uji Kesesuain Model GWPR Gaussian
if(F_hitung_Gaussian > F_tabel){
  cat("H1: Model GWPR Gaussian lebih baik dibandingkan model global\n")
} else {
  cat("H0: Model global sudah cukup dibandingkan GWPR Bisquare\n")
}
## H1: Model GWPR Gaussian lebih baik dibandingkan model global
### Menghitung Nilai P-Value GWPR Gaussian
p_value_Gaussian <- 1 - pf(F_hitung_Gaussian, df_REM, df_GWPR_Gaussian)
p_value_Gaussian
## [1] 0.03542078
if(p_value_Gaussian < 0.10){
  cat("H1: Model GWPR Gaussian lebih baik dibandingkan model global\n")
} else {
  cat("H0: Model global sudah cukup dibandingkan GWPR Bisquare\n")
}
## H1: Model GWPR Gaussian lebih baik dibandingkan model global

6. Melakukan Estimasi Parameter Lokal Model GWPR Gaussian

beta0 <- Coefisien_Data_Gaussian$Intercept
beta1 <- Coefisien_Data_Gaussian$X1
beta2 <- Coefisien_Data_Gaussian$X2
beta3 <- Coefisien_Data_Gaussian$X3
beta4 <- Coefisien_Data_Gaussian$X4
beta5 <- Coefisien_Data_Gaussian$X5
beta6 <- Coefisien_Data_Gaussian$X6

beta0
##  [1] 65.22677 63.33620 64.46459 65.44070 67.34883 64.97788 64.98450 65.34798
##  [9] 64.63783 66.76266 67.49967 66.85825 66.28735 66.62971 64.93187 63.65097
## [17] 64.01208 67.36045 65.45286 63.23078 64.79617 67.17818 66.92148 67.20378
beta1
##  [1] 0.07534436 0.12961142 0.10275272 0.07249438 0.09824603 0.07934801
##  [7] 0.07889623 0.07406217 0.08539247 0.10115389 0.09880975 0.10186409
## [13] 0.10505776 0.10124625 0.08251435 0.11277343 0.12593627 0.10102920
## [19] 0.07277199 0.14041437 0.08202724 0.09759517 0.09926811 0.10313472
beta2
##  [1] 0.0006634046 0.0006302648 0.0006563713 0.0006652533 0.0002807435
##  [6] 0.0006614535 0.0006614376 0.0006643178 0.0006587509 0.0002697685
## [11] 0.0005615135 0.0002822873 0.0002815947 0.0002645871 0.0006613940
## [16] 0.0006481399 0.0005196196 0.0005544148 0.0006655205 0.0006084469
## [21] 0.0006600144 0.0002612661 0.0002618130 0.0005609650
beta3
##  [1] -0.1805467 -0.1741713 -0.1808550 -0.1816119 -0.1434152 -0.1796490
##  [7] -0.1796413 -0.1816425 -0.1788779 -0.1411434 -0.1647302 -0.1429713
## [13] -0.1422613 -0.1403075 -0.1808458 -0.1763186 -0.1527140 -0.1646583
## [19] -0.1817672 -0.1736211 -0.1790954 -0.1404757 -0.1402446 -0.1658411
beta4
##  [1] -13.51603 -15.79609 -14.75659 -13.53450 -18.17908 -13.46854 -13.51558
##  [8] -13.64314 -13.45860 -17.43096 -20.98895 -17.77444 -17.13748 -17.16420
## [15] -13.50659 -14.67983 -19.83142 -21.13647 -13.48129 -17.58924 -13.49397
## [22] -17.67388 -17.42543 -20.89250
beta5
##  [1] 0.01727684 0.01670546 0.01692681 0.01729608 0.01308194 0.01726024
##  [7] 0.01724569 0.01724544 0.01721449 0.01294655 0.01537322 0.01302999
## [13] 0.01288093 0.01288035 0.01722928 0.01685488 0.01393648 0.01535011
## [19] 0.01731495 0.01677424 0.01722703 0.01297340 0.01293307 0.01552646
beta6
##  [1] 0.03529239 0.03343701 0.03253934 0.03526755 0.05604571 0.03507123
##  [7] 0.03534015 0.03568656 0.03487947 0.05777299 0.04375765 0.05686548
## [13] 0.05816404 0.05838638 0.03467573 0.03293741 0.05919382 0.04485815
## [19] 0.03494570 0.03565591 0.03521311 0.05741188 0.05790141 0.04301555

7. Menghitung Nilai t-Statistik Lokal GWPR Gaussian

t.beta1 <- Coefisien_Data_Gaussian$X1 / Coefisien_Data_Gaussian$X1_SE
t.beta2 <- Coefisien_Data_Gaussian$X2 / Coefisien_Data_Gaussian$X2_SE
t.beta3 <- Coefisien_Data_Gaussian$X3 / Coefisien_Data_Gaussian$X3_SE
t.beta4 <- Coefisien_Data_Gaussian$X4 / Coefisien_Data_Gaussian$X4_SE
t.beta5 <- Coefisien_Data_Gaussian$X5 / Coefisien_Data_Gaussian$X5_SE
t.beta6 <- Coefisien_Data_Gaussian$X6 / Coefisien_Data_Gaussian$X6_SE

t.beta1
##  [1] 0.7461791 1.3635445 1.0290493 0.7198878 1.1404897 0.7856889 0.7786672
##  [8] 0.7306430 0.8435415 1.1842506 1.1464338 1.1896939 1.2325688 1.1870075
## [15] 0.8188381 1.1187708 1.4504578 1.1915910 0.7255988 1.4082148 0.8089834
## [22] 1.1386998 1.1612377 1.2128096
t.beta2
##  [1] 6.464727 5.949642 6.097789 6.397895 1.483769 6.555098 6.518634 6.344670
##  [9] 6.634725 1.458521 5.399544 1.511861 1.546588 1.443814 6.533728 6.374256
## [17] 5.054682 5.104919 6.430357 6.029061 6.572737 1.398416 1.413604 5.201434
t.beta3
##  [1] -5.406660 -5.094723 -5.305854 -5.403328 -3.663818 -5.430398 -5.404979
##  [8] -5.359759 -5.445706 -3.707164 -4.474191 -3.714038 -3.808708 -3.725619
## [15] -5.449368 -5.310742 -4.257850 -4.387239 -5.433506 -4.931556 -5.417220
## [22] -3.642361 -3.675882 -4.477009
t.beta4
##  [1] -3.829071 -4.596677 -4.338441 -3.833101 -5.038390 -3.813361 -3.821221
##  [8] -3.835493 -3.789142 -4.939064 -5.658559 -4.975245 -4.881780 -4.904049
## [15] -3.785523 -4.335022 -5.340226 -5.691676 -3.823886 -4.638857 -3.808948
## [22] -4.986038 -4.946721 -5.612139
t.beta5
##  [1] 5.130475 5.274288 5.081432 5.115156 3.442944 5.141771 5.145031 5.125835
##  [9] 5.154797 3.382133 4.304647 3.407571 3.342408 3.358034 5.130715 5.139064
## [17] 3.753808 4.234778 5.108202 4.774388 5.152523 3.407857 3.385245 4.277138
t.beta6
##  [1] 3.878256 3.196065 3.479607 3.887311 3.546659 3.824372 3.862613 3.920190
##  [9] 3.749924 3.624305 3.321252 3.573917 3.646415 3.661358 3.722702 3.493358
## [17] 3.780860 3.354985 3.842588 3.029291 3.824190 3.615235 3.636538 3.264601

8. Mengambil Nilai R-Square Lokal GWPR Gaussian

Local_R2 <- Coefisien_Data_Gaussian$Local_R2
Local_R2
##  [1] 0.7043392 0.7059468 0.7043774 0.7043504 0.7073839 0.7043251 0.7043347
##  [8] 0.7043929 0.7043262 0.7074989 0.6954075 0.7075204 0.7075056 0.7074280
## [15] 0.7044049 0.7044525 0.7172430 0.6951332 0.7043397 0.6782019 0.7043279
## [22] 0.7074131 0.7074329 0.6953271

9. Menyimpan Hasil Analisis GWPR ke Dalam Data Frame

Hasil_Model_GWPR_Gaussian <- data.frame(Kabupaten_Kota = Data_GWPR_IPM_Sulsel$`Kabupaten/Kota`,
                               Tahun = Data_GWPR_IPM_Sulsel$Tahun,
                               beta0,beta1,beta2,beta3,beta4,beta5,beta6,
                               t.beta1,t.beta2,t.beta3,t.beta4,t.beta5,t.beta6,
                               Local_R2)
View(Hasil_Model_GWPR_Gaussian)

10. Menentukan Variabel yang Signifikan untuk Setiap Kabupaten/Kota (GWPR Gaussian)

Nilai t-tabel GWPR Gaussian (alpha 10%)

t.tabel_Gaussian <- qt(1 - alpha_Gaussian/2, df_GWPR_Gaussian)
t.tabel_Gaussian
## [1] 1.658739
Sig_X1 <- ifelse(abs(t.beta1) > t.tabel_Gaussian, "X1", "")
Sig_X2  <- ifelse(abs(t.beta2) > t.tabel_Gaussian, "X2", "")
Sig_X3 <- ifelse(abs(t.beta3) > t.tabel_Gaussian, "X3", "")
Sig_X4  <- ifelse(abs(t.beta4) > t.tabel_Gaussian, "X4", "")
Sig_X5 <- ifelse(abs(t.beta5) > t.tabel_Gaussian, "X5", "")
Sig_X6  <- ifelse(abs(t.beta6) > t.tabel_Gaussian, "X6", "")

Variabel_Signifikan <- apply(
  cbind(Sig_X1, Sig_X2, Sig_X3, Sig_X4, Sig_X5, Sig_X6),
  1,
  function(x) paste(x[x != ""], collapse=" ")
)

### Menghitung Nilai p-value untuk Masing-Masing Variabel Independen (GWPR Gaussian)
p_X1 <- 2 * (1 - pt(abs(t.beta1), df = df_GWPR_Gaussian))
p_X2 <- 2 * (1 - pt(abs(t.beta2), df = df_GWPR_Gaussian))
p_X3 <- 2 * (1 - pt(abs(t.beta3), df = df_GWPR_Gaussian))
p_X4 <- 2 * (1 - pt(abs(t.beta4), df = df_GWPR_Gaussian))
p_X5 <- 2 * (1 - pt(abs(t.beta5), df = df_GWPR_Gaussian))
p_X6 <- 2 * (1 - pt(abs(t.beta6), df = df_GWPR_Gaussian))

### Membuat Tabel Variabel Signifikan (GWPR Gaussian)
Kabupaten_Kota <- SHP_Kabupaten_Sulsel_sp@data$Kabupaten.Kota

Tabel_Signifikan_Gaussian <- data.frame(
  Kabupaten_Kota = Kabupaten_Kota,
  Variabel_Signifikan = Variabel_Signifikan,
  R2_Lokal = round(Local_R2,4),
  p_X1 = round(p_X1, 5),
  p_X2 = round(p_X2, 5),
  p_X3 = round(p_X3, 5),
  p_X4 = round(p_X4, 5),
  p_X5 = round(p_X5, 5),
  p_X6 = round(p_X6, 5)
)

View(Tabel_Signifikan_Gaussian)

11. Membuat Kelompok Wilayah Berdasarkan Variabel Signifikan (GWPR Gaussian)

Kelompok_Signifikan <- Tabel_Signifikan_Gaussian %>%
  filter(Variabel_Signifikan != "")

Kelompok_Variabel_Gaussian <- Kelompok_Signifikan %>%
  group_by(Variabel_Signifikan) %>%
  summarise(
    Kabupaten_Kota = paste(Kabupaten_Kota, collapse=", "),
    Jumlah = n()
  ) %>%
  arrange(desc(Jumlah)) %>%
  mutate(Kelompok = row_number()) %>%
  select(Kelompok, Variabel_Signifikan, Kabupaten_Kota)

Kelompok_Variabel_Gaussian
## # A tibble: 2 × 3
##   Kelompok Variabel_Signifikan Kabupaten_Kota                                   
##      <int> <chr>               <chr>                                            
## 1        1 X2 X3 X4 X5 X6      Bantaeng, Barru, Bone, Bulukumba, Gowa, Jenepont…
## 2        2 X3 X4 X5 X6         Enrekang, Kota Palopo, Luwu, Luwu Timur, Luwu Ut…

I. Pemodelan GWPR dengan Fungsi Pembobot Adaptive Bisquare Kernel

1. Menentukan Nilai Bandwidth Optimal Bisquare

Bandwidth.GWPR_Bisquare <- bw.GWPR(formula = IPM ~ X1 + X2 + X3 + X4 + X5 + X6,
                                   data = Data_GWPR_IPM_Sulsel,
                                   index = c("ID", "Tahun"),
                                   SDF = SHP_Kabupaten_Sulsel_sp,
                                   adaptive = TRUE,
                                   approach = "CV",
                                   kernel = "bisquare",
                                   effect = "individual",
                                   model = "random")
## To make sure every subsample have enough freedom, the minimum number of individuals is 2
## The upper boundary is 24, and the lower boundary is 8
## Adaptive Bandwidth: 17 CV score: 0.1339949 
## Adaptive Bandwidth: 14 CV score: 0.1219187 
## Adaptive Bandwidth: 10 CV score: 0.112205 
## Adaptive Bandwidth: 10 CV score: 0.112205
print(Bandwidth.GWPR_Bisquare)
## [1] 10
## Menampilkan Nilai Bandwidth untuk Setiap Lokasi (Bisquare)
k <- Bandwidth.GWPR_Bisquare

bandwidth_lokal_Bisquare <- sapply(1:nrow(Jarak), function(i){
  sort(Jarak[i, ])[k]
})

Hasil_Bandwidth_Bisquare <- data.frame(
  Kabupaten_Kota = Nama_Kab,
  Bandwidth_Bisquare = bandwidth_lokal_Bisquare
)

View(Hasil_Bandwidth_Bisquare)

2. Menentukan Nilai Pembobot Bisquare pada Masing-Masing Kabupaten/Kota

## Menghitung Nilai Bobot Kernel Bisquare Adaptif
Nilai.Bobot_Bisquare <- gw.weight(vd = Jarak,
                                  bw = Bandwidth.GWPR_Bisquare,
                                  kernel = "bisquare",
                                  adaptive = TRUE)

## Memberi Nama kabupaten/kota pada Matriks Pembobot Bisquare
rownames(Nilai.Bobot_Bisquare) <- Nama_Kab
colnames(Nilai.Bobot_Bisquare) <- Nama_Kab

## Menampilkan Nilai Pembobot Bisquare pada Setiap Kabupaten/Kota
cat("\n=== Matriks Pembobot Bisquare Adaptif ===\n")
## 
## === Matriks Pembobot Bisquare Adaptif ===
print(round(Nilai.Bobot_Bisquare, 4))
##                          Bantaeng  Barru   Bone Bulukumba Enrekang   Gowa
## Bantaeng                   1.0000 0.0000 0.0000    0.8474   0.0000 0.6521
## Barru                      0.0000 1.0000 0.3608    0.0000   0.0000 0.0000
## Bone                       0.0000 0.3802 1.0000    0.1026   0.0000 0.0000
## Bulukumba                  0.8116 0.0000 0.0184    1.0000   0.0000 0.2347
## Enrekang                   0.0000 0.0000 0.0000    0.0000   1.0000 0.0000
## Gowa                       0.7035 0.0000 0.0213    0.4274   0.0000 1.0000
## Jeneponto                  0.7449 0.0000 0.0000    0.3894   0.0000 0.7701
## Kepulauan Selayar          0.0000 0.0000 0.0000    0.0000   0.0000 0.0000
## Kota Makassar              0.1491 0.0379 0.0000    0.0258   0.0000 0.6821
## Kota Palopo                0.0000 0.0000 0.0000    0.0000   0.2458 0.0000
## Kota Parepare              0.0000 0.5606 0.0000    0.0000   0.2855 0.0000
## Luwu                       0.0000 0.0000 0.0000    0.0000   0.5299 0.0000
## Luwu Timur                 0.0000 0.0000 0.0000    0.0000   0.0000 0.0000
## Luwu Utara                 0.0000 0.0000 0.0000    0.0000   0.0000 0.0000
## Maros                      0.2774 0.2801 0.3588    0.2049   0.0000 0.6808
## Pangkajene Dan Kepulauan   0.0190 0.3129 0.0601    0.0000   0.0000 0.4152
## Pinrang                    0.0000 0.0000 0.0000    0.0000   0.7574 0.0000
## Sidenreng Rappang          0.0000 0.0927 0.0000    0.0000   0.7260 0.0000
## Sinjai                     0.7147 0.0000 0.3443    0.8599   0.0000 0.4396
## Soppeng                    0.0000 0.8549 0.5068    0.0000   0.0000 0.0000
## Takalar                    0.3449 0.0000 0.0000    0.0826   0.0000 0.7539
## Tana Toraja                0.0000 0.0000 0.0000    0.0000   0.5542 0.0000
## Toraja Utara               0.0000 0.0000 0.0000    0.0000   0.1926 0.0000
## Wajo                       0.0000 0.1260 0.0513    0.0000   0.2779 0.0000
##                          Jeneponto Kepulauan Selayar Kota Makassar Kota Palopo
## Bantaeng                    0.8201            0.3152        0.1400      0.0000
## Barru                       0.0000            0.0000        0.0260      0.0000
## Bone                        0.0000            0.0000        0.0000      0.0000
## Bulukumba                   0.4580            0.3675        0.0000      0.0000
## Enrekang                    0.0000            0.0000        0.0000      0.4851
## Gowa                        0.8636            0.1086        0.7247      0.0000
## Jeneponto                   1.0000            0.2215        0.3882      0.0000
## Kepulauan Selayar           0.0000            1.0000        0.0000      0.0000
## Kota Makassar               0.5553            0.0033        1.0000      0.0000
## Kota Palopo                 0.0000            0.0000        0.0000      1.0000
## Kota Parepare               0.0000            0.0000        0.0000      0.0000
## Luwu                        0.0000            0.0000        0.0000      0.9161
## Luwu Timur                  0.0000            0.0000        0.0000      0.0000
## Luwu Utara                  0.0000            0.0000        0.0000      0.4960
## Maros                       0.4350            0.0112        0.7449      0.0000
## Pangkajene Dan Kepulauan    0.2830            0.0000        0.8809      0.0000
## Pinrang                     0.0000            0.0000        0.0000      0.1409
## Sidenreng Rappang           0.0000            0.0000        0.0000      0.1350
## Sinjai                      0.4394            0.1888        0.0807      0.0000
## Soppeng                     0.0000            0.0000        0.0000      0.0000
## Takalar                     0.8523            0.0647        0.7657      0.0000
## Tana Toraja                 0.0000            0.0000        0.0000      0.6681
## Toraja Utara                0.0000            0.0000        0.0000      0.8480
## Wajo                        0.0000            0.0000        0.0000      0.0121
##                          Kota Parepare   Luwu Luwu Timur Luwu Utara  Maros
## Bantaeng                        0.0000 0.0000     0.0000     0.0000 0.0018
## Barru                           0.6461 0.0000     0.0000     0.0000 0.0007
## Bone                            0.0522 0.0000     0.0000     0.0000 0.0415
## Bulukumba                       0.0000 0.0000     0.0000     0.0000 0.0000
## Enrekang                        0.3863 0.6468     0.0839     0.2355 0.0000
## Gowa                            0.0000 0.0000     0.0000     0.0000 0.4947
## Jeneponto                       0.0000 0.0000     0.0000     0.0000 0.0000
## Kepulauan Selayar               0.0000 0.0000     0.0000     0.0000 0.0000
## Kota Makassar                   0.0000 0.0000     0.0000     0.0000 0.5302
## Kota Palopo                     0.0000 0.9002     0.4501     0.7503 0.0000
## Kota Parepare                   1.0000 0.0000     0.0000     0.0000 0.0000
## Luwu                            0.0000 1.0000     0.3890     0.5576 0.0000
## Luwu Timur                      0.0000 0.0000     1.0000     0.3852 0.0000
## Luwu Utara                      0.0000 0.1096     0.5242     1.0000 0.0000
## Maros                           0.0000 0.0000     0.0000     0.0000 1.0000
## Pangkajene Dan Kepulauan        0.0000 0.0000     0.0000     0.0000 0.6399
## Pinrang                         0.6485 0.2088     0.0000     0.0781 0.0000
## Sidenreng Rappang               0.7063 0.3111     0.0239     0.0384 0.0000
## Sinjai                          0.0000 0.0000     0.0000     0.0000 0.1171
## Soppeng                         0.6866 0.0000     0.0000     0.0000 0.0000
## Takalar                         0.0000 0.0000     0.0000     0.0000 0.0668
## Tana Toraja                     0.0002 0.5778     0.1096     0.5120 0.0000
## Toraja Utara                    0.0000 0.6206     0.2585     0.7612 0.0000
## Wajo                            0.4794 0.1210     0.0216     0.0000 0.0000
##                          Pangkajene Dan Kepulauan Pinrang Sidenreng Rappang
## Bantaeng                                   0.0000  0.0000            0.0000
## Barru                                      0.2005  0.0000            0.1326
## Bone                                       0.0084  0.0000            0.0000
## Bulukumba                                  0.0000  0.0000            0.0000
## Enrekang                                   0.0000  0.7482            0.7382
## Gowa                                       0.4025  0.0000            0.0000
## Jeneponto                                  0.0279  0.0000            0.0000
## Kepulauan Selayar                          0.0000  0.0000            0.0000
## Kota Makassar                              0.8577  0.0000            0.0000
## Kota Palopo                                0.0000  0.0000            0.0000
## Kota Parepare                              0.0000  0.5634            0.6612
## Luwu                                       0.0000  0.0459            0.1723
## Luwu Timur                                 0.0000  0.0000            0.0000
## Luwu Utara                                 0.0000  0.0000            0.0000
## Maros                                      0.7723  0.0000            0.0000
## Pangkajene Dan Kepulauan                   1.0000  0.0000            0.0000
## Pinrang                                    0.0000  1.0000            0.6039
## Sidenreng Rappang                          0.0000  0.5717            1.0000
## Sinjai                                     0.0027  0.0000            0.0000
## Soppeng                                    0.0000  0.0143            0.3811
## Takalar                                    0.3209  0.0000            0.0000
## Tana Toraja                                0.0000  0.3461            0.0620
## Toraja Utara                               0.0000  0.0032            0.0000
## Wajo                                       0.0000  0.0961            0.7977
##                          Sinjai Soppeng Takalar Tana Toraja Toraja Utara   Wajo
## Bantaeng                 0.6400  0.0000  0.5156      0.0000       0.0000 0.0000
## Barru                    0.0000  0.8604  0.0000      0.0000       0.0000 0.3162
## Bone                     0.2262  0.5392  0.0000      0.0000       0.0000 0.2461
## Bulukumba                0.7791  0.0000  0.1543      0.0000       0.0000 0.0000
## Enrekang                 0.0000  0.0000  0.0000      0.6716       0.5112 0.4436
## Gowa                     0.4029  0.0000  0.8549      0.0000       0.0000 0.0000
## Jeneponto                0.1349  0.0000  0.8536      0.0000       0.0000 0.0000
## Kepulauan Selayar        0.0000  0.0000  0.0000      0.0000       0.0000 0.0000
## Kota Makassar            0.0084  0.0000  0.8395      0.0000       0.0000 0.0000
## Kota Palopo              0.0000  0.0000  0.0000      0.6174       0.8710 0.0000
## Kota Parepare            0.0000  0.6227  0.0000      0.0209       0.0000 0.5368
## Luwu                     0.0000  0.0000  0.0000      0.5845       0.7228 0.1294
## Luwu Timur               0.0000  0.0000  0.0000      0.0000       0.0000 0.0000
## Luwu Utara               0.0000  0.0000  0.0000      0.0689       0.5809 0.0000
## Maros                    0.3359  0.1073  0.5622      0.0000       0.0000 0.0000
## Pangkajene Dan Kepulauan 0.0000  0.0545  0.5754      0.0000       0.0000 0.0000
## Pinrang                  0.0000  0.0238  0.0000      0.5194       0.2914 0.2828
## Sidenreng Rappang        0.0000  0.3574  0.0000      0.1959       0.1271 0.8476
## Sinjai                   1.0000  0.0000  0.2448      0.0000       0.0000 0.0000
## Soppeng                  0.0000  1.0000  0.0000      0.0000       0.0000 0.6388
## Takalar                  0.0019  0.0000  1.0000      0.0000       0.0000 0.0000
## Tana Toraja              0.0000  0.0000  0.0000      1.0000       0.8875 0.0000
## Toraja Utara             0.0000  0.0000  0.0000      0.8454       1.0000 0.0000
## Wajo                     0.0000  0.5124  0.0000      0.0000       0.0006 1.0000
View(Nilai.Bobot_Bisquare)

3. Melakukan Estimasi Parameter Model GWPR Bisquare

Model.GWPR_Bisquare <- GWPR(formula = IPM ~ X1 + X2 + X3 + X4 + X5 + X6,
                            data = Data_GWPR_IPM_Sulsel,
                            SDF = SHP_Kabupaten_Sulsel_sp,
                            index = c("ID", "Tahun"),
                            bw = Bandwidth.GWPR_Bisquare,
                            adaptive = TRUE,
                            p = 2,
                            longlat = FALSE,
                            kernel = "bisquare",
                            effect = "individual",
                            model = "random")
## ************************ GWPR Begin *************************
## Formula: IPM  =  X1 + X2 + X3 + X4 + X5 + X6 -- Individuals: 24
## Bandwidth: 10 ---- Adaptive: TRUE
## Model: random ---- Effect: individual
## The R2 is: 0.988403605438812
## Note: in order to avoid mistakes, we forced a rename of the individuals'ID as "id".
summary(Model.GWPR_Bisquare)
##                Length Class                    Mode     
## GW.arguments    7     -none-                   list     
## R2              1     -none-                   numeric  
## index           2     -none-                   character
## plm.result     11     plm                      list     
## raw.data       13     data.frame               list     
## GWPR.residuals  5     data.frame               list     
## SDF            24     SpatialPolygonsDataFrame S4

4. Menampilkan Hasil Ringkasan Estimasi Parameter Model GWPR Bisquare

Coefisien_Data_Bisquare <- Model.GWPR_Bisquare$SDF@data
Variabel <- c("Intercept","X1","X2","X3","X4","X5","X6")

Tabel_Estimasi_Bisquare <- data.frame(Variabel = Variabel,
                             Min = apply(Coefisien_Data_Bisquare[, Variabel], 2, min),
                             Q1 = apply(Coefisien_Data_Bisquare[, Variabel], 2, quantile, 0.25),
                             Median = apply(Coefisien_Data_Bisquare[, Variabel], 2, median),
                             Q3 = apply(Coefisien_Data_Bisquare[, Variabel], 2, quantile, 0.75),
                             Max = apply(Coefisien_Data_Bisquare[, Variabel], 2, max))

print(Tabel_Estimasi_Bisquare)
##            Variabel           Min            Q1        Median            Q3
## Intercept Intercept  4.589854e+01  6.303124e+01  66.438905829  7.466529e+01
## X1               X1 -1.914804e-01 -6.311679e-02   0.042919487  1.556614e-01
## X2               X2 -5.115167e-05  4.907169e-04   0.000664205  9.163836e-04
## X3               X3 -3.979245e-01 -2.262272e-01  -0.174109228 -1.319098e-01
## X4               X4 -2.819735e+01 -2.021643e+01 -13.713354328 -1.111556e+01
## X5               X5  1.036138e-02  1.389519e-02   0.015961182  1.793951e-02
## X6               X6  2.189343e-02  3.151294e-02   0.042527751  7.428944e-02
##                    Max
## Intercept 79.988640575
## X1         0.270141074
## X2         0.001884342
## X3        -0.067266694
## X4        -6.853571383
## X5         0.019593772
## X6         0.103370467

5. Melakukan Uji Kesesuaian Model GWPR Bisquare

## A. Perhitungan Derajat Kebebasan (df) - Adaptive Bisquare Kernel
### Menyiapkan Data Panel (GWPR Bisquare)
Data_Bisquare <- Data_GWPR_IPM_Sulsel

### Membentuk Matriks Variabel Independen (X)(120x7) GWPR Bisquare
X <- cbind(1,
           Data_Bisquare$X1,
           Data_Bisquare$X2,
           Data_Bisquare$X3,
           Data_Bisquare$X4,
           Data_Bisquare$X5,
           Data_Bisquare$X6)

n <- nrow(X)
j <- ncol(X)

### Mengidentifikasi Kabupaten/Kota GWPR Bisquare
kab_Bisquare <- as.factor(Data_Bisquare$`Kabupaten/Kota`)

### Mapping indeks kabupaten ke matriks bobot Bisquare (24 x 24)
index_kab_Bisquare <- match(kab_Bisquare, rownames(Nilai.Bobot_Bisquare))

### Melakukan Inisialisasi Elemen Diagonal Hat Matrix Bisquare
sii_Bisquare <- numeric(n)

### Melakukan Perhitungan Nilai s_ii untuk Setiap Observasi Bisquare
for(i in 1:n){
  ## Bobot Spasial Bisquare Kabupaten (24)
  wi_kab_Bisquare <- Nilai.Bobot_Bisquare[index_kab_Bisquare[i], ]
  
  ## Mapping Bobot Bisquare ke 120 Observasi Panel
  wi_full_Bisquare <- wi_kab_Bisquare[index_kab_Bisquare]
  
  ## Membentuk Matriks Diagonal Bisquare (120 x 120)
  Wi_Bisquare <- diag(wi_full_Bisquare)
  
  ## hitung (X' W_i X) Bisquare
  XtWiX_Bisquare <- t(X) %*% Wi_Bisquare %*% X
  XtWiX_inv_Bisquare <- solve(XtWiX_Bisquare + diag(1e-5, j))
  xi_Bisquare <- matrix(X[i, ], ncol = 1)
  wii_Bisquare <- wi_full_Bisquare[i]
  sii_Bisquare[i] <- t(xi_Bisquare) %*% XtWiX_inv_Bisquare %*% xi_Bisquare * wii_Bisquare
}

### Menghitung Derajat Kebebasan Bisquare
df_model_Bisquare <- sum(sii_Bisquare)
df_residual_Bisquare <- n - df_model_Bisquare

### Menghitung Nilai SSE (GWPR Bisquare)
SSE_REM <- sum(residuals(Model_REM)^2)
SSE_GWPR_Bisquare <- sum(Model.GWPR_Bisquare$GWPR.residuals$resid^2)

### Menghitung Derajat Bebas Model Global dan Model GWPR Bisquare
df_REM <- df.residual(Model_REM)
df_GWPR_Bisquare <- df_residual_Bisquare

### Melakukan Uji Kesesuaian Model GWPR Bisquare
F_hitung_Bisquare <- (SSE_REM/df_REM)/(SSE_GWPR_Bisquare/df_GWPR_Bisquare)
F_hitung_Bisquare
## [1] 1.317184
### Menentukan Nilai F Tabel GWPR Bisquare
alpha_Bisquare <- 0.10
F_tabel_Bisquare <- qf(1 - alpha_Bisquare, df_REM, df_GWPR_Bisquare)
F_tabel_Bisquare
## [1] 1.302617
### Menentukan Daerah Keputusan Uji Kesesuain Model GWPR Bisqaure
if(F_hitung_Bisquare > F_tabel_Bisquare){
  cat("H1: Model GWPR Bisquare lebih baik dibandingkan model global\n")
} else {
  cat("H0: Model global sudah cukup dibandingkan GWPR Bisquare\n")
}
## H1: Model GWPR Bisquare lebih baik dibandingkan model global
### Menghitung Nilai P-Value GWPR Bisquare
p_value_bisquare <- 1 - pf(F_hitung_Bisquare, df_REM, df_GWPR_Bisquare, lower.tail = TRUE)
p_value_bisquare
## [1] 0.09088053
if(p_value_bisquare < 0.10){
  cat("H1: Model GWPR Bisquare lebih baik dibandingkan model global\n")
} else {
  cat("H0: Model global sudah cukup dibandingkan GWPR Bisquare\n")
}
## H1: Model GWPR Bisquare lebih baik dibandingkan model global

6. Melakukan Estimasi Parameter Lokal Model GWPR Bisquare

beta0_b <- Coefisien_Data_Bisquare$Intercept
beta1_b <- Coefisien_Data_Bisquare$X1
beta2_b <- Coefisien_Data_Bisquare$X2
beta3_b <- Coefisien_Data_Bisquare$X3
beta4_b <- Coefisien_Data_Bisquare$X4
beta5_b <- Coefisien_Data_Bisquare$X5
beta6_b <- Coefisien_Data_Bisquare$X6

beta0_b
##  [1] 74.95826 60.87283 64.15672 79.98864 75.45761 71.90272 72.70277 74.56763
##  [9] 66.96345 57.21150 56.78576 65.23932 45.89854 56.48064 76.79974 65.91437
## [17] 61.34042 64.77429 76.27173 63.59484 70.41738 69.70960 76.65530 64.45074
beta1_b
##  [1] -0.09949282  0.18518662  0.13207287 -0.19148039 -0.05769011 -0.06191822
##  [7] -0.06671252 -0.07638911 -0.03230369  0.15449683  0.25745051  0.09866181
## [13]  0.27014107  0.14636705 -0.18695600  0.02979767  0.16764317  0.15915509
## [19] -0.13526621  0.14441618 -0.03940326  0.05604131 -0.01902266  0.16753017
beta2_b
##  [1]  7.453584e-04  9.499481e-04  5.826427e-04  9.750554e-04  4.580081e-04
##  [6]  6.611283e-04  6.867779e-04  6.938866e-04  6.522559e-04  3.857712e-04
## [11]  1.884342e-03  5.016198e-04  5.781280e-04  3.094063e-04  6.672817e-04
## [16]  6.816088e-04  1.880383e-04  9.109013e-04  9.328308e-04  1.309254e-03
## [21]  6.501968e-04  1.086853e-04 -5.115167e-05  1.184046e-03
beta3_b
##  [1] -0.17533596 -0.24372925 -0.20500326 -0.22541023 -0.06726669 -0.13229274
##  [7] -0.14501889 -0.19665115 -0.12322056 -0.17674003 -0.39792449 -0.15042691
## [13] -0.17288250 -0.17866940 -0.11673062 -0.14797829 -0.13076109 -0.22867795
## [19] -0.23230527 -0.27958526 -0.12528645 -0.14337803 -0.12684448 -0.27154727
beta4_b
##  [1] -12.553966 -17.374463 -13.602060 -11.127995 -23.516884 -13.122529
##  [7] -13.756567 -14.079792  -9.377191 -11.078274 -24.778743 -20.198529
## [13]  -8.757108  -6.853571  -8.803230 -12.295620 -23.657204 -27.194728
## [19] -10.235922 -20.270122 -13.670141 -17.049649 -13.851278 -28.197351
beta5_b
##  [1] 0.01663399 0.01567220 0.01959377 0.01591549 0.01253641 0.01795766
##  [7] 0.01793346 0.01690277 0.01704555 0.01401658 0.01913362 0.01311953
## [13] 0.01070743 0.01353102 0.01600688 0.01564582 0.01036138 0.01547706
## [19] 0.01839209 0.01832357 0.01798320 0.01349012 0.01552435 0.01738922
beta6_b
##  [1] 0.03329270 0.03020857 0.02223009 0.03927600 0.08025877 0.03253823
##  [7] 0.02972484 0.03999005 0.05042370 0.09706135 0.02360796 0.07396329
## [13] 0.10337047 0.10265219 0.06333477 0.04965077 0.09729467 0.04506545
## [19] 0.03788181 0.02189343 0.03120258 0.07526790 0.05901812 0.03161639

7. Menghitung Nilai t-Statistik Lokal GWPR Bisquare

t.beta1_b <- Coefisien_Data_Bisquare$X1 / Coefisien_Data_Bisquare$X1_SE
t.beta2_b <- Coefisien_Data_Bisquare$X2 / Coefisien_Data_Bisquare$X2_SE
t.beta3_b <- Coefisien_Data_Bisquare$X3 / Coefisien_Data_Bisquare$X3_SE
t.beta4_b <- Coefisien_Data_Bisquare$X4 / Coefisien_Data_Bisquare$X4_SE
t.beta5_b <- Coefisien_Data_Bisquare$X5 / Coefisien_Data_Bisquare$X5_SE
t.beta6_b <- Coefisien_Data_Bisquare$X6 / Coefisien_Data_Bisquare$X6_SE

t.beta1_b
##  [1] -1.3992391  0.9457160  0.6999280 -3.2312086 -0.3916695 -0.7556431
##  [7] -0.8974390 -0.7704750 -0.2121599  1.2952375  1.5972432  0.8525330
## [13]  3.2567254  1.3463797 -1.6550201  0.1927757  1.1860993  1.1422449
## [19] -1.5757631  0.7377429 -0.4489997  0.4640077 -0.1395309  1.0567751
t.beta2_b
##  [1]  7.7344285  3.0581878  1.8307839  6.3182433  1.3643084 11.3978852
##  [7] 11.6792419  3.4068589  7.0505834  1.2981681  3.5389804  1.6582190
## [13]  2.4654197  1.1007319  7.8009462  4.7300907  0.4603677  2.2786802
## [19]  4.2123094  2.9921240 12.0715867  0.3730043 -0.1887472  2.8978834
t.beta3_b
##  [1] -5.4575313 -4.1606625 -4.3637092 -6.3257959 -0.8850632 -4.8441807
##  [7] -5.5231322 -4.1384981 -4.0220321 -3.3073223 -3.9112806 -2.4683790
## [13] -5.9637378 -4.3733232 -4.1521211 -4.0137463 -1.6959230 -2.4689695
## [19] -4.2361650 -4.1481724 -4.7670238 -2.4240767 -2.3227215 -3.2429665
t.beta4_b
##  [1] -3.716457 -3.241905 -2.802684 -3.348566 -5.763291 -3.245152 -3.375292
##  [8] -3.429411 -2.253276 -2.154009 -5.554569 -4.139938 -2.251545 -1.521171
## [15] -2.433937 -2.831783 -6.796955 -5.300329 -3.097247 -3.457447 -3.015415
## [22] -4.050249 -3.192450 -4.780174
t.beta5_b
##  [1] 3.076787 3.094198 2.674476 2.280934 3.562296 4.035318 3.595715 3.513819
##  [9] 5.145631 2.075668 4.885814 2.716717 1.746502 1.911775 5.854912 3.841700
## [17] 3.224683 3.961253 2.901141 3.631225 3.863252 2.729771 2.931680 4.008137
t.beta6_b
##  [1] 3.646483 1.733259 1.367890 4.099369 3.099304 2.818665 2.626427 4.144022
##  [9] 3.603055 3.058026 1.465541 2.643303 3.697989 3.317657 5.396858 3.214385
## [17] 3.550313 2.334206 3.952097 1.253743 2.338822 2.986705 2.273651 1.752895

8. Mengambil Nilai R-Square Lokal GWPR Bisquare

Local_R2_Bisquare <- Coefisien_Data_Bisquare$Local_R2
Local_R2_Bisquare
##  [1] 0.8151311 0.6874142 0.6857658 0.8569077 0.6664864 0.8136915 0.8373891
##  [8] 0.8047812 0.7523859 0.7219960 0.5796077 0.7110444 0.7054178 0.6976338
## [15] 0.7250040 0.6851688 0.6681180 0.6409811 0.7739547 0.6917703 0.8186813
## [22] 0.7133514 0.7167406 0.6825989

9. Menyimpan Hasil Analisis GWPR Bisquare ke Dalam Data Frame

Hasil_Model_GWPR_Bisquare <- data.frame(Kabupaten_Kota = Data_GWPR_IPM_Sulsel$`Kabupaten/Kota`,
                                        Tahun = Data_IPM_Sulawesi_Selatan$Tahun,
                                        beta0_b, beta1_b, beta2_b, beta3_b, beta4_b, beta5_b, beta6_b,
                                        t.beta1_b, t.beta2_b, t.beta3_b, t.beta4_b, t.beta5_b, t.beta6_b,
                                        Local_R2_Bisquare)
View(Hasil_Model_GWPR_Bisquare)

10. Menentukan Variabel yang Signifikan untuk Setiap Kabupaten/Kota (GWPR Bisquare)

Nilai t-tabel GWPR Bisquare (alpha 10%)

t.tabel_Bisquare <- qt(1 - alpha_Bisquare/2, df_GWPR_Bisquare)
t.tabel_Bisquare
## [1] 1.662883
Sig_X1_b <- ifelse(abs(t.beta1_b) > t.tabel_Bisquare, "X1", "")
Sig_X2_b <- ifelse(abs(t.beta2_b) > t.tabel_Bisquare, "X2", "")
Sig_X3_b <- ifelse(abs(t.beta3_b) > t.tabel_Bisquare, "X3", "")
Sig_X4_b <- ifelse(abs(t.beta4_b) > t.tabel_Bisquare, "X4", "")
Sig_X5_b <- ifelse(abs(t.beta5_b) > t.tabel_Bisquare, "X5", "")
Sig_X6_b <- ifelse(abs(t.beta6_b) > t.tabel_Bisquare, "X6", "")

Variabel_Signifikan_Bisquare <- apply(
  cbind(Sig_X1_b, Sig_X2_b, Sig_X3_b, Sig_X4_b, Sig_X5_b, Sig_X6_b),
  1,
  function(x) paste(x[x != ""], collapse=" ")
)

### Menghitung Nilai p-value untuk Masing-Masing Variabel Independen (GWPR Bisquare)
p_X1_b <- 2 * (1 - pt(abs(t.beta1_b), df = df_GWPR_Bisquare))
p_X2_b <- 2 * (1 - pt(abs(t.beta2_b), df = df_GWPR_Bisquare))
p_X3_b <- 2 * (1 - pt(abs(t.beta3_b), df = df_GWPR_Bisquare))
p_X4_b <- 2 * (1 - pt(abs(t.beta4_b), df = df_GWPR_Bisquare))
p_X5_b <- 2 * (1 - pt(abs(t.beta5_b), df = df_GWPR_Bisquare))
p_X6_b <- 2 * (1 - pt(abs(t.beta6_b), df = df_GWPR_Bisquare))

### Membuat Tabel Variabel Signifikan (GWPR Bisquare)
Kabupaten_Kota <- SHP_Kabupaten_Sulsel_sp@data$Kabupaten.Kota

Tabel_Signifikan_Bisquare <- data.frame(
  Kabupaten_Kota = Kabupaten_Kota,
  Variabel_Signifikan = Variabel_Signifikan_Bisquare,
  R2_Lokal = round(Local_R2_Bisquare,4),
  p_X1_b = round(p_X1_b, 5),
  p_X2_b = round(p_X2_b, 5),
  p_X3_b = round(p_X3_b, 5),
  p_X4_b = round(p_X4_b, 5),
  p_X5_b = round(p_X5_b, 5),
  p_X6_b = round(p_X6_b, 5)
)

View(Tabel_Signifikan_Bisquare)

11. Membuat Kelompok Wilayah Berdasarkan Variabel Signifikan (GWPR Bisquare)

Kelompok_Signifikan_Bisquare <- Tabel_Signifikan_Bisquare %>%
  filter(Variabel_Signifikan != "")

Kelompok_Variabel_Bisquare <- Kelompok_Signifikan_Bisquare %>%
  group_by(Variabel_Signifikan) %>%
  summarise(
    Kabupaten_Kota = paste(Kabupaten_Kota, collapse=", "),
    Jumlah = n()
  ) %>%
  arrange(desc(Jumlah)) %>%
  mutate(Kelompok = row_number()) %>%
  select(Kelompok, Variabel_Signifikan , Kabupaten_Kota)

Kelompok_Variabel_Bisquare
## # A tibble: 6 × 3
##   Kelompok Variabel_Signifikan Kabupaten_Kota                                   
##      <int> <chr>               <chr>                                            
## 1        1 X2 X3 X4 X5 X6      Bantaeng, Barru, Gowa, Jeneponto, Kepulauan Sela…
## 2        2 X3 X4 X5 X6         Kota Palopo, Luwu, Pinrang, Tana Toraja, Toraja …
## 3        3 X2 X3 X4 X5         Bone, Kota Parepare, Soppeng                     
## 4        4 X1 X2 X3 X4 X5 X6   Bulukumba, Luwu Timur                            
## 5        5 X3 X5 X6            Luwu Utara                                       
## 6        6 X4 X5 X6            Enrekang

J. Pemodelan GWPR dengan Fungsi Pembobot Adaptive Tricube Kernel

1. Menentukan Nilai Bandwidth Optimal Tricube

Bandwidth.GWPR_Tricube <- bw.GWPR(formula = IPM ~ X1 + X2 + X3 + X4 + X5 + X6,
                                  data = Data_GWPR_IPM_Sulsel,
                                  index = c("ID", "Tahun"),
                                  SDF = SHP_Kabupaten_Sulsel_sp,
                                  adaptive = TRUE,
                                  approach = "CV",
                                  kernel = "tricube",
                                  effect = "individual",
                                  model = "random")
## To make sure every subsample have enough freedom, the minimum number of individuals is 2
## The upper boundary is 24, and the lower boundary is 8
## Adaptive Bandwidth: 17 CV score: 0.1470446 
## Adaptive Bandwidth: 14 CV score: 0.1333779 
## Adaptive Bandwidth: 10 CV score: 0.1199 
## Adaptive Bandwidth: 10 CV score: 0.1199
print(Bandwidth.GWPR_Tricube)
## [1] 10
## Menampilkan Nilai Bandwidth untuk Setiap Lokasi (Tricube)
k <- Bandwidth.GWPR_Tricube

bandwidth_lokal_Tricube <- sapply(1:nrow(Jarak), function(i){
  sort(Jarak[i, ])[k]
})

Hasil_Bandwidth_Tricube <- data.frame(
  Kabupaten_Kota = Nama_Kab,
  Bandwidth_Tricube = bandwidth_lokal_Tricube
)

View(Hasil_Bandwidth_Tricube)

2. Menentukan Nilai Pembobot Tricube pada Masing-Masing Kabupaten/Kota

## Menghitung Nilai Bobot Kernel Tricube Adaptif
Nilai.Bobot_Tricube <- gw.weight(vd = Jarak,
                                 bw = Bandwidth.GWPR_Tricube,
                                 kernel = "tricube",
                                 adaptive = TRUE)

## Memberi Nama kabupaten/kota pada Matriks Pembobot Tricube
rownames(Nilai.Bobot_Tricube) <- Nama_Kab
colnames(Nilai.Bobot_Tricube) <- Nama_Kab

## Menampilkan Nilai Pembobot Tricube pada Setiap Kabupaten/Kota
cat("\n=== Matriks Pembobot Tricube Adaptif ===\n")
## 
## === Matriks Pembobot Tricube Adaptif ===
print(round(Nilai.Bobot_Tricube, 4))
##                          Bantaeng  Barru   Bone Bulukumba Enrekang   Gowa
## Bantaeng                   1.0000 0.0000 0.0000    0.9343   0.0000 0.7675
## Barru                      0.0000 1.0000 0.4179    0.0000   0.0000 0.0000
## Bone                       0.0000 0.4435 1.0000    0.0850   0.0000 0.0000
## Bulukumba                  0.9093 0.0000 0.0076    1.0000   0.0000 0.2499
## Enrekang                   0.0000 0.0000 0.0000    0.0000   1.0000 0.0000
## Gowa                       0.8180 0.0000 0.0093    0.5048   0.0000 1.0000
## Jeneponto                  0.8555 0.0000 0.0000    0.4556   0.0000 0.8769
## Kepulauan Selayar          0.0000 0.0000 0.0000    0.0000   0.0000 0.0000
## Kota Makassar              0.1399 0.0213 0.0000    0.0123   0.0000 0.7975
## Kota Palopo                0.0000 0.0000 0.0000    0.0000   0.2646 0.0000
## Kota Parepare              0.0000 0.6677 0.0000    0.0000   0.3175 0.0000
## Luwu                       0.0000 0.0000 0.0000    0.0000   0.6318 0.0000
## Luwu Timur                 0.0000 0.0000 0.0000    0.0000   0.0000 0.0000
## Luwu Utara                 0.0000 0.0000 0.0000    0.0000   0.0000 0.0000
## Maros                      0.3067 0.3102 0.4152    0.2107   0.0000 0.7962
## Pangkajene Dan Kepulauan   0.0080 0.3541 0.0408    0.0000   0.0000 0.4891
## Pinrang                    0.0000 0.0000 0.0000    0.0000   0.8663 0.0000
## Sidenreng Rappang          0.0000 0.0740 0.0000    0.0000   0.8388 0.0000
## Sinjai                     0.8285 0.0000 0.3960    0.9423   0.0000 0.5204
## Soppeng                    0.0000 0.9392 0.6042    0.0000   0.0000 0.0000
## Takalar                    0.3968 0.0000 0.0000    0.0633   0.0000 0.8634
## Tana Toraja                0.0000 0.0000 0.0000    0.0000   0.6603 0.0000
## Toraja Utara               0.0000 0.0000 0.0000    0.0000   0.1948 0.0000
## Wajo                       0.0000 0.1119 0.0327    0.0000   0.3074 0.0000
##                          Jeneponto Kepulauan Selayar Kota Makassar Kota Palopo
## Bantaeng                    0.9155            0.3572        0.1287      0.0000
## Barru                       0.0000            0.0000        0.0125      0.0000
## Bone                        0.0000            0.0000        0.0000      0.0000
## Bulukumba                   0.5438            0.4268        0.0000      0.0000
## Enrekang                    0.0000            0.0000        0.0000      0.5776
## Gowa                        0.9446            0.0918        0.8376      0.0000
## Jeneponto                   1.0000            0.2324        0.4540      0.0000
## Kepulauan Selayar           0.0000            1.0000        0.0000      0.0000
## Kota Makassar               0.6616            0.0006        1.0000      0.0000
## Kota Palopo                 0.0000            0.0000        0.0000      1.0000
## Kota Parepare               0.0000            0.0000        0.0000      0.0000
## Luwu                        0.0000            0.0000        0.0000      0.9736
## Luwu Timur                  0.0000            0.0000        0.0000      0.0000
## Luwu Utara                  0.0000            0.0000        0.0000      0.5910
## Maros                       0.5145            0.0037        0.8556      0.0000
## Pangkajene Dan Kepulauan    0.3141            0.0000        0.9550      0.0000
## Pinrang                     0.0000            0.0000        0.0000      0.1298
## Sidenreng Rappang           0.0000            0.0000        0.0000      0.1226
## Sinjai                      0.5203            0.1898        0.0612      0.0000
## Soppeng                     0.0000            0.0000        0.0000      0.0000
## Takalar                     0.9375            0.0452        0.8732      0.0000
## Tana Toraja                 0.0000            0.0000        0.0000      0.7837
## Toraja Utara                0.0000            0.0000        0.0000      0.9347
## Wajo                        0.0000            0.0000        0.0000      0.0041
##                          Kota Parepare   Luwu Luwu Timur Luwu Utara  Maros
## Bantaeng                        0.0000 0.0000     0.0000     0.0000 0.0002
## Barru                           0.7613 0.0000     0.0000     0.0000 0.0001
## Bone                            0.0335 0.0000     0.0000     0.0000 0.0243
## Bulukumba                       0.0000 0.0000     0.0000     0.0000 0.0000
## Enrekang                        0.4515 0.7621     0.0646     0.2509 0.0000
## Gowa                            0.0000 0.0000     0.0000     0.0000 0.5894
## Jeneponto                       0.0000 0.0000     0.0000     0.0000 0.0000
## Kepulauan Selayar               0.0000 0.0000     0.0000     0.0000 0.0000
## Kota Makassar                   0.0000 0.0000     0.0000     0.0000 0.6322
## Kota Palopo                     0.0000 0.9656     0.5338     0.8602 0.0000
## Kota Parepare                   1.0000 0.0000     0.0000     0.0000 0.0000
## Luwu                            0.0000 1.0000     0.4550     0.6643 0.0000
## Luwu Timur                      0.0000 0.0000     1.0000     0.4501 0.0000
## Luwu Utara                      0.0000 0.0928     0.6251     1.0000 0.0000
## Maros                           0.0000 0.0000     0.0000     0.0000 1.0000
## Pangkajene Dan Kepulauan        0.0000 0.0000     0.0000     0.0000 0.7549
## Pinrang                         0.7637 0.2158     0.0000     0.0586 0.0000
## Sidenreng Rappang               0.8207 0.3518     0.0111     0.0217 0.0000
## Sinjai                          0.0000 0.0000     0.0000     0.0000 0.1015
## Soppeng                         0.8018 0.0000     0.0000     0.0000 0.0000
## Takalar                         0.0000 0.0000     0.0000     0.0000 0.0473
## Tana Toraja                     0.0000 0.6874     0.0928     0.6105 0.0000
## Toraja Utara                    0.0000 0.7344     0.2815     0.8695 0.0000
## Wajo                            0.5705 0.1060     0.0095     0.0000 0.0000
##                          Pangkajene Dan Kepulauan Pinrang Sidenreng Rappang
## Bantaeng                                   0.0000  0.0000            0.0000
## Barru                                      0.2050  0.0000            0.1198
## Bone                                       0.0024  0.0000            0.0000
## Bulukumba                                  0.0000  0.0000            0.0000
## Enrekang                                   0.0000  0.8584            0.8497
## Gowa                                       0.4727  0.0000            0.0000
## Jeneponto                                  0.0138  0.0000            0.0000
## Kepulauan Selayar                          0.0000  0.0000            0.0000
## Kota Makassar                              0.9409  0.0000            0.0000
## Kota Palopo                                0.0000  0.0000            0.0000
## Kota Parepare                              0.0000  0.6709            0.7767
## Luwu                                       0.0000  0.0279            0.1688
## Luwu Timur                                 0.0000  0.0000            0.0000
## Luwu Utara                                 0.0000  0.0000            0.0000
## Maros                                      0.8787  0.0000            0.0000
## Pangkajene Dan Kepulauan                   1.0000  0.0000            0.0000
## Pinrang                                    0.0000  1.0000            0.7163
## Sidenreng Rappang                          0.0000  0.6805            1.0000
## Sinjai                                     0.0005  0.0000            0.0000
## Soppeng                                    0.0000  0.0052            0.4447
## Takalar                                    0.3648  0.0000            0.0000
## Tana Toraja                                0.0000  0.3985            0.0426
## Toraja Utara                               0.0000  0.0006            0.0000
## Wajo                                       0.0000  0.0778            0.8988
##                          Sinjai Soppeng Takalar Tana Toraja Toraja Utara   Wajo
## Bantaeng                 0.7550  0.0000  0.6147      0.0000       0.0000 0.0000
## Barru                    0.0000  0.9427  0.0000      0.0000       0.0000 0.3586
## Bone                     0.2386  0.6428  0.0000      0.0000       0.0000 0.2650
## Bulukumba                0.8842  0.0000  0.1462      0.0000       0.0000 0.0000
## Enrekang                 0.0000  0.0000  0.0000      0.7871       0.6095 0.5256
## Gowa                     0.4731  0.0000  0.9392      0.0000       0.0000 0.0000
## Jeneponto                0.1225  0.0000  0.9383      0.0000       0.0000 0.0000
## Kepulauan Selayar        0.0000  0.0000  0.0000      0.0000       0.0000 0.0000
## Kota Makassar            0.0024  0.0000  0.9291      0.0000       0.0000 0.0000
## Kota Palopo              0.0000  0.0000  0.0000      0.7310       0.9492 0.0000
## Kota Parepare            0.0000  0.7367  0.0000      0.0091       0.0000 0.6400
## Luwu                     0.0000  0.0000  0.0000      0.6949       0.8359 0.1160
## Luwu Timur               0.0000  0.0000  0.0000      0.0000       0.0000 0.0000
## Luwu Utara               0.0000  0.0000  0.0000      0.0493       0.6909 0.0000
## Maros                    0.3848  0.0903  0.6695      0.0000       0.0000 0.0000
## Pangkajene Dan Kepulauan 0.0000  0.0356  0.6846      0.0000       0.0000 0.0000
## Pinrang                  0.0000  0.0109  0.0000      0.6193       0.3254 0.3140
## Sidenreng Rappang        0.0000  0.4135  0.0000      0.1990       0.1132 0.9345
## Sinjai                   1.0000  0.0000  0.2632      0.0000       0.0000 0.0000
## Soppeng                  0.0000  1.0000  0.0000      0.0000       0.0000 0.7537
## Takalar                  0.0003  0.0000  1.0000      0.0000       0.0000 0.0000
## Tana Toraja              0.0000  0.0000  0.0000      1.0000       0.9588 0.0000
## Toraja Utara             0.0000  0.0000  0.0000      0.9330       1.0000 0.0000
## Wajo                     0.0000  0.6108  0.0000      0.0000       0.0000 1.0000
View(Nilai.Bobot_Tricube)

3. Melakukan Estimasi Parameter Model GWPR Tricube

Model.GWPR_Tricube <- GWPR(formula = IPM ~ X1 + X2 + X3 + X4 + X5 + X6,
                           data = Data_GWPR_IPM_Sulsel,
                           SDF = SHP_Kabupaten_Sulsel_sp,
                           index = c("ID", "Tahun"),
                           bw = Bandwidth.GWPR_Tricube,
                           adaptive = TRUE,
                           p = 2,
                           longlat = FALSE,
                           kernel = "tricube",
                           effect = "individual",
                           model = "random")
## ************************ GWPR Begin *************************
## Formula: IPM  =  X1 + X2 + X3 + X4 + X5 + X6 -- Individuals: 24
## Bandwidth: 10 ---- Adaptive: TRUE
## Model: random ---- Effect: individual
## The R2 is: 0.988131483508445
## Note: in order to avoid mistakes, we forced a rename of the individuals'ID as "id".
summary(Model.GWPR_Tricube)
##                Length Class                    Mode     
## GW.arguments    7     -none-                   list     
## R2              1     -none-                   numeric  
## index           2     -none-                   character
## plm.result     11     plm                      list     
## raw.data       13     data.frame               list     
## GWPR.residuals  5     data.frame               list     
## SDF            24     SpatialPolygonsDataFrame S4

4. Menampilkan Hasil Ringkasan Estimasi Parameter Model GWPR Tricube

Coefisien_Data_Tricube <- Model.GWPR_Tricube$SDF@data
Variabel <- c("Intercept","X1","X2","X3","X4","X5","X6")

Tabel_Estimasi_Tricube <- data.frame(Variabel = Variabel,
                                      Min = apply(Coefisien_Data_Tricube[, Variabel], 2, min),
                                      Q1 = apply(Coefisien_Data_Tricube[, Variabel], 2, quantile, 0.25),
                                      Median = apply(Coefisien_Data_Tricube[, Variabel], 2, median),
                                      Q3 = apply(Coefisien_Data_Tricube[, Variabel], 2, quantile, 0.75),
                                      Max = apply(Coefisien_Data_Tricube[, Variabel], 2, max))

print(Tabel_Estimasi_Tricube)
##            Variabel           Min            Q1        Median            Q3
## Intercept Intercept  4.589076e+01  6.351731e+01  6.607905e+01  7.412366e+01
## X1               X1 -2.062073e-01 -6.430656e-02  3.203455e-02  1.471897e-01
## X2               X2 -5.041860e-05  4.738144e-04  6.634035e-04  9.688829e-04
## X3               X3 -4.089974e-01 -2.302040e-01 -1.694483e-01 -1.320583e-01
## X4               X4 -2.859493e+01 -1.991123e+01 -1.372625e+01 -1.082340e+01
## X5               X5  1.052774e-02  1.406063e-02  1.576415e-02  1.781506e-02
## X6               X6  2.204198e-02  3.125003e-02  4.224080e-02  7.140037e-02
##                    Max
## Intercept 80.713153574
## X1         0.276574281
## X2         0.002039499
## X3        -0.060924728
## X4        -7.100665658
## X5         0.019617831
## X6         0.106620639

5. Melakukan Uji Kesesuaian Model GWPR Tricube

## A. Perhitungan Derajat Kebebasan (df) - Adaptive Tricube Kernel
### Menyiapkan Data Panel (GWPR Tricube)
Data_Tricube <- Data_GWPR_IPM_Sulsel

### Membentuk Matriks Variabel Independen (X)(120x7) GWPR Tricube
X <- cbind(1,
           Data_Tricube$X1,
           Data_Tricube$X2,
           Data_Tricube$X3,
           Data_Tricube$X4,
           Data_Tricube$X5,
           Data_Tricube$X6)

n <- nrow(X)
j <- ncol(X)

### Mengidentifikasi Kabupaten/Kota GWPR Tricube
kab_Tricube <- as.factor(Data_Tricube$`Kabupaten/Kota`)

### Mapping indeks kabupaten ke matriks bobot Tricube (24 x 24)
index_kab_Tricube <- match(kab_Tricube, rownames(Nilai.Bobot_Tricube))

### Melakukan Inisialisasi Elemen Diagonal Hat Matrix Tricube
sii_Tricube <- numeric(n)

### Melakukan Perhitungan Nilai s_ii untuk Setiap Observasi Tricube
for(i in 1:n){
  ## Bobot Spasial Tricube Kabupaten (24)
  wi_kab_Tricube <- Nilai.Bobot_Tricube[index_kab_Tricube[i], ]
  
  ## Mapping Bobot Tricube ke 120 Observasi Panel
  wi_full_Tricube <- wi_kab_Tricube[index_kab_Tricube]
  
  ## Membentuk Matriks Diagonal Tricube (120 x 120)
  Wi_Tricube <- diag(wi_full_Tricube)
  
  ## hitung (X' W_i X) Tricube
  XtWiX_Tricube <- t(X) %*% Wi_Tricube %*% X
  XtWiX_inv_Tricube <- solve(XtWiX_Tricube + diag(1e-5, j))
  xi_Tricube <- matrix(X[i, ], ncol = 1)
  wii_Tricube <- wi_full_Tricube[i]
  sii_Tricube[i] <- t(xi_Tricube) %*% XtWiX_inv_Tricube %*% xi_Tricube * wii_Tricube
}

### Menghitung Derajat Kebebasan Tricube
df_model_Tricube    <- sum(sii_Tricube)
df_residual_Tricube <- n - df_model_Tricube

### Menghitung Nilai SSE (GWPR Tricube)
SSE_REM <- sum(residuals(Model_REM)^2)
SSE_GWPR_Tricube <- sum(Model.GWPR_Tricube$GWPR.residuals$resid^2)

### Menghitung Derajat Bebas Model Global dan Model GWPR Tricube
df_REM <- df.residual(Model_REM)
df_GWPR_Tricube <- df_residual_Tricube

### Melakukan Uji Kesesuaian Model GWPR Tricube
F_hitung_Tricube <- (SSE_REM/df_REM)/(SSE_GWPR_Tricube/df_GWPR_Tricube)
F_hitung_Tricube
## [1] 1.302601
### Menentukan Nilai F Tabel GWPR Tricube
alpha_Tricube <- 0.10
F_tabel_Tricube <- qf(1 - alpha_Tricube, df_REM, df_GWPR_Tricube)
F_tabel_Tricube
## [1] 1.30122
### Menentukan Daerah Keputusan Uji Kesesuain Model GWPR Tricube
if(F_hitung_Tricube > F_tabel_Tricube){
  cat("H1: Model GWPR Tricube lebih baik dibandingkan model global\n")
} else {
  cat("H0: Model global sudah cukup dibandingkan GWPR Tricube\n")
}
## H1: Model GWPR Tricube lebih baik dibandingkan model global
### Menghitung Nilai P-Value GWPR Tricube
p_value_Tricube <- 1 - pf(F_hitung_Tricube, df_REM, df_GWPR_Tricube, lower.tail = TRUE)
p_value_Tricube
## [1] 0.09909835
if(p_value_Tricube < 0.10){
  cat("H1: Model GWPR Tricube lebih baik dibandingkan model global\n")
} else {
  cat("H0: Model global sudah cukup dibandingkan GWPR Tricube\n")
}
## H1: Model GWPR Tricube lebih baik dibandingkan model global

6. Melakukan Estimasi Parameter Lokal Model GWPR Tricube

beta0_t <- Coefisien_Data_Tricube$Intercept
beta1_t <- Coefisien_Data_Tricube$X1
beta2_t <- Coefisien_Data_Tricube$X2
beta3_t <- Coefisien_Data_Tricube$X3
beta4_t <- Coefisien_Data_Tricube$X4
beta5_t <- Coefisien_Data_Tricube$X5
beta6_t <- Coefisien_Data_Tricube$X6

beta0_t
##  [1] 74.61803 58.45080 63.80122 80.71315 77.50542 72.03364 72.72135 73.95887
##  [9] 65.74237 62.80586 55.89929 66.41573 45.89076 59.45442 77.64605 65.44244
## [17] 59.38622 63.84520 76.47681 63.75446 71.09221 72.33562 76.40571 64.47055
beta1_t
##  [1] -0.09716018  0.21325020  0.13517305 -0.20620734 -0.08007354 -0.06278182
##  [7] -0.06753667 -0.06322986 -0.02036144  0.10232773  0.26028551  0.08267677
## [13]  0.27657428  0.12174358 -0.20093673  0.03520834  0.17124281  0.17105936
## [19] -0.13880778  0.13923317 -0.04721189  0.02886076 -0.01794914  0.17378610
beta2_t
##  [1]  0.0007501172  0.0010104856  0.0006231118  0.0010031116  0.0004257085
##  [6]  0.0006624970  0.0006866496  0.0006766753  0.0006643099  0.0002498449
## [11]  0.0020394992  0.0004898497  0.0005555467  0.0002534912  0.0006568734
## [16]  0.0006732227  0.0002739925  0.0009859481  0.0009631946  0.0012722602
## [21]  0.0006521622  0.0001229362 -0.0000504186  0.0011785557
beta3_t
##  [1] -0.17512831 -0.24763976 -0.20902262 -0.22817745 -0.06092473 -0.13304390
##  [7] -0.14510366 -0.20136426 -0.12799662 -0.16798091 -0.40899741 -0.14844287
## [13] -0.17091571 -0.18114742 -0.11229332 -0.14338522 -0.10114748 -0.23628357
## [19] -0.24132942 -0.27033719 -0.12721365 -0.13576908 -0.12910170 -0.27447922
beta4_t
##  [1] -12.342217 -16.830281 -13.989798 -10.809037 -23.678654 -13.220464
##  [7] -13.702857 -13.827873  -8.636954 -10.828184 -25.059333 -20.208292
## [13]  -8.554931  -7.100666  -9.038708 -12.695444 -24.886045 -27.520783
## [19] -10.126341 -19.812214 -13.749635 -17.932682 -13.281850 -28.594927
beta5_t
##  [1] 0.01672083 0.01561520 0.01938853 0.01526191 0.01245015 0.01786731
##  [7] 0.01808880 0.01656655 0.01697246 0.01420783 0.01961783 0.01361903
## [13] 0.01142079 0.01336516 0.01590529 0.01515934 0.01052774 0.01562302
## [19] 0.01874609 0.01829340 0.01779764 0.01341832 0.01533917 0.01738634
beta6_t
##  [1] 0.03346673 0.03073771 0.02204198 0.04015140 0.07684843 0.03231836
##  [7] 0.03004668 0.03912381 0.05237124 0.08737289 0.02295872 0.07417719
## [13] 0.09903090 0.09769270 0.06571942 0.05161044 0.10662064 0.04433020
## [19] 0.03805662 0.02302312 0.03142081 0.07047476 0.06013487 0.02992312

7. Menghitung Nilai t-Statistik Lokal GWPR Tricube

t.beta1_t <- Coefisien_Data_Tricube$X1 / Coefisien_Data_Tricube$X1_SE
t.beta2_t <- Coefisien_Data_Tricube$X2 / Coefisien_Data_Tricube$X2_SE
t.beta3_t <- Coefisien_Data_Tricube$X3 / Coefisien_Data_Tricube$X3_SE
t.beta4_t <- Coefisien_Data_Tricube$X4 / Coefisien_Data_Tricube$X4_SE
t.beta5_t <- Coefisien_Data_Tricube$X5 / Coefisien_Data_Tricube$X5_SE
t.beta6_t <- Coefisien_Data_Tricube$X6 / Coefisien_Data_Tricube$X6_SE

t.beta1_t
##  [1] -1.3269235  1.0411171  0.7247754 -3.5465442 -0.5385293 -0.7675971
##  [7] -0.9162081 -0.5807203 -0.1296873  0.8224689  1.6083432  0.6928440
## [13]  3.1589030  1.0849697 -1.8285973  0.2201134  1.0832284  1.1906980
## [19] -1.6085344  0.7092875 -0.5508839  0.2225898 -0.1331215  1.0773036
t.beta2_t
##  [1]  7.3367836  2.8180910  1.9488861  6.6497764  1.2679264 11.4023026
##  [7] 11.6630912  2.8975992  6.5587079  0.8543948  3.7521557  1.6184222
## [13]  2.3008655  0.9017187  8.1592338  4.6038408  0.6533350  2.4470568
## [19]  4.2151908  2.8652391 12.2866134  0.4281198 -0.1865244  2.8884054
t.beta3_t
##  [1] -5.4173934 -4.2258115 -4.3821241 -6.5786587 -0.7961298 -4.8416914
##  [7] -5.4039355 -3.9213900 -4.0503509 -3.1916579 -3.7686995 -2.3620361
## [13] -5.8407301 -4.2920166 -4.2428845 -3.8761057 -1.2344796 -2.5095463
## [19] -4.2065743 -4.0703582 -4.8593489 -2.2056021 -2.4131926 -3.2730885
t.beta4_t
##  [1] -3.593904 -3.089243 -2.955042 -3.421315 -5.804562 -3.323430 -3.423821
##  [8] -3.424805 -2.011565 -2.179631 -5.828265 -4.168503 -2.252046 -1.574126
## [15] -2.581786 -2.897572 -7.274352 -5.393053 -3.022575 -3.342145 -3.087946
## [22] -4.332329 -3.090484 -4.898329
t.beta5_t
##  [1] 3.087268 3.062096 2.684490 2.282938 3.546558 4.015318 3.682153 3.375119
##  [9] 5.056673 2.108664 5.029730 2.869210 1.898777 1.897480 6.161641 3.695082
## [17] 3.383177 4.024650 2.977627 3.637349 3.868892 2.838532 2.854412 4.052072
t.beta6_t
##  [1] 3.581797 1.768328 1.389170 4.407235 2.933417 2.859742 2.731848 4.124423
##  [9] 3.567420 2.800841 1.467694 2.680007 3.527212 3.164247 5.640369 3.233050
## [17] 3.770445 2.347179 4.017250 1.286414 2.412412 2.846198 2.287836 1.703664

8. Mengambil Nilai R-Square Lokal GWPR Tricube

Local_R2_Tricube <- Coefisien_Data_Tricube$Local_R2
Local_R2_Tricube
##  [1] 0.8151344 0.6851135 0.6880137 0.8484035 0.6691665 0.8123775 0.8358834
##  [8] 0.7804608 0.7491258 0.7171599 0.5581655 0.7164430 0.7014433 0.6952718
## [15] 0.7193600 0.6821777 0.6718645 0.6351734 0.7705732 0.6956874 0.8194456
## [22] 0.7208875 0.7152224 0.6824310

9. Menyimpan Hasil Analisis GWPR Tricube ke Dalam Data Frame

Hasil_Model_GWPR_Tricube <- data.frame(Kabupaten_Kota = Data_GWPR_IPM_Sulsel$`Kabupaten/Kota`,
                                       Tahun = Data_IPM_Sulawesi_Selatan$Tahun,
                                       beta0_t, beta1_t, beta2_t, beta3_t, beta4_t, beta5_t, beta6_t,
                                       t.beta1_t, t.beta2_t, t.beta3_t, t.beta4_t, t.beta5_t, t.beta6_t,
                                       Local_R2_Tricube)
View(Hasil_Model_GWPR_Tricube)

10. Menentukan Variabel yang Signifikan untuk Setiap Kabupaten/Kota (GWPR Bisquare)

Nilai t-tabel GWPR Tricube (alpha 10%)

t.tabel_Tricube  <- qt(1 - alpha_Tricube/2, df_GWPR_Tricube)
t.tabel_Tricube
## [1] 1.662665
Sig_X1_t <- ifelse(abs(t.beta1_t) > t.tabel_Tricube, "X1", "")
Sig_X2_t <- ifelse(abs(t.beta2_t) > t.tabel_Tricube, "X2", "")
Sig_X3_t <- ifelse(abs(t.beta3_t) > t.tabel_Tricube, "X3", "")
Sig_X4_t <- ifelse(abs(t.beta4_t) > t.tabel_Tricube, "X4", "")
Sig_X5_t <- ifelse(abs(t.beta5_t) > t.tabel_Tricube, "X5", "")
Sig_X6_t <- ifelse(abs(t.beta6_t) > t.tabel_Tricube, "X6", "")

Variabel_Signifikan_Tricube <- apply(
  cbind(Sig_X1_t, Sig_X2_t, Sig_X3_t, Sig_X4_t, Sig_X5_t, Sig_X6_t),
  1,
  function(x) paste(x[x != ""], collapse=" ")
)

### Menghitung Nilai p-value untuk Masing-Masing Variabel Independen (GWPR Tricube)
p_X1_t <- 2 * (1 - pt(abs(t.beta1_t), df = df_GWPR_Tricube))
p_X2_t <- 2 * (1 - pt(abs(t.beta2_t), df = df_GWPR_Tricube))
p_X3_t <- 2 * (1 - pt(abs(t.beta3_t), df = df_GWPR_Tricube))
p_X4_t <- 2 * (1 - pt(abs(t.beta4_t), df = df_GWPR_Tricube))
p_X5_t <- 2 * (1 - pt(abs(t.beta5_t), df = df_GWPR_Tricube))
p_X6_t <- 2 * (1 - pt(abs(t.beta6_t), df = df_GWPR_Tricube))

### Membuat Tabel Variabel Signifikan (GWPR Tricube)
Kabupaten_Kota <- SHP_Kabupaten_Sulsel_sp@data$Kabupaten.Kota

Tabel_Signifikan_Tricube <- data.frame(
  Kabupaten_Kota = Kabupaten_Kota,
  Variabel_Signifikan = Variabel_Signifikan_Tricube,
  R2_Lokal = round(Local_R2_Tricube,4),
  p_X1_t = round(p_X1_t, 5),
  p_X2_t = round(p_X2_t, 5),
  p_X3_t = round(p_X3_t, 5),
  p_X4_t = round(p_X4_t, 5),
  p_X5_t = round(p_X5_t, 5),
  p_X6_t = round(p_X6_t, 5)
)

View(Tabel_Signifikan_Tricube)

11. Membuat Kelompok Wilayah Berdasarkan Variabel Signifikan (GWPR Tricube)

Kelompok_Variabel_Tricube <- Tabel_Signifikan_Tricube %>%
  filter(Variabel_Signifikan != "") %>%
  group_by(Variabel_Signifikan) %>%
  summarise(
    Kabupaten_Kota = paste(Kabupaten_Kota, collapse=", "),
    Jumlah = n(),
    .groups = "drop"
  ) %>%
  arrange(desc(Jumlah)) %>%
  mutate(Kelompok = row_number())

Kelompok_Variabel_Tricube
## # A tibble: 6 × 4
##   Variabel_Signifikan Kabupaten_Kota                             Jumlah Kelompok
##   <chr>               <chr>                                       <int>    <int>
## 1 X2 X3 X4 X5 X6      Bantaeng, Barru, Gowa, Jeneponto, Kepulau…     11        1
## 2 X3 X4 X5 X6         Kota Palopo, Luwu, Tana Toraja, Toraja Ut…      4        2
## 3 X1 X2 X3 X4 X5 X6   Bulukumba, Luwu Timur, Maros                    3        3
## 4 X2 X3 X4 X5         Bone, Kota Parepare, Soppeng                    3        4
## 5 X4 X5 X6            Enrekang, Pinrang                               2        5
## 6 X3 X5 X6            Luwu Utara                                      1        6

K. Membuat Tabel Perbandingan untuk Model Terbaik (Global Vs GWPR)

1. Model Regresi Data Panel (REM)

## Menghitung Nilai R-Square pada Model REM
R2_REM <- summary(Model_REM)$r.squared["rsq"]
R2_REM
##      rsq 
## 0.699073
## Menghitung Nilai AIC Model REM
### Menentukan Jumlah Observasi
N <- nobs(Model_REM)

### Menentukan Jumlah Parameter (termasuk intercept)
j <- length(coef(Model_REM))

### Menghitung Nilai SSE REM
SSE_REM <- sum(residuals(Model_REM)^2)

## Menghitung Nilai AIC REM
AIC_REM <- N * log(SSE_REM / N) + 2 * j
AIC_REM
## [1] -126.099
## Menghitung Nilai RMSE REM
RMSE_REM <- sqrt(mean(residuals(Model_REM)^2))
RMSE_REM
## [1] 0.5578051

2. Model GWPR dengan Fungsi Pembobot Gaussian

## Menghitung Nilai R-Square Model GWPR Gaussian Secara Manual
### Mengambil variabel dependen (GWPR Gaussian)
Y <- Data_GWPR_IPM_Sulsel$IPM

### Menghitung Sum of Squares Total (GWPR Gaussian)
SST_Gaussian <- sum((Y - mean(Y))^2)

### Menghitung Sum of Squares Error (GWPR Gaussian)
SSE_Gaussian <- sum(Model.GWPR_Gaussian$GWPR.residuals$resid^2)

## Menghitung Nilai Koefisien Determinasi (GWPR Gaussian)
R2_Gaussian <- (SST_Gaussian - SSE_Gaussian) / SST_Gaussian
R2_Gaussian
## [1] 0.9859684
## Menghitung Nilai AIC Model Gaussian
### Menentukan Jumlah Observasi dan Parameter
N <- nrow(Model.GWPR_Gaussian$raw.data)

### Menghitung Nilai Varians Gaussian
sigma2_Gaussian <- SSE_Gaussian / N

## Menghitung Nilai AIC Gaussian
AIC_Gaussian <- N * log(sigma2_Gaussian)
AIC_Gaussian
## [1] -183.8281
## Menghitung RMSE Model GWPR Gaussian
RMSE_Gaussian <- sqrt(mean(Model.GWPR_Gaussian$GWPR.residuals$resid^2))
RMSE_Gaussian
## [1] 0.4648919

3. Model GWPR dengan Fungsi Pembobot Bisquare

## Menghitung Nilai R-Square Model GWPR Bisquare Secara Manual
### Mengambil variabel dependen (GWPR Bisqaure)
Y_Bisquare <- Data_GWPR_IPM_Sulsel$IPM

### Menghitung Sum of Squares Total (GWPR Bisquare)
SST_Bisquare <- sum((Y_Bisquare - mean(Y_Bisquare))^2)

### Menghitung Sum of Squares Error (GWPR Bisquare)
SSE_Bisquare <- sum(Model.GWPR_Bisquare$GWPR.residuals$resid^2)

## Menghitung Nilai Koefisien Determinasi (GWPR Bisquare)
R2_Bisquare <- (SST_Bisquare - SSE_Bisquare) / SST_Bisquare
R2_Bisquare
## [1] 0.9884036
## Menghitung Nilai AIC Model Bisquare
### Menentukan Jumlah Observasi dan Parameter GWPR Bisquare
N <- nrow(Model.GWPR_Bisquare$raw.data)

### Menghitung Nilai Varians Bisquare
sigma2_Bisquare <- SSE_Bisquare / N

## Menghitung Nilai AIC Gaussian
AIC_Bisquare <- N * log(sigma2_Bisquare)
AIC_Bisquare
## [1] -206.7024
## Menghitung RMSE Model GWPR Gaussian
RMSE_Bisquare <- sqrt(mean(Model.GWPR_Bisquare$GWPR.residuals$resid^2))
RMSE_Bisquare
## [1] 0.4226293

4. Model GWPR dengan Fungsi Pembobot Tricube

## Menghitung Nilai R-Square Model GWPR Tricube Secara Manual
### Mengambil variabel dependen (GWPR Tricube)
Y_Tricube <- Data_GWPR_IPM_Sulsel$IPM

### Menghitung Sum of Squares Total (GWPR Tricube)
SST_Tricube <- sum((Y_Tricube - mean(Y_Tricube))^2)

### Menghitung Sum of Squares Error (GWPR Tricube)
SSE_Tricube <- sum(Model.GWPR_Tricube$GWPR.residuals$resid^2)

## Menghitung Nilai Koefisien Determinasi (GWPR Tricube)
R2_Tricube <- (SST_Tricube - SSE_Tricube) / SST_Tricube
R2_Tricube
## [1] 0.9881315
## Menghitung Nilai AIC Model Tricube
### Menentukan Jumlah Observasi dan Parameter GWPR Tricube
N <- nrow(Model.GWPR_Tricube$raw.data)

### Menghitung Nilai Varians Bisquare
sigma2_Tricube <- SSE_Tricube / N

## Menghitung Nilai AIC Tricube
AIC_Tricube <- N * log(sigma2_Tricube) 
AIC_Tricube
## [1] -203.919
## Menghitung RMSE Model GWPR Tricube
RMSE_Tricube <- sqrt(mean(Model.GWPR_Tricube$GWPR.residuals$resid^2))
RMSE_Tricube
## [1] 0.4275592

5. Membuat Tabel Perbandingan Antara Model Panel dengan GWPR

Tabel_Perbandingan_Model <- data.frame(Model = c("REM (Global)", 
                                                 "GWPR Gaussian", 
                                                 "GWPR Bisquare", 
                                                 "GWPR Tricube"),
      SSE = c(SSE_REM, SSE_Gaussian, SSE_Bisquare, SSE_Tricube),
      R_Square = c(R2_REM, R2_Gaussian, R2_Bisquare, R2_Tricube),
      AIC = c(AIC_REM, AIC_Gaussian, AIC_Bisquare, AIC_Tricube),
      RMSE = c(RMSE_REM, RMSE_Gaussian, RMSE_Bisquare, RMSE_Tricube)
)

Tabel_Perbandingan_Model
##           Model      SSE  R_Square       AIC      RMSE
## 1  REM (Global) 37.33758 0.6990730 -126.0990 0.5578051
## 2 GWPR Gaussian 25.93494 0.9859684 -183.8281 0.4648919
## 3 GWPR Bisquare 21.43386 0.9884036 -206.7024 0.4226293
## 4  GWPR Tricube 21.93683 0.9881315 -203.9190 0.4275592