5. Model Epidemiologi

Deskripsi

Regresi binomial negatif digunakan untuk mengatasi overdisversi pada regresi Poisson. Pada regresi binomial negatif dapat ditambahkan efek dependensi spasial dan dapat dimodelkan menggunakan GLMM (Generalized Linear Mixed Models). Model ini juga dikenal sebagai conditional autoregressive regression (CAR). Pemodelan CAR umumnya menggunakan metode pendugaan Bayes dengan pendugaan sebaran posterior yang efisien menggunakan Integrated Nested Laplace Aproximation (INLA).

GLMM adalah pengembangan GLM yang terdapat penambahan komponen acak pada bagian prediktor model. GLMM dapat digunakan untuk menangani situasi yang terdapat korelasi antar observasi atau terdapat beberapa jenis kelompok dalam data, maupun juga data longitudinal (McCulloch, 2003). Persamaan umum dari GLMM bisa dibentuk dengan memodifikasi model GLM dengan menambahkan efek acak \(\theta_i\) (Tufvesson et al., 2019) sebagai berikut:

\[ g(\mu_i) = X_i^T \beta + \theta_i \tag{1}\]

dengan \(\theta_i\) merupakan efek acak yang independen (unstructured random effect) dapat berupa suatu noise yang memiliki sebaran normal.

Pengembangan lain dari GLMM yaitu mempertimbangkan unsur efek acak spasial terstruktur (structured random effect) pada prediktor melalui prior CAR. Model ini sering digunakan pada beberapa ilmu seperti demografi, ekonomi, epidemiologi, dan geografi (Oliveira et al., 2020). Misalkan peubah respon \(Y = (y_1, \ldots, y_n)\) merupakan vektor univariat yang menyatakan jumlah kasus pada lokasi ke-\(i\) dan vektor predictor pada lokasi ke-\(i\) adalah \(X_i^T = (1, x_{1i}, x_{2i}, \ldots, x_{pi})\) dengan \(i = 1, 2, 3, \ldots, n\) dengan jumlah peubah bebas \(p\). Adapun unsur efek acak spasial terstruktur direpresentasikan oleh \(\phi = (\phi_1, \phi_2, \ldots, \phi_n)\), dengan formulasi model CAR sebagai berikut:

\[ y_i \mid \mu_i \sim f(y_i \mid \mu_i, v^2) \tag{2}\]

\[ g(\mu_i) = X_i^T \beta + \phi_i \tag{3}\]

Seperti halnya pada GLM, peubah respon \(y_i\) berasal dari anggota keluarga sebaran eksponensial \(f(y_i \mid \mu_i, v^2)\) dengan \(v^2\) merupakan parameter skala yang digunakan untuk sebaran normal. Untuk sebaran binomial negatif dengan dua parameter, dengan asumsi tambahan \(v^2 = \gamma\), maka dari Persamaan 2 dan Persamaan 3 dapat dibentuk model CAR dengan fungsi sebaran binomial negatif yaitu sebagai berikut (Sparks, 2020):

\[ y_i \mid \mu_i \sim \text{NB}(y_i \mid \mu_i, \gamma) \tag{4}\]

\[ \log(\mu_i) = X_i^T \beta + \phi_i \tag{5}\]

Efek acak \(\phi_i\) dimodelkan dengan kelas sebaran prior CAR, yang merupakan jenis sebaran Gaussian Markov Random Field (GMRF). Sebaran tersebut dapat ditulis dalam bentuk \(\phi \sim N(0, \tau^2 Q^{-1})\), dengan \(Q\) merupakan matriks presisi yang mungkin berupa matriks tunggal (noninvertible matrix). Korelasi spasial antara efek acak ditentukan oleh matriks ketetanggaan biner \(W\) berukuran \(n \times n\), dengan elemen \(w_{ji}\) sama dengan satu jika area \((j,i)\) didefinisikan sebagai tetangga, dan nol jika tidak. Kemudian apabila dua area didefinisikan sebagai tetangga, maka efek randomnya akan berkorelasi, sedangkan efek random di area yang tidak bertetangga akan bebas bersyarat dengan mempertimbangkan elemen-elemen lain dari \(\phi\). Pendekatan ini paling umum yaitu, \(w_{ji}=1\) jika dan hanya jika mereka memiliki batas yang sama, yaitu dilambangkan dengan \(j \sim i\) sebagai notasi selanjutnya. Namun, setiap area harus memiliki setidaknya satu elemen positif \(w_{ji}\), sehingga jumlah suatu baris dari matriks \(W\) tidak boleh nol.

Umumnya prior CAR dispesifikasikan oleh satu set data berjumlah \(n\) memiliki sebaran bersyarat penuh univariat \(f(\phi_i \mid \phi_{-i})\) di mana \(\phi_{-i} = (\phi_1, \ldots, \phi_{i-1}, \phi_{i+1}, \ldots, \phi_i)\). Berbagai sebaran prior CAR telah banyak diperkenalkan oleh berbagai ahli terutama dalam konteks pemetaan penyakit, yaitu seperti Intrinsic CAR (ICAR), Besag York Mollié (BYM) (Besag et al., 1991), (Stern & Cressie, 1999), dan (Leroux et al., 2000). Namun pada penelitian ini hanya akan membahas prior ICAR dan BYM.

1. ICAR

Prior CAR yang paling sederhana saat ini adalah Intrinsic autoregressive (IAR), yang diusulkan oleh Besag et al. (1991) dan memiliki sebaran bersyarat penuh yaitu,

\[ \phi_i = \psi_i \tag{6}\]

\[ \psi_i \mid \psi_{-i}, W, \tau^2 \sim N\left(\frac{\sum_{j \sim i} w_{ji} \psi_i}{\sum_{j \sim i} w_{ji}}, \frac{\tau^2}{\sum_{j \sim i} w_{ji}}\right) \tag{7}\]

\[ \tau^2 \sim \text{Inverse-Gamma}(a, b) \tag{8}\]

Nilai harapan bersyarat dari \(\psi_i\) sama dengan rata-rata dari efek acak di area tetangga, sedangkan ragam bersyarat berbanding terbalik dengan jumlah tetangga. Kemudian struktur ragam dari \(\psi_i\) ini akan memiliki korelasi spasial yang kuat, apabila semakin banyak tetangga yang dimiliki oleh suatu area. Parameter ragam \(\tau^2\) digunakan untuk mengontrol besarnya variasi antara efek acak, yang pada umumnya mengikuti proses sebaran invers gamma.

2. BYM

Prior konvolusi atau Besag-York-Mollie (BYM) pertama kali dijelaskan oleh Besag et al. (1991). Memiliki efek acak yang dari dua komponen, yaitu mengkombinasikan efek acak spasial terstruktur (structured random effect) pada Persamaan Persamaan 6 dengan efek acak yang independen (unstructured random effect) seperti pada Persamaan 7. Model ini memiliki bentuk sebagai berikut,

\[ \phi_i = \psi_i + \theta_i \tag{9}\]

\[ \psi_i \mid \psi_{-i}, W, \tau^2 \sim N\left(\frac{\sum_{j \sim i} w_{ji} \psi_i}{\sum_{j \sim i} w_{ji}}, \frac{\tau^2}{\sum_{j \sim i} w_{ji}}\right) \tag{10}\]

\[ \theta_i \sim N(0, \sigma^2) \tag{11}\]

\[ \tau^2, \sigma^2 \sim \text{Inverse-Gamma}(a, b) \tag{12}\]

Efek acak \(\theta = (\theta_1, \theta_2, \ldots, \theta_n)\) bersifat independen dengan mean nol dan ragam konstan, sedangkan efek acak autokorelasi spasial dimodelkan melalui \(\psi\). Model ini merupakan model CAR yang paling sering digunakan dalam praktiknya.

Data

Penelitian ini menggunakan data Profil Kesehatan 2021 dari setiap provinsi di Pulau Jawa, yaitu Provinsi Banten, DKI Jakarta, Jawa Barat, DI Yogyakarta, Jawa Tengah, dan Jawa Timur. Satuan pengamatan pada penelitian ini adalah kabupaten/ kota di seluruh Pulau Jawa, yakni 119 kabupaten/kota. Peubah yang digunakan pada penelitian ini dapat dilihat pada Tabel 1. Penelitian selengkapnya terdapat (Fitri et al., 2024).

Tabel 1: Peubah yang digunakan
Peubah Keterangan Faktor Literatur
\(Y\) Banyaknya stunting per 100.000 balita
\(X_1\) Persentase balita yang mendapatkan ASI eksklusif Faktor asupan gizi Hasiru et al, (2022)
\(X_2\) Persentase balita yang mendapatkan imunisasi dasar lengkap Faktor pelayanan kesehatan Manaf et al, (2022)
\(X_3\) Persentase keluarga dengan akses sanitasi layak Faktor pola asuh Fadliana dan Drajat (2021)
\(X_4\) Persentase penduduk miskin Faktor ekonomi Bele et al, (2022)

Tahapan Analisis Data

Metode yang digunakan dalam analisis data stunting Negative Binomial Conditional Autoregressive (CAR) dengan pendekatan INLA. Pengolahan data menggunakan software R Studio. Tahapan analisis data yang dilakukan adalah sebagai berikut:

  1. Melakukan eksplorasi pada data penelitian

  2. Medeteksi multikolinieritas antar peubah penjelas menggunakan nilai VIF (Variance Inflation Factor), jika didapatkan nilai VIF > 10 maka dapat dikatakan bahwa terjadi multikolinearitas pada data (Kutner MH, 2005), sehingga perlu dilakukan penanganan lebih lanjut sebelum dilakukannya pemodelan.

  3. Memeriksa overdispersi, dengan melihat nilai devians dan chi-kuadrat pearson dibagi dengan derajat bebasnya. Jika nilai tersebut bernilai lebih dari satu maka terdapat overdispersi pada data, sehingga dapat menggunakan sebaran yang lebih fleksibel seperti sebaran binomial negatif.

  4. Menghitung Matriks Pembobotan Spasial (\(W\)) dengan menggunakan queen contiguity, eksponensial jarak (exponential weight), kebalikan jarak (inverse distance weight), dan pembobot tetangga terdekat (k-Nearest Neighbor Weight) berikut rincian setiap pembobotan yang dilakukan (Djuraidah et al, 2022):

    1. Untuk queen contiguity, pembobotan dilakukan dengan menggunakan rumus berikut:

      \[ w_{ij} = \begin{cases} 1 & \text{jika } i \text{ dan } j \text{ bersinggungan} \\ 0 & \text{jika } i \text{ dan } j \text{ tidak bersinggungan} \end{cases} \]

    2. Untuk bobot eksponensial (exponential weight), pembobotan dilakukan dengan menggunakan rumus berikut:

      \[ w_{ij} = \exp(-d_{ij}) \]

      dengan \(d_{ij}\) adalah jarak antara luas ke-\(i\) dan luas ke-\(j\).

    3. Untuk bobot jarak terbalik (inverse distance weight), pembobotan dilakukan dengan menggunakan rumus berikut:

      \[ w_{ij} = d_{ij}^{-1} \]

    4. Untuk pembobot KNN:

      1. Hitung jarak pusat antara unit ke-\(i\) terhadap seluruh unit lainnya \(j \neq i\).
      2. Beri peringkat sebagai berikut \(d_{ij}(1) \leq d_{ij}(2) \leq \dots \leq d_{ij}(n-1)\).
      3. Kemudian untuk setiap \(k=1,\dots,n-1\), atur \(N_k (i) = \{j(1),j(2),\dots,j(k)\}\) yang berisi \(k\) unit terdekat terhadap \(i\).
      4. Untuk setiap \(k\), matriks pembobot \(W\) memiliki elemen \(w_{ij}\) bernilai 1 jika daerah \(i\) berdekatan dengan daerah \(j\), sedangkan elemen diagonal utama akan selalu bernilai nol.
  5. Melakukan uji autokorelasi spasial dengan menghitung nilai indeks Moran pada peubah respon (Anselin, 1988), dengan langkah-langkah berikut:

    Hipotesis

    \[ H_0 : \text{Tidak terdapat autokorelasi spasial pada data} \]

    \[ H_1 : \text{Terdapat autokorelasi spasial pada data} \]

    Statistik Uji \[ z = \frac{(I - E(I))}{\sqrt{\text{var}(I)}} \]

    dengan \[ I = \frac{\sum_{i=1}^{n}\sum_{j=1}^{n}W_{ij}(x_i-\bar{x})(x_j-\bar{x})}{S_0 \sum_{i=1}^{n}(x_i-\bar{x})^2} \]

    Kriteria pengujiannya \(H_0\) ditolak jika nilai \(|Z| > Z_{(\alpha/2)}\)

  6. Melakukan pendugaan model Negative Binomial CAR dengan pendekatan INLA,

    6.1 Membuat model yang terdapat empat model yang akan dilihat (Sparks, 2018):

    Model GLM: \[ \eta_i = X_i^T \beta \]

    Model GLMM: \[ \eta_i = X_i^T \beta + \theta_i \]

    Model ICAR: \[ \eta_i = X_i^T \beta + \psi_i \]

    Model BYM: \[ \eta_i = X_i^T \beta + \psi_i + \theta_i \]

    6.2 Menentukan sebaran prior untuk hiperparameter pada model dengan ketentuan nilai prior:

    Model GLM, prior ~ Normal Structured Random Effect, \(\psi_i|\psi_{(-i)} \sim N\left(\frac{\sum_{j\sim i} w_{ji} \psi_i}{\sum_{j\sim i} w_{ji}}, \frac{\tau^2}{\sum_{j\sim i} w_{ji}}\right)\) Unstructured Random Effect, \(\theta_i \sim N(0, \sigma^2)\) Ragam \(\psi_i\), \(\tau^2 \sim \text{Inverse-Gamma}(1, 0.0005)\) Ragam \(\theta_i\), \(\sigma^2 \sim \text{Inverse-Gamma}(1, 0.0005)\)

  7. Memilih model terbaik dengan mempertimbangkan beberapa kriteria sebagai berikut:

    Defiance Information Criterion (DIC) (Wang et al, 2018) \[ \text{DIC} = \overline{D} + 2PD \]

    dengan

    \[ PD = E(D(\theta)) - D(E(\theta)) = \overline{D} - D(\theta_{\overline{}}) \]

    dan

    \[ D(\theta) = -2\log(p(y^*|\theta)) \]

    Semakin kecil nilai AIC, maka model yang dibangun semakin baik.

    Mean Absolute Deviance (MAD)

    \[ \text{MAD} = \frac{\sum_{i=1}^{n}|y_i-\hat{y}_i|}{N} \]

    dengan \(y_i\) adalah respon pada lokasi ke \(i\), \(\hat{y}_i\) adalah hasil prediksi pada lokasi ke \(i\) dan \(N\) adalah jumlah lokasi pengamatan. Semakin kecil nilai MAD, maka semakin kecil kesalahan hasil pendugaan.

  8. Menghitung nilai resiko relatif dari model terbaik berdasarkan kriteria dari kebaikan model pada langkah ke-7. Risiko relatif ditentukan dengan cara mengeksponensialkan komponen acak terstruktur spasial \(\psi_i\) dari model terbaik menggunakan rumus sebagai berikut (Blangiardo dan Cameletti, 2015) dengan formula:

    \[ \text{RR}_i = e^{\psi_i} \]

    dengan \(\psi_i\) adalah efek acak terstruktur spasial.

  9. Menginterpretasikan hasil penelitian dan menarik kesimpulan

Package

Data

jawa <- readOGR(dsn = "data/shp", layer = "jawa2")
#> Warning in readOGR(dsn = "data/shp", layer = "jawa2"): OGR support
#> is provided by the sf and terra packages among others
#> Warning in ogrInfo(dsn = dsn, layer = layer, encoding = encoding,
#> use_iconv = use_iconv, : OGR support is provided by the sf and
#> terra packages among others
#> Warning in ogrFIDs(dsn = dsn, layer = layer): OGR support is
#> provided by the sf and terra packages among others
#> Warning in OGRSpatialRef(dsn, layer, morphFromESRI = morphFromESRI,
#> dumpSRS = dumpSRS, : OGR support is provided by the sf and terra
#> packages among others
#> Warning in ogrListLayers(dsn): OGR support is provided by the sf
#> and terra packages among others
#> Warning in ogrFIDs(dsn = dsn, layer = layer): OGR support is
#> provided by the sf and terra packages among others
#> OGR data source with driver: ESRI Shapefile 
#> Source: "C:\Users\anugraha\Documents\Materi_Orasi\book\data\shp", layer: "jawa2"
#> with 119 features
#> It has 1 fields
jawa_data <- read_excel("data/data_stunting_epidemiologi.xlsx")
jawa_data <- jawa_data %>%
  mutate(logStunting = log(Stunting), E_d = mean(Stunting))
jawa@data <- left_join(jawa@data, jawa_data)
#> Joining with `by = join_by(KabKota)`
jawa@data$ID <- 1:nrow(jawa@data)
summary(jawa_data)
#>    Provinsi           KabKota             Stunting  
#>  Length:119         Length:119         Min.   :  1  
#>  Class :character   Class :character   1st Qu.: 22  
#>  Mode  :character   Mode  :character   Median : 40  
#>                                        Mean   : 57  
#>                                        3rd Qu.: 67  
#>                                        Max.   :368  
#>    Imunisasi          IMD             ASI             BBLR     
#>  Min.   :  0.0   Min.   : 30.6   Min.   : 41.1   Min.   : 0.0  
#>  1st Qu.: 80.8   1st Qu.: 75.4   1st Qu.: 61.9   1st Qu.: 2.8  
#>  Median : 93.9   Median : 82.7   Median : 72.6   Median : 4.0  
#>  Mean   : 88.3   Mean   : 80.7   Mean   : 70.4   Mean   : 4.7  
#>  3rd Qu.: 99.0   3rd Qu.: 89.6   3rd Qu.: 79.3   3rd Qu.: 5.3  
#>  Max.   :138.5   Max.   :110.3   Max.   :100.0   Max.   :66.4  
#>     Sanitasi          TPM            Miskin           RLS       
#>  Min.   :  4.8   Min.   :  9.2   Min.   : 2.57   Min.   : 3.48  
#>  1st Qu.: 90.2   1st Qu.: 51.4   1st Qu.: 7.47   1st Qu.: 7.18  
#>  Median : 97.7   Median : 62.8   Median :10.21   Median : 8.10  
#>  Mean   : 92.9   Mean   : 61.7   Mean   :10.34   Mean   : 8.47  
#>  3rd Qu.:100.0   3rd Qu.: 74.5   3rd Qu.:12.69   3rd Qu.:10.01  
#>  Max.   :232.2   Max.   :100.0   Max.   :23.76   Max.   :11.89  
#>    kepadatan        kb_aktif        posyandu      Pengeluaran   
#>  Min.   :  280   Min.   : 40.8   Min.   :  0.1   Min.   : 7829  
#>  1st Qu.:  782   1st Qu.: 68.8   1st Qu.: 67.4   1st Qu.: 9830  
#>  Median : 1124   Median : 72.9   Median : 81.1   Median :10942  
#>  Mean   : 3242   Mean   : 73.6   Mean   : 76.7   Mean   :11749  
#>  3rd Qu.: 3312   3rd Qu.: 78.3   3rd Qu.: 90.8   3rd Qu.:12762  
#>  Max.   :20360   Max.   :145.5   Max.   :118.5   Max.   :23888  
#>   Pengangguran        Gini            Kode            Lat       
#>  Min.   : 2.04   Min.   :0.264   Min.   :  1.0   Min.   :-8.22  
#>  1st Qu.: 4.79   1st Qu.:0.320   1st Qu.: 30.5   1st Qu.:-7.66  
#>  Median : 6.55   Median :0.340   Median : 60.0   Median :-7.19  
#>  Mean   : 6.86   Mean   :0.348   Mean   : 60.0   Mean   :-7.18  
#>  3rd Qu.: 9.10   3rd Qu.:0.370   3rd Qu.: 89.5   3rd Qu.:-6.83  
#>  Max.   :13.07   Max.   :0.489   Max.   :119.0   Max.   :-5.75  
#>       Long       kode_prov     logStunting        E_d      
#>  Min.   :106   Min.   :31.0   Min.   :0.00   Min.   :56.6  
#>  1st Qu.:108   1st Qu.:32.0   1st Qu.:3.11   1st Qu.:56.6  
#>  Median :110   Median :33.0   Median :3.69   Median :56.6  
#>  Mean   :110   Mean   :33.6   Mean   :3.62   Mean   :56.6  
#>  3rd Qu.:112   3rd Qu.:35.0   3rd Qu.:4.20   3rd Qu.:56.6  
#>  Max.   :114   Max.   :36.0   Max.   :5.91   Max.   :56.6
palette(terrain.colors(6))
plot(jawa, col=jawa$kode_prov-30)
text(jawa,'Kode',cex=0.5)

Exploratory Data Analysis

Stunting

my.palette.1<-brewer.pal(n=4,name="OrRd")
spplot(jawa,'Stunting', cuts=3, col.regions=my.palette.1, cex=c(0.3,1,0.3), main="Banyaknya Stunting per 100.000 di Pulau Jawa", at = c(min(jawa$Stunting) - 1, 50, 100, 150, max(jawa$Stunting) + 1))

Insidensi stunting tinggi banyak terjadi di Jawa Barat, dengan kasus tertinggi di Kabupaten Bogor.

ASI

my.palette.1<-brewer.pal(n=4,name="OrRd")
spplot(jawa,'ASI', cuts=3, col.regions=my.palette.1, cex=c(0.3,1,0.3), main="Persentase tingkat balita yang mendapatkan ASI eksklusif di Pulau Jawa")

Imunisasi

my.palette.1<-brewer.pal(n=4,name="OrRd")
spplot(jawa,'Imunisasi', cuts=3, col.regions=my.palette.1, cex=c(0.3,1,0.3), main="Persentase balita yang mendapatkan imunisasi dasar lengkap di Pulau Jawa",at = c(min(jawa$Imunisasi) - 1, 30, 60, 90, max(jawa$Imunisasi) + 1))

Sanitasi

my.palette.1<-brewer.pal(n=4,name="OrRd")
spplot(jawa,'Sanitasi', cuts=3, col.regions=my.palette.1, cex=c(0.3,1,0.3), main="Persentase keluarga dengan akses sanitasi layak",at = c(min(jawa$Sanitasi) - 1, 30, 60, 90, max(jawa$Sanitasi) + 1))

Miskin

my.palette.1<-brewer.pal(n=4,name="OrRd")
spplot(jawa,'Miskin', cuts=3, col.regions=my.palette.1, cex=c(0.3,1,0.3), main="Persentase Penduduk Miskin di Pulau Jawa")

Correlation plot

eda_data <- jawa_data %>%
    dplyr::select(Stunting, ASI,Imunisasi, Sanitasi, Miskin)
PerformanceAnalytics::chart.Correlation(eda_data, histogram = TRUE, pch = 19)
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter

Correlation Matrix

round(cor(eda_data), 4)
#>           Stunting     ASI Imunisasi Sanitasi  Miskin
#> Stunting    1.0000 -0.0661   -0.0606  -0.1665  0.1187
#> ASI        -0.0661  1.0000    0.1349  -0.0172  0.0292
#> Imunisasi  -0.0606  0.1349    1.0000  -0.0314 -0.0364
#> Sanitasi   -0.1665 -0.0172   -0.0314   1.0000 -0.0176
#> Miskin      0.1187  0.0292   -0.0364  -0.0176  1.0000

Correlation plot

eda_data <- jawa_data %>%
    dplyr::select(ASI, Imunisasi, Sanitasi, Miskin)
PerformanceAnalytics::chart.Correlation(eda_data, histogram = TRUE, pch = 19)
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter
#> Warning in par(usr): argument 1 does not name a graphical parameter

Correlation Matrix

round(cor(eda_data), 4)
#>               ASI Imunisasi Sanitasi  Miskin
#> ASI        1.0000    0.1349  -0.0172  0.0292
#> Imunisasi  0.1349    1.0000  -0.0314 -0.0364
#> Sanitasi  -0.0172   -0.0314   1.0000 -0.0176
#> Miskin     0.0292   -0.0364  -0.0176  1.0000

Multicollinearity Test

form_fit <- Stunting ~ ASI + Imunisasi + Sanitasi + Miskin
lin_mod <- glm(form_fit, data = jawa_data)
vif(lin_mod)
#>       ASI Imunisasi  Sanitasi    Miskin 
#>      1.02      1.02      1.00      1.00

Dari nilai VIF di atas yang kurang dari 10 menunjukkan bahwa tidak terdapat multikolinieritas antar peubah penjelas.

Overdispersion Test

#Cek Overdispersi
poisson<-glm(jawa_data$Stunting ~ jawa_data$ASI + jawa_data$Imunisasi + jawa_data$Sanitasi + jawa_data$Miskin, data=jawa_data, family = poisson())
model1 <- glm(jawa_data$Stunting~1, data=jawa_data, family = poisson())
dispersiontest(poisson)
#> 
#>  Overdispersion test
#> 
#> data:  poisson
#> z = 3, p-value = 0.002
#> alternative hypothesis: true dispersion is greater than 1
#> sample estimates:
#> dispersion 
#>       55.2
summary(poisson)
#> 
#> Call:
#> glm(formula = jawa_data$Stunting ~ jawa_data$ASI + jawa_data$Imunisasi + 
#>     jawa_data$Sanitasi + jawa_data$Miskin, family = poisson(), 
#>     data = jawa_data)
#> 
#> Coefficients:
#>                      Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)          4.988258   0.096277   51.81  < 2e-16 ***
#> jawa_data$ASI       -0.003785   0.000967   -3.91  9.1e-05 ***
#> jawa_data$Imunisasi -0.002410   0.000581   -4.15  3.4e-05 ***
#> jawa_data$Sanitasi  -0.008468   0.000601  -14.09  < 2e-16 ***
#> jawa_data$Miskin     0.028068   0.002810    9.99  < 2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for poisson family taken to be 1)
#> 
#>     Null deviance: 5011.7  on 118  degrees of freedom
#> Residual deviance: 4685.6  on 114  degrees of freedom
#> AIC: 5346
#> 
#> Number of Fisher Scoring iterations: 5
anova(model1, poisson, test="Chisq")
#> Analysis of Deviance Table
#> 
#> Model 1: jawa_data$Stunting ~ 1
#> Model 2: jawa_data$Stunting ~ jawa_data$ASI + jawa_data$Imunisasi + jawa_data$Sanitasi + 
#>     jawa_data$Miskin
#>   Resid. Df Resid. Dev Df Deviance Pr(>Chi)    
#> 1       118       5012                         
#> 2       114       4686  4      326   <2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Diperoleh p-value < 0.05, yang artinya bahwa nilai dispersi lebih dari 1. Sehingga dapat disimpulkan bahwa terdapat dispersi pada data.

#Cek Sebaran
poisson <- fitdist(jawa_data$Stunting, "pois", method = c("mle", "mme", "qme", "mge", "mse"), 
                   start=NULL, fix.arg=NULL, T, keepdata = TRUE)
binom.negatif <- fitdist(jawa_data$Stunting, "nbinom", method = c("mle", "mme", "qme", "mge", "mse"), 
                         start=NULL, fix.arg=NULL, T, keepdata = TRUE)
qqcomp(list(poisson, binom.negatif), legendtext = c("Pois", "Neg Binom"), fitpch="o", fitcol = c("red","green"))

descdist(jawa_data$Stunting, discrete = TRUE, boot=1000)
#> summary statistics
#> ------
#> min:  1   max:  368 
#> median:  40 
#> mean:  56.6 
#> estimated sd:  56.6 
#> estimated skewness:  2.66 
#> estimated kurtosis:  12.6

Spatial Weighted Matrix

Queen continguity

wm_q <- poly2nb(jawa, queen = TRUE)
#> Warning in poly2nb(jawa, queen = TRUE): some observations have no neighbours;
#> if this seems unexpected, try increasing the snap argument.
#> Warning in poly2nb(jawa, queen = TRUE): neighbour object has 3 sub-graphs;
#> if this sub-graph count seems unexpected, try increasing the snap argument.
summary(wm_q)
#> Neighbour list object:
#> Number of regions: 119 
#> Number of nonzero links: 520 
#> Percentage nonzero weights: 3.67 
#> Average number of links: 4.37 
#> 1 region with no links:
#> 0
#> 3 disjoint connected subgraphs
#> Link number distribution:
#> 
#>  0  1  2  3  4  5  6  7  8  9 11 
#>  1 15 10 13 22 20 20 11  4  2  1 
#> 15 least connected regions:
#> 3 45 46 47 49 51 53 54 55 56 58 59 61 62 109 with 1 link
#> 1 most connected region:
#> 12 with 11 links
  • Terdapat 119 Kabupaten/Kota di Pulau Jawa.
  • Terdapat satu daerah yang tidak bersinggungan dengan daerah lain, yaitu Kepulauan Seribu.
  • Daerah yang paling banyak bersinggungan dengan daerah lain, yaitu Bogor yang bersinggungan dengan 11 daerah.
plot(jawa, borders = 'lightgrey', main = "Queen Contiguity Based Neighbours Maps") 
#> Warning in title(...): "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
#> Warning in polypath(x = mcrds[, 1], y = mcrds[, 2], border =
#> border, col = col, : "borders" is not a graphical parameter
plot(wm_q, coordinates(jawa), pch = 19, cex = 0.6, add = TRUE, col = "red")

Exponential Weight

coords <- coordinates(jawa)
dist <- nbdists(wm_q, coords, longlat = TRUE)
eds <- lapply(dist, function(x) exp(-1*x))
head(eds)
#> [[1]]
#> numeric(0)
#> 
#> [[2]]
#> [1] 2.42e-14 2.36e-22 5.84e-16 2.15e-09 2.36e-11 9.44e-31 6.80e-23
#> 
#> [[3]]
#> [1] 2.42e-14 1.40e-17 1.88e-11 7.20e-07 6.35e-15 1.88e-25
#> 
#> [[4]]
#> [1] 1.94e-16
#> 
#> [[5]]
#> [1] 2.43e-24 2.23e-19 1.95e-15 5.68e-15 8.69e-13 4.01e-13
#> 
#> [[6]]
#> [1] 8.34e-14 1.60e-05 1.45e-10 1.55e-09

Inverse Distance Weight

ids <- lapply(dist, function(x) 1/(x))
head(ids)
#> [[1]]
#> numeric(0)
#> 
#> [[2]]
#> [1] 0.0319 0.0201 0.0285 0.0501 0.0409 0.0145 0.0196
#> 
#> [[3]]
#> [1] 0.0319 0.0258 0.0405 0.0707 0.0306 0.0176
#> 
#> [[4]]
#> [1] 0.0276
#> 
#> [[5]]
#> [1] 0.0184 0.0233 0.0295 0.0305 0.0360 0.0350
#> 
#> [[6]]
#> [1] 0.0332 0.0905 0.0441 0.0493

Spatial Autocorrelation Test

rswm_q <- nb2listw(wm_q, style = "W", zero.policy = TRUE)
rswm_eds <- nb2listw(wm_q, glist = eds, style = "B", zero.policy = TRUE)
rswm_ids <- nb2listw(wm_q, glist = ids, style = "B", zero.policy = TRUE)
moran_q <- moran.test(jawa$logStunting, listw = rswm_q, zero.policy = TRUE)
moran_q
#> 
#>  Moran I test under randomisation
#> 
#> data:  jawa$logStunting  
#> weights: rswm_q  
#> n reduced by no-neighbour observations  
#> 
#> Moran I statistic standard deviate = 1, p-value = 0.2
#> alternative hypothesis: greater
#> sample estimates:
#> Moran I statistic       Expectation          Variance 
#>           0.05915          -0.00855           0.00454
moran_eds <- moran.test(jawa$logStunting, listw = rswm_eds, zero.policy = TRUE)
moran_eds
#> 
#>  Moran I test under randomisation
#> 
#> data:  jawa$logStunting  
#> weights: rswm_eds  
#> n reduced by no-neighbour observations  
#> 
#> Moran I statistic standard deviate = -0.6, p-value = 0.7
#> alternative hypothesis: greater
#> sample estimates:
#> Moran I statistic       Expectation          Variance 
#>          -0.55751          -0.00855           0.79378
moran_ids <- moran.test(jawa$logStunting, listw = rswm_ids, zero.policy = TRUE)
moran_ids
#> 
#>  Moran I test under randomisation
#> 
#> data:  jawa$logStunting  
#> weights: rswm_ids  
#> n reduced by no-neighbour observations  
#> 
#> Moran I statistic standard deviate = -0.3, p-value = 0.6
#> alternative hypothesis: greater
#> sample estimates:
#> Moran I statistic       Expectation          Variance 
#>          -0.06538          -0.00855           0.03140
Weighted Matrix Moran’s Index E(I) Var(I) p-value
Queen Continuity 0.0591 -0.0085 0.0045 0.1576
Exponential Distance -0.5575 -0.0085 0.7938 0.7311
Inverse Distance -0.0654 -0.0085 0.0314 0.6258

Matriks Bobot

# Distance Matrix
longlat<-cbind(jawa_data$Long ,jawa_data$Lat)
gdist<-pointDistance(longlat,lonlat=TRUE) 
m.gdist<-as.matrix(gdist)
djarak<-dist(longlat)
m.djarak<-as.matrix(djarak)
#K-Nearest Neighbour Weight dengan k=4
koord <- coordinates(jawa)
W1<-knn2nb(knearneigh(longlat,k=4,longlat=TRUE)) 
WW1<- nb2listw(W1,style='W') 
WW1
#> Characteristics of weights list object:
#> Neighbour list object:
#> Number of regions: 119 
#> Number of nonzero links: 476 
#> Percentage nonzero weights: 3.36 
#> Average number of links: 4 
#> Non-symmetric neighbours list
#> 
#> Weights style: W 
#> Weights constants summary:
#>     n    nn  S0 S1  S2
#> W 119 14161 119 52 496
MI1 <- moran.test(jawa_data$Stunting,WW1)  

Uji Moran

moran.test(jawa_data$Stunting, WW1,randomisation=T, 
           alternative="two.sided")
#> 
#>  Moran I test under randomisation
#> 
#> data:  jawa_data$Stunting  
#> weights: WW1    
#> 
#> Moran I statistic standard deviate = 2, p-value = 0.05
#> alternative hypothesis: two.sided
#> sample estimates:
#> Moran I statistic       Expectation          Variance 
#>           0.10526          -0.00847           0.00323

Berdasarkan uji Indeks Moran di atas, diperoleh p-value < 0.05, artinya bahwa \(H_0\) ditolak. Sehingga dapat disimpulkan bahwa terdapat autokorelasi spasial pada data.

Model Estimation

GLM

glm_mod <- inla(form_fit, data = jawa@data, family = "nbinomial", E = E_d,
  control.predictor = list(compute = TRUE, link = 1),
  control.compute = list(dic = TRUE))
summary(glm_mod)
#> Time used:
#>     Pre = 0.35, Running = 0.246, Post = 24.9, Total = 25.5 
#> Fixed effects:
#>               mean    sd 0.025quant 0.5quant 0.975quant   mode kld
#> (Intercept)  1.109 0.692     -0.248    1.109      2.468  1.109   0
#> ASI         -0.005 0.006     -0.018   -0.005      0.007 -0.005   0
#> Imunisasi   -0.003 0.004     -0.011   -0.003      0.005 -0.003   0
#> Sanitasi    -0.009 0.004     -0.017   -0.009     -0.002 -0.009   0
#> Miskin       0.037 0.020     -0.003    0.037      0.077  0.037   0
#> 
#> Model hyperparameters:
#>                                                        mean    sd
#> size for the nbinomial observations (1/overdispersion) 1.51 0.184
#>                                                        0.025quant
#> size for the nbinomial observations (1/overdispersion)       1.18
#>                                                        0.5quant
#> size for the nbinomial observations (1/overdispersion)     1.50
#>                                                        0.975quant
#> size for the nbinomial observations (1/overdispersion)       1.90
#>                                                        mode
#> size for the nbinomial observations (1/overdispersion) 1.49
#> 
#> Deviance Information Criterion (DIC) ...............: 1196.11
#> Deviance Information Criterion (DIC, saturated) ....: -6412.71
#> Effective number of parameters .....................: 6.00
#> 
#> Marginal log-Likelihood:  -633.55 
#>  is computed 
#> Posterior summaries for the linear predictor and the fitted values are computed
#> (Posterior marginals needs also 'control.compute=list(return.marginals.predictor=TRUE)')
glm1<-glm.nb(form_fit, data = jawa@data)
summary(glm1)
#> 
#> Call:
#> glm.nb(formula = form_fit, data = jawa@data, init.theta = 1.502309197, 
#>     link = log)
#> 
#> Coefficients:
#>             Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)  5.08798    0.65683    7.75  9.5e-15 ***
#> ASI         -0.00472    0.00601   -0.79    0.432    
#> Imunisasi   -0.00293    0.00384   -0.76    0.446    
#> Sanitasi    -0.00939    0.00382   -2.46    0.014 *  
#> Miskin       0.03701    0.01812    2.04    0.041 *  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for Negative Binomial(1.5) family taken to be 1)
#> 
#>     Null deviance: 140.70  on 118  degrees of freedom
#> Residual deviance: 130.81  on 114  degrees of freedom
#> AIC: 1196
#> 
#> Number of Fisher Scoring iterations: 1
#> 
#> 
#>               Theta:  1.502 
#>           Std. Err.:  0.186 
#> 
#>  2 x log-likelihood:  -1184.083

Residuals autocorrelation

moran.test(residuals(glm_mod)[[1]], listw = WW1, na.action = na.omit, zero.policy = T)
#> 
#>  Moran I test under randomisation
#> 
#> data:  residuals(glm_mod)[[1]]  
#> weights: WW1    
#> 
#> Moran I statistic standard deviate = 0.6, p-value = 0.3
#> alternative hypothesis: greater
#> sample estimates:
#> Moran I statistic       Expectation          Variance 
#>           0.02844          -0.00847           0.00348

Diperoleh p-value < 0.05, yang artinya bahwa terdapat autokorelasi spasial pada galat model GLM.

GLMM

form_fit2 <- Stunting ~  Imunisasi + ASI + Sanitasi + Miskin +
  f(ID, model = "iid", param = c(1, .5))
glmm_mod <- inla(form_fit2, data = jawa@data, family = "nbinomial", E = E_d,
  control.predictor = list(compute = TRUE, link = 1),
  control.compute = list(dic = TRUE))
summary(glmm_mod)
#> Time used:
#>     Pre = 0.222, Running = 0.291, Post = 31.4, Total = 31.9 
#> Fixed effects:
#>               mean    sd 0.025quant 0.5quant 0.975quant   mode kld
#> (Intercept)  0.540 0.708     -0.853    0.541      1.930  0.541   0
#> Imunisasi   -0.005 0.004     -0.013   -0.005      0.003 -0.005   0
#> ASI         -0.004 0.006     -0.017   -0.004      0.009 -0.004   0
#> Sanitasi    -0.008 0.004     -0.016   -0.008      0.000 -0.008   0
#> Miskin       0.056 0.020      0.017    0.056      0.095  0.056   0
#> 
#> Random effects:
#>   Name     Model
#>     ID IID model
#> 
#> Model hyperparameters:
#>                                                           mean
#> size for the nbinomial observations (1/overdispersion) 1973.16
#> Precision for ID                                          1.35
#>                                                              sd
#> size for the nbinomial observations (1/overdispersion) 2.04e+04
#> Precision for ID                                       2.05e-01
#>                                                        0.025quant
#> size for the nbinomial observations (1/overdispersion)       5.98
#> Precision for ID                                             0.99
#>                                                        0.5quant
#> size for the nbinomial observations (1/overdispersion)   144.59
#> Precision for ID                                           1.34
#>                                                        0.975quant
#> size for the nbinomial observations (1/overdispersion)   12474.58
#> Precision for ID                                             1.79
#>                                                         mode
#> size for the nbinomial observations (1/overdispersion) 11.33
#> Precision for ID                                        1.32
#> 
#> Deviance Information Criterion (DIC) ...............: 1003.91
#> Deviance Information Criterion (DIC, saturated) ....: 253.96
#> Effective number of parameters .....................: 129.50
#> 
#> Marginal log-Likelihood:  -625.83 
#>  is computed 
#> Posterior summaries for the linear predictor and the fitted values are computed
#> (Posterior marginals needs also 'control.compute=list(return.marginals.predictor=TRUE)')

Komponen acak yang digunakan adalah Independent Gaussian Random Effect. Komponennya adalah sebagai berikut:

rand_glmm <- cbind(jawa@data$Provinsi,jawa@data$KabKota, glmm_mod$summary.random$ID[,c('ID', 'mean')])
names(rand_glmm) <- c("Provinsi","KabKota", "ID", "iid")
rand_glmm
#>          Provinsi                KabKota  ID      iid
#> 1     DKI Jakarta       Kepulauan Seribu   1 -1.92061
#> 2      Jawa Barat                Bandung   2  1.58686
#> 3      Jawa Barat          Bandung Barat   3  0.99858
#> 4      Jawa Timur              Bangkalan   4 -1.31739
#> 5     Jawa Tengah           Banjarnegara   5  0.71354
#> 6   DI Yogyakarta                 Bantul   6 -0.18243
#> 7     Jawa Tengah               Banyumas   7  0.92673
#> 8      Jawa Timur             Banyuwangi   8  0.05498
#> 9     Jawa Tengah                 Batang   9  0.18985
#> 10     Jawa Barat                 Bekasi  10  0.19760
#> 11     Jawa Timur                 Blitar  11  0.40268
#> 12    Jawa Tengah                  Blora  12 -0.03287
#> 13     Jawa Barat                  Bogor  13  2.24594
#> 14     Jawa Timur             Bojonegoro  14 -0.56576
#> 15     Jawa Timur              Bondowoso  15 -0.12135
#> 16    Jawa Tengah               Boyolali  16  0.22575
#> 17    Jawa Tengah                 Brebes  17  0.74695
#> 18     Jawa Barat                 Ciamis  18 -0.31841
#> 19     Jawa Barat                Cianjur  19  0.86343
#> 20    Jawa Tengah                Cilacap  20  0.09518
#> 21     Jawa Barat                Cirebon  21  1.00910
#> 22    Jawa Tengah                  Demak  22 -0.28924
#> 23     Jawa Barat                  Garut  23  2.07900
#> 24     Jawa Timur                 Gresik  24  0.74706
#> 25    Jawa Tengah               Grobogan  25  0.33579
#> 26  DI Yogyakarta            Gunungkidul  26  0.00408
#> 27     Jawa Barat              Indramayu  27  0.06413
#> 28     Jawa Timur                 Jember  28  0.84319
#> 29    Jawa Tengah                 Jepara  29  0.80847
#> 30     Jawa Timur                Jombang  30  0.50972
#> 31    Jawa Tengah            Karanganyar  31 -0.64370
#> 32     Jawa Barat               Karawang  32 -0.20285
#> 33    Jawa Tengah                Kebumen  33  0.39124
#> 34     Jawa Timur                 Kediri  34  0.82172
#> 35    Jawa Tengah                 Kendal  35  0.37053
#> 36    Jawa Tengah                 Klaten  36  0.77489
#> 37    DKI Jakarta          Jakarta Barat  37  0.85209
#> 38    DKI Jakarta          Jakarta Pusat  38 -0.39096
#> 39    DKI Jakarta        Jakarta Selatan  39 -1.17365
#> 40    DKI Jakarta          Jakarta Timur  40 -0.17625
#> 41    DKI Jakarta          Jakarta Utara  41 -0.40299
#> 42     Jawa Barat           Kota Bandung  42  0.86226
#> 43     Jawa Barat            Kota Banjar  43 -1.54385
#> 44     Jawa Timur              Kota Batu  44 -0.31482
#> 45     Jawa Barat            Kota Bekasi  45  0.47286
#> 46     Jawa Timur            Kota Blitar  46 -1.48461
#> 47     Jawa Barat             Kota Bogor  47 -0.05834
#> 48         Banten           Kota Cilegon  48 -0.60054
#> 49     Jawa Barat            Kota Cimahi  49  0.27902
#> 50     Jawa Barat           Kota Cirebon  50 -0.39427
#> 51     Jawa Barat             Kota Depok  51 -0.00110
#> 52     Jawa Timur            Kota Kediri  52 -0.94249
#> 53     Jawa Timur            Kota Madiun  53 -1.26011
#> 54    Jawa Tengah          Kota Magelang  54 -1.58740
#> 55     Jawa Timur            Kota Malang  55  0.30368
#> 56     Jawa Timur         Kota Mojokerto  56 -1.89639
#> 57     Jawa Timur          Kota Pasuruan  57 -0.24426
#> 58    Jawa Tengah        Kota Pekalongan  58 -0.69005
#> 59     Jawa Timur       Kota Probolinggo  59 -0.53377
#> 60    Jawa Tengah          Kota Salatiga  60 -1.05816
#> 61    Jawa Tengah          Kota Semarang  61 -0.42559
#> 62         Banten            Kota Serang  62  0.34668
#> 63     Jawa Barat          Kota Sukabumi  63 -0.71138
#> 64     Jawa Timur          Kota Surabaya  64 -0.16827
#> 65    Jawa Tengah         Kota Surakarta  65 -0.89246
#> 66         Banten         Kota Tangerang  66  0.38752
#> 67         Banten Kota Tangerang Selatan  67 -1.05295
#> 68     Jawa Barat       Kota Tasikmalaya  68  0.47174
#> 69    Jawa Tengah             Kota Tegal  69 -0.97056
#> 70  DI Yogyakarta        Kota Yogyakarta  70 -0.64684
#> 71    Jawa Tengah                  Kudus  71  0.25512
#> 72  DI Yogyakarta            Kulon Progo  72 -0.73537
#> 73     Jawa Barat               Kuningan  73  0.26467
#> 74     Jawa Timur               Lamongan  74 -0.12476
#> 75         Banten                  Lebak  75 -0.23336
#> 76     Jawa Timur               Lumajang  76  0.23570
#> 77     Jawa Timur                 Madiun  77  0.23037
#> 78    Jawa Tengah               Magelang  78  1.05132
#> 79     Jawa Timur                Magetan  79 -0.02828
#> 80     Jawa Barat             Majalengka  80 -0.35300
#> 81     Jawa Timur                 Malang  81  1.20800
#> 82     Jawa Timur              Mojokerto  82 -0.64610
#> 83     Jawa Timur                Nganjuk  83  0.11795
#> 84     Jawa Timur                  Ngawi  84  0.03229
#> 85     Jawa Timur                Pacitan  85 -0.24726
#> 86     Jawa Timur              Pamekasan  86 -0.38758
#> 87         Banten             Pandeglang  87 -0.71738
#> 88     Jawa Barat            Pangandaran  88 -1.54383
#> 89     Jawa Timur               Pasuruan  89 -0.65686
#> 90    Jawa Tengah                   Pati  90  0.36788
#> 91    Jawa Tengah             Pekalongan  91 -0.78304
#> 92    Jawa Tengah               Pemalang  92  0.40435
#> 93     Jawa Timur               Ponorogo  93  0.37056
#> 94     Jawa Timur            Probolinggo  94  0.54299
#> 95    Jawa Tengah            Purbalingga  95  0.56835
#> 96     Jawa Barat             Purwakarta  96 -0.30752
#> 97    Jawa Tengah              Purworejo  97  0.02227
#> 98    Jawa Tengah                Rembang  98  0.02017
#> 99     Jawa Timur                Sampang  99 -0.96164
#> 100   Jawa Tengah               Semarang 100  0.02064
#> 101        Banten                 Serang 101  0.50251
#> 102    Jawa Timur               Sidoarjo 102  0.63501
#> 103    Jawa Timur              Situbondo 103 -0.51098
#> 104 DI Yogyakarta                 Sleman 104  0.25168
#> 105   Jawa Tengah                 Sragen 105 -0.05524
#> 106    Jawa Barat                 Subang 106 -0.51864
#> 107    Jawa Barat               Sukabumi 107  1.37433
#> 108   Jawa Tengah              Sukoharjo 108  0.23425
#> 109    Jawa Barat               Sumedang 109  0.49675
#> 110    Jawa Timur                Sumenep 110 -0.77524
#> 111        Banten              Tangerang 111  0.32874
#> 112    Jawa Barat            Tasikmalaya 112  0.93012
#> 113   Jawa Tengah                  Tegal 113  1.70899
#> 114   Jawa Tengah             Temanggung 114  0.51006
#> 115    Jawa Timur             Trenggalek 115 -0.18662
#> 116    Jawa Timur                  Tuban 116  0.14917
#> 117    Jawa Timur            Tulungagung 117 -0.19299
#> 118   Jawa Tengah               Wonogiri 118  0.14849
#> 119   Jawa Tengah               Wonosobo 119  0.41827
view(rand_glmm)

Residuals autocorrelation

moran.test(residuals(glmm_mod)[[1]], listw = WW1, na.action = na.omit, zero.policy = T)
#> 
#>  Moran I test under randomisation
#> 
#> data:  residuals(glmm_mod)[[1]]  
#> weights: WW1    
#> 
#> Moran I statistic standard deviate = 0.5, p-value = 0.3
#> alternative hypothesis: greater
#> sample estimates:
#> Moran I statistic       Expectation          Variance 
#>           0.02245          -0.00847           0.00356

ICAR

wm_q.mat <- as(nb2mat(wm_q, style = "B", zero.policy = T), "Matrix")
# Fit model
form_fit3 <- Stunting ~ Imunisasi + ASI + Sanitasi + Miskin + 
  f(ID, model = "besag", graph = wm_q.mat)
icar_mod <- inla(form_fit3,
  data = jawa@data, E = E_d, family ="nbinomial",
  control.predictor = list(compute = TRUE, link = 1),
  control.compute = list(dic = TRUE))
summary(icar_mod)
#> Time used:
#>     Pre = 0.239, Running = 0.268, Post = 30, Total = 30.5 
#> Fixed effects:
#>               mean    sd 0.025quant 0.5quant 0.975quant   mode kld
#> (Intercept)  0.988 0.698     -0.393    0.991      2.351  0.991   0
#> Imunisasi   -0.002 0.004     -0.010   -0.002      0.005 -0.002   0
#> ASI         -0.005 0.006     -0.018   -0.005      0.007 -0.005   0
#> Sanitasi    -0.009 0.004     -0.017   -0.009     -0.002 -0.009   0
#> Miskin       0.042 0.021      0.001    0.042      0.084  0.042   0
#> 
#> Random effects:
#>   Name     Model
#>     ID Besags ICAR model
#> 
#> Model hyperparameters:
#>                                                            mean
#> size for the nbinomial observations (1/overdispersion) 1.46e+00
#> Precision for ID                                       5.74e+05
#>                                                              sd
#> size for the nbinomial observations (1/overdispersion) 2.08e-01
#> Precision for ID                                       4.86e+06
#>                                                        0.025quant
#> size for the nbinomial observations (1/overdispersion)       1.08
#> Precision for ID                                          1992.98
#>                                                        0.5quant
#> size for the nbinomial observations (1/overdispersion)     1.45
#> Precision for ID                                       60176.24
#>                                                        0.975quant
#> size for the nbinomial observations (1/overdispersion)   1.90e+00
#> Precision for ID                                         3.84e+06
#>                                                           mode
#> size for the nbinomial observations (1/overdispersion)    1.43
#> Precision for ID                                       3335.22
#> 
#> Deviance Information Criterion (DIC) ...............: 1189.92
#> Deviance Information Criterion (DIC, saturated) ....: -3122.74
#> Effective number of parameters .....................: 6.73
#> 
#> Marginal log-Likelihood:  -697.07 
#>  is computed 
#> Posterior summaries for the linear predictor and the fitted values are computed
#> (Posterior marginals needs also 'control.compute=list(return.marginals.predictor=TRUE)')

Komponen acak spasial yang digunakan pada model ICAR \(u\) adalah sebagai berikut:

rand_icar <- cbind(jawa@data$Provinsi,jawa@data$KabKota, icar_mod$summary.random$ID[,c('ID', 'mean')])
names(rand_icar) <- c("Provinsi","KabKota", "ID", "u")
rand_icar
#>          Provinsi                KabKota  ID         u
#> 1     DKI Jakarta       Kepulauan Seribu   1 -3.118377
#> 2      Jawa Barat                Bandung   2  0.046111
#> 3      Jawa Barat          Bandung Barat   3  0.043445
#> 4      Jawa Timur              Bangkalan   4 -0.002839
#> 5     Jawa Tengah           Banjarnegara   5  0.005548
#> 6   DI Yogyakarta                 Bantul   6 -0.012046
#> 7     Jawa Tengah               Banyumas   7  0.009261
#> 8      Jawa Timur             Banyuwangi   8 -0.013732
#> 9     Jawa Tengah                 Batang   9 -0.001868
#> 10     Jawa Barat                 Bekasi  10  0.024956
#> 11     Jawa Timur                 Blitar  11 -0.016111
#> 12    Jawa Tengah                  Blora  12 -0.014657
#> 13     Jawa Barat                  Bogor  13  0.042305
#> 14     Jawa Timur             Bojonegoro  14 -0.018918
#> 15     Jawa Timur              Bondowoso  15 -0.013710
#> 16    Jawa Tengah               Boyolali  16 -0.012239
#> 17    Jawa Tengah                 Brebes  17  0.013023
#> 18     Jawa Barat                 Ciamis  18  0.012135
#> 19     Jawa Barat                Cianjur  19  0.044356
#> 20    Jawa Tengah                Cilacap  20  0.009606
#> 21     Jawa Barat                Cirebon  21  0.017525
#> 22    Jawa Tengah                  Demak  22 -0.010668
#> 23     Jawa Barat                  Garut  23  0.040641
#> 24     Jawa Timur                 Gresik  24 -0.013499
#> 25    Jawa Tengah               Grobogan  25 -0.012133
#> 26  DI Yogyakarta            Gunungkidul  26 -0.012004
#> 27     Jawa Barat              Indramayu  27  0.020742
#> 28     Jawa Timur                 Jember  28 -0.014058
#> 29    Jawa Tengah                 Jepara  29 -0.013726
#> 30     Jawa Timur                Jombang  30 -0.014916
#> 31    Jawa Tengah            Karanganyar  31 -0.016995
#> 32     Jawa Barat               Karawang  32  0.027443
#> 33    Jawa Tengah                Kebumen  33  0.005510
#> 34     Jawa Timur                 Kediri  34 -0.014172
#> 35    Jawa Tengah                 Kendal  35 -0.008357
#> 36    Jawa Tengah                 Klaten  36 -0.011183
#> 37    DKI Jakarta          Jakarta Barat  37  0.021133
#> 38    DKI Jakarta          Jakarta Pusat  38  0.016619
#> 39    DKI Jakarta        Jakarta Selatan  39  0.016794
#> 40    DKI Jakarta          Jakarta Timur  40  0.018262
#> 41    DKI Jakarta          Jakarta Utara  41  0.017579
#> 42     Jawa Barat           Kota Bandung  42  0.037940
#> 43     Jawa Barat            Kota Banjar  43  0.010670
#> 44     Jawa Timur              Kota Batu  44 -0.016533
#> 45     Jawa Barat            Kota Bekasi  45  0.025222
#> 46     Jawa Timur            Kota Blitar  46 -0.023358
#> 47     Jawa Barat             Kota Bogor  47  0.020434
#> 48         Banten           Kota Cilegon  48  0.018558
#> 49     Jawa Barat            Kota Cimahi  49  0.035170
#> 50     Jawa Barat           Kota Cirebon  50  0.017615
#> 51     Jawa Barat             Kota Depok  51  0.021677
#> 52     Jawa Timur            Kota Kediri  52 -0.019472
#> 53     Jawa Timur            Kota Madiun  53 -0.019470
#> 54    Jawa Tengah          Kota Magelang  54 -0.021931
#> 55     Jawa Timur            Kota Malang  55 -0.016615
#> 56     Jawa Timur         Kota Mojokerto  56 -0.026302
#> 57     Jawa Timur          Kota Pasuruan  57 -0.017077
#> 58    Jawa Tengah        Kota Pekalongan  58 -0.005129
#> 59     Jawa Timur       Kota Probolinggo  59 -0.016880
#> 60    Jawa Tengah          Kota Salatiga  60 -0.019160
#> 61    Jawa Tengah          Kota Semarang  61 -0.011137
#> 62         Banten            Kota Serang  62  0.017764
#> 63     Jawa Barat          Kota Sukabumi  63  0.021266
#> 64     Jawa Timur          Kota Surabaya  64 -0.014904
#> 65    Jawa Tengah         Kota Surakarta  65 -0.015362
#> 66         Banten         Kota Tangerang  66  0.019273
#> 67         Banten Kota Tangerang Selatan  67  0.019199
#> 68     Jawa Barat       Kota Tasikmalaya  68  0.015573
#> 69    Jawa Tengah             Kota Tegal  69  0.014959
#> 70  DI Yogyakarta        Kota Yogyakarta  70 -0.014405
#> 71    Jawa Tengah                  Kudus  71 -0.011546
#> 72  DI Yogyakarta            Kulon Progo  72 -0.010793
#> 73     Jawa Barat               Kuningan  73  0.012958
#> 74     Jawa Timur               Lamongan  74 -0.016837
#> 75         Banten                  Lebak  75  0.023481
#> 76     Jawa Timur               Lumajang  76 -0.014091
#> 77     Jawa Timur                 Madiun  77 -0.018714
#> 78    Jawa Tengah               Magelang  78 -0.008455
#> 79     Jawa Timur                Magetan  79 -0.018646
#> 80     Jawa Barat             Majalengka  80  0.017791
#> 81     Jawa Timur                 Malang  81 -0.012918
#> 82     Jawa Timur              Mojokerto  82 -0.020649
#> 83     Jawa Timur                Nganjuk  83 -0.017408
#> 84     Jawa Timur                  Ngawi  84 -0.017222
#> 85     Jawa Timur                Pacitan  85 -0.016466
#> 86     Jawa Timur              Pamekasan  86  0.001917
#> 87         Banten             Pandeglang  87  0.018359
#> 88     Jawa Barat            Pangandaran  88  0.019974
#> 89     Jawa Timur               Pasuruan  89 -0.018175
#> 90    Jawa Tengah                   Pati  90 -0.011457
#> 91    Jawa Tengah             Pekalongan  91  0.002149
#> 92    Jawa Tengah               Pemalang  92  0.009390
#> 93     Jawa Timur               Ponorogo  93 -0.018003
#> 94     Jawa Timur            Probolinggo  94 -0.013404
#> 95    Jawa Tengah            Purbalingga  95  0.008448
#> 96     Jawa Barat             Purwakarta  96  0.034539
#> 97    Jawa Tengah              Purworejo  97 -0.007723
#> 98    Jawa Tengah                Rembang  98 -0.013231
#> 99     Jawa Timur                Sampang  99 -0.000746
#> 100   Jawa Tengah               Semarang 100 -0.009623
#> 101        Banten                 Serang 101  0.017486
#> 102    Jawa Timur               Sidoarjo 102 -0.013735
#> 103    Jawa Timur              Situbondo 103 -0.014709
#> 104 DI Yogyakarta                 Sleman 104 -0.010300
#> 105   Jawa Tengah                 Sragen 105 -0.013590
#> 106    Jawa Barat                 Subang 106  0.033298
#> 107    Jawa Barat               Sukabumi 107  0.037783
#> 108   Jawa Tengah              Sukoharjo 108 -0.013020
#> 109    Jawa Barat               Sumedang 109  0.033975
#> 110    Jawa Timur                Sumenep 110  0.001665
#> 111        Banten              Tangerang 111  0.023613
#> 112    Jawa Barat            Tasikmalaya 112  0.025878
#> 113   Jawa Tengah                  Tegal 113  0.015364
#> 114   Jawa Tengah             Temanggung 114 -0.008955
#> 115    Jawa Timur             Trenggalek 115 -0.016945
#> 116    Jawa Timur                  Tuban 116 -0.014537
#> 117    Jawa Timur            Tulungagung 117 -0.017670
#> 118   Jawa Tengah               Wonogiri 118 -0.016048
#> 119   Jawa Tengah               Wonosobo 119 -0.003386
view(rand_icar)

Residuals autocorrelation

moran.test(residuals(icar_mod)[[1]], listw = WW1, na.action = na.omit, zero.policy = T)
#> 
#>  Moran I test under randomisation
#> 
#> data:  residuals(icar_mod)[[1]]  
#> weights: WW1    
#> 
#> Moran I statistic standard deviate = 1, p-value = 0.1
#> alternative hypothesis: greater
#> sample estimates:
#> Moran I statistic       Expectation          Variance 
#>           0.05999          -0.00847           0.00348

BYM

form_fit4 <- Stunting ~ ASI + Imunisasi + Sanitasi + Miskin + 
  f(ID, model = "bym", graph = wm_q.mat)
bym_mod <- inla(form_fit4,
  data = jawa@data, E = E_d, family ="nbinomial",
  control.predictor = list(compute = TRUE, link = 1),
  control.compute = list(dic = TRUE))
summary(bym_mod)
#> Time used:
#>     Pre = 0.878, Running = 0.523, Post = 34.4, Total = 35.8 
#> Fixed effects:
#>               mean    sd 0.025quant 0.5quant 0.975quant   mode kld
#> (Intercept)  0.382 0.692     -0.979    0.382      1.742  0.382   0
#> ASI         -0.004 0.006     -0.017   -0.004      0.008 -0.004   0
#> Imunisasi   -0.003 0.004     -0.011   -0.003      0.005 -0.003   0
#> Sanitasi    -0.009 0.004     -0.017   -0.009     -0.001 -0.009   0
#> Miskin       0.062 0.019      0.024    0.062      0.100  0.062   0
#> 
#> Random effects:
#>   Name     Model
#>     ID BYM model
#> 
#> Model hyperparameters:
#>                                                           mean
#> size for the nbinomial observations (1/overdispersion) 1651.85
#> Precision for ID (iid component)                          1.47
#> Precision for ID (spatial component)                   2115.72
#>                                                              sd
#> size for the nbinomial observations (1/overdispersion) 1.60e+04
#> Precision for ID (iid component)                       2.24e-01
#> Precision for ID (spatial component)                   2.39e+03
#>                                                        0.025quant
#> size for the nbinomial observations (1/overdispersion)       5.99
#> Precision for ID (iid component)                             1.06
#> Precision for ID (spatial component)                       126.01
#>                                                        0.5quant
#> size for the nbinomial observations (1/overdispersion)   134.71
#> Precision for ID (iid component)                           1.45
#> Precision for ID (spatial component)                    1358.25
#>                                                        0.975quant
#> size for the nbinomial observations (1/overdispersion)   10621.81
#> Precision for ID (iid component)                             1.95
#> Precision for ID (spatial component)                      8446.44
#>                                                          mode
#> size for the nbinomial observations (1/overdispersion)  11.63
#> Precision for ID (iid component)                         1.43
#> Precision for ID (spatial component)                   335.78
#> 
#> Deviance Information Criterion (DIC) ...............: 986.94
#> Deviance Information Criterion (DIC, saturated) ....: 247.20
#> Effective number of parameters .....................: 124.01
#> 
#> Marginal log-Likelihood:  -584.28 
#>  is computed 
#> Posterior summaries for the linear predictor and the fitted values are computed
#> (Posterior marginals needs also 'control.compute=list(return.marginals.predictor=TRUE)')

Komponen acak spasial yang digunakan pada model ICAR \(u\) adalah sebagai berikut:

rand_bym <- cbind(jawa@data$Provinsi,jawa@data$KabKota, bym_mod$summary.random$ID[1:119, c('ID', 'mean')], bym_mod$summary.random$ID[120:238, c('mean')])
names(rand_bym) <- c("Provinsi","KabKota", "ID", "u", "v")
rand_bym
#>          Provinsi                KabKota  ID        u         v
#> 1     DKI Jakarta       Kepulauan Seribu   1 -2.86740 -2.867204
#> 2      Jawa Barat                Bandung   2  1.56561  0.012690
#> 3      Jawa Barat          Bandung Barat   3  0.98639  0.012841
#> 4      Jawa Timur              Bangkalan   4 -1.38053 -0.001172
#> 5     Jawa Tengah           Banjarnegara   5  0.65107  0.001118
#> 6   DI Yogyakarta                 Bantul   6 -0.23511 -0.005563
#> 7     Jawa Tengah               Banyumas   7  0.91692  0.003352
#> 8      Jawa Timur             Banyuwangi   8  0.04782 -0.008689
#> 9     Jawa Tengah                 Batang   9  0.15991 -0.000519
#> 10     Jawa Barat                 Bekasi  10  0.24293  0.011898
#> 11     Jawa Timur                 Blitar  11  0.36698 -0.009416
#> 12    Jawa Tengah                  Blora  12 -0.09052 -0.006879
#> 13     Jawa Barat                  Bogor  13  2.27172  0.012393
#> 14     Jawa Timur             Bojonegoro  14 -0.55080 -0.007962
#> 15     Jawa Timur              Bondowoso  15 -0.18632 -0.008803
#> 16    Jawa Tengah               Boyolali  16  0.18830 -0.005782
#> 17    Jawa Tengah                 Brebes  17  0.71340  0.005249
#> 18     Jawa Barat                 Ciamis  18 -0.41788  0.006199
#> 19     Jawa Barat                Cianjur  19  0.90190  0.012726
#> 20    Jawa Tengah                Cilacap  20  0.11894  0.004508
#> 21     Jawa Barat                Cirebon  21  0.99172  0.007392
#> 22    Jawa Tengah                  Demak  22 -0.32442 -0.005222
#> 23     Jawa Barat                  Garut  23  2.06530  0.012058
#> 24     Jawa Timur                 Gresik  24  0.71635 -0.008563
#> 25    Jawa Tengah               Grobogan  25  0.31125 -0.005868
#> 26  DI Yogyakarta            Gunungkidul  26 -0.07076 -0.005872
#> 27     Jawa Barat              Indramayu  27  0.00804  0.009212
#> 28     Jawa Timur                 Jember  28  0.91922 -0.008250
#> 29    Jawa Tengah                 Jepara  29  0.84859 -0.004963
#> 30     Jawa Timur                Jombang  30  0.49922 -0.008454
#> 31    Jawa Tengah            Karanganyar  31 -0.67046 -0.006941
#> 32     Jawa Barat               Karawang  32 -0.22692  0.011771
#> 33    Jawa Tengah                Kebumen  33  0.32833  0.001165
#> 34     Jawa Timur                 Kediri  34  0.80931 -0.008744
#> 35    Jawa Tengah                 Kendal  35  0.43495 -0.002672
#> 36    Jawa Tengah                 Klaten  36  0.75319 -0.005169
#> 37    DKI Jakarta          Jakarta Barat  37  0.86261  0.011753
#> 38    DKI Jakarta          Jakarta Pusat  38 -0.39493  0.011228
#> 39    DKI Jakarta        Jakarta Selatan  39 -1.22001  0.011119
#> 40    DKI Jakarta          Jakarta Timur  40 -0.19032  0.011492
#> 41    DKI Jakarta          Jakarta Utara  41 -0.41376  0.011448
#> 42     Jawa Barat           Kota Bandung  42  0.88428  0.013372
#> 43     Jawa Barat            Kota Banjar  43 -1.62291  0.003777
#> 44     Jawa Timur              Kota Batu  44 -0.29799 -0.009368
#> 45     Jawa Barat            Kota Bekasi  45  0.47862  0.012047
#> 46     Jawa Timur            Kota Blitar  46 -1.55538 -0.012319
#> 47     Jawa Barat             Kota Bogor  47 -0.07520  0.012049
#> 48         Banten           Kota Cilegon  48 -0.61314  0.010296
#> 49     Jawa Barat            Kota Cimahi  49  0.29941  0.013090
#> 50     Jawa Barat           Kota Cirebon  50 -0.41743  0.006498
#> 51     Jawa Barat             Kota Depok  51  0.02535  0.011659
#> 52     Jawa Timur            Kota Kediri  52 -0.97194 -0.010542
#> 53     Jawa Timur            Kota Madiun  53 -1.28079 -0.008994
#> 54    Jawa Tengah          Kota Magelang  54 -1.60634 -0.007198
#> 55     Jawa Timur            Kota Malang  55  0.35170 -0.007977
#> 56     Jawa Timur         Kota Mojokerto  56 -1.86718 -0.013005
#> 57     Jawa Timur          Kota Pasuruan  57 -0.20937 -0.009737
#> 58    Jawa Tengah        Kota Pekalongan  58 -0.73355 -0.000612
#> 59     Jawa Timur       Kota Probolinggo  59 -0.53714 -0.009802
#> 60    Jawa Tengah          Kota Salatiga  60 -1.09778 -0.006821
#> 61    Jawa Tengah          Kota Semarang  61 -0.42236 -0.004486
#> 62         Banten            Kota Serang  62  0.41396  0.012207
#> 63     Jawa Barat          Kota Sukabumi  63 -0.70396  0.011129
#> 64     Jawa Timur          Kota Surabaya  64 -0.17561 -0.008823
#> 65    Jawa Tengah         Kota Surakarta  65 -0.97069 -0.006925
#> 66         Banten         Kota Tangerang  66  0.40536  0.011655
#> 67         Banten Kota Tangerang Selatan  67 -0.95515  0.011336
#> 68     Jawa Barat       Kota Tasikmalaya  68  0.46733  0.007771
#> 69    Jawa Tengah             Kota Tegal  69 -0.96972  0.003999
#> 70  DI Yogyakarta        Kota Yogyakarta  70 -0.67398 -0.006015
#> 71    Jawa Tengah                  Kudus  71  0.19470 -0.005389
#> 72  DI Yogyakarta            Kulon Progo  72 -0.82383 -0.004696
#> 73     Jawa Barat               Kuningan  73  0.27451  0.006328
#> 74     Jawa Timur               Lamongan  74 -0.17800 -0.008480
#> 75         Banten                  Lebak  75 -0.22161  0.011789
#> 76     Jawa Timur               Lumajang  76  0.21520 -0.008438
#> 77     Jawa Timur                 Madiun  77  0.18357 -0.007930
#> 78    Jawa Tengah               Magelang  78  1.02592 -0.004177
#> 79     Jawa Timur                Magetan  79 -0.04509 -0.007676
#> 80     Jawa Barat             Majalengka  80 -0.40680  0.007882
#> 81     Jawa Timur                 Malang  81  1.20668 -0.008676
#> 82     Jawa Timur              Mojokerto  82 -0.70086 -0.009528
#> 83     Jawa Timur                Nganjuk  83  0.08571 -0.008240
#> 84     Jawa Timur                  Ngawi  84 -0.03795 -0.007123
#> 85     Jawa Timur                Pacitan  85 -0.28264 -0.007908
#> 86     Jawa Timur              Pamekasan  86 -0.41430  0.000705
#> 87         Banten             Pandeglang  87 -0.60675  0.011042
#> 88     Jawa Barat            Pangandaran  88 -1.66738  0.005354
#> 89     Jawa Timur               Pasuruan  89 -0.68818 -0.009381
#> 90    Jawa Tengah                   Pati  90  0.31988 -0.005860
#> 91    Jawa Tengah             Pekalongan  91 -0.78127  0.000718
#> 92    Jawa Tengah               Pemalang  92  0.35073  0.002887
#> 93     Jawa Timur               Ponorogo  93  0.34109 -0.007872
#> 94     Jawa Timur            Probolinggo  94  0.47410 -0.008806
#> 95    Jawa Tengah            Purbalingga  95  0.53490  0.002248
#> 96     Jawa Barat             Purwakarta  96 -0.35043  0.012045
#> 97    Jawa Tengah              Purworejo  97  0.03056 -0.002269
#> 98    Jawa Tengah                Rembang  98 -0.03864 -0.006766
#> 99     Jawa Timur                Sampang  99 -1.02696 -0.000329
#> 100   Jawa Tengah               Semarang 100  0.03919 -0.004753
#> 101        Banten                 Serang 101  0.47487  0.011599
#> 102    Jawa Timur               Sidoarjo 102  0.63767 -0.008770
#> 103    Jawa Timur              Situbondo 103 -0.51520 -0.009091
#> 104 DI Yogyakarta                 Sleman 104  0.23969 -0.005183
#> 105   Jawa Tengah                 Sragen 105 -0.08010 -0.006463
#> 106    Jawa Barat                 Subang 106 -0.55312  0.011306
#> 107    Jawa Barat               Sukabumi 107  1.39501  0.012642
#> 108   Jawa Tengah              Sukoharjo 108  0.22632 -0.006225
#> 109    Jawa Barat               Sumedang 109  0.44168  0.010418
#> 110    Jawa Timur                Sumenep 110 -0.87545  0.000795
#> 111        Banten              Tangerang 111  0.29245  0.011787
#> 112    Jawa Barat            Tasikmalaya 112  1.07078  0.008605
#> 113   Jawa Tengah                  Tegal 113  1.73440  0.004663
#> 114   Jawa Tengah             Temanggung 114  0.53561 -0.003005
#> 115    Jawa Timur             Trenggalek 115 -0.24421 -0.008272
#> 116    Jawa Timur                  Tuban 116  0.09672 -0.007478
#> 117    Jawa Timur            Tulungagung 117 -0.20143 -0.008593
#> 118   Jawa Tengah               Wonogiri 118  0.13474 -0.007048
#> 119   Jawa Tengah               Wonosobo 119  0.34513 -0.001394
view(rand_bym)

Residuals autocorrelation

moran.test(residuals(bym_mod)[[1]], listw = WW1, na.action = na.omit, zero.policy = T)
#> 
#>  Moran I test under randomisation
#> 
#> data:  residuals(bym_mod)[[1]]  
#> weights: WW1    
#> 
#> Moran I statistic standard deviate = 0.6, p-value = 0.3
#> alternative hypothesis: greater
#> sample estimates:
#> Moran I statistic       Expectation          Variance 
#>           0.02819          -0.00847           0.00356

Model Selection

mad <- function(y, yhat){
  return(mean(abs(y-yhat)))
}
mad_glm <- mad(jawa@data$Stunting, glm_mod$summary.fitted.values$mean*jawa@data$E_d)
mad_glmm <- mad(jawa@data$Stunting, glmm_mod$summary.fitted.values$mean*jawa@data$E_d)
mad_icar <- mad(jawa@data$Stunting, icar_mod$summary.fitted.values$mean*jawa@data$E_d)
mad_bym <- mad(jawa@data$Stunting, bym_mod$summary.fitted.values$mean*jawa@data$E_d)
mad_glm
#> [1] 35.7
mad_glmm
#> [1] 3.34
mad_icar
#> [1] 35.1
mad_bym
#> [1] 2.7
Model DIC MAD
GLM 1196.11 35.7369
GLMM 1003.91 3.3447
ICAR 1189.92 35.114
BYM 986.94 2.7039

Diperoleh nilai DIC dan MAD model ICAR lebih kecil daripada model BYM.

mape <- function(y, yhat){
  return(sum(abs(y-yhat)/y))
}
y <- jawa@data$Stunting/jawa@data$E_d
mape_glm <- mape(y, glm_mod$summary.fitted.values$mean)
mape_glmm <- mape(y, glmm_mod$summary.fitted.values$mean)
mape_icar <- mape(y, icar_mod$summary.fitted.values$mean)
mape_bym <- mape(y, bym_mod$summary.fitted.values$mean)
mape_glm
#> [1] 214
mape_glmm
#> [1] 18.3
mape_icar
#> [1] 192
mape_bym
#> [1] 14.7

Relative Risk

jawa@data$RR <- bym_mod$summary.fitted.values$mean
bym_mod$summary.fitted.values
#>                        mean     sd 0.025quant 0.5quant 0.975quant
#> fitted.Predictor.001 0.0638 0.0428     0.0161   0.0530      0.175
#> fitted.Predictor.002 3.7502 0.6819     2.2912   3.7950      5.098
#> fitted.Predictor.003 1.7946 0.3486     1.1119   1.7884      2.536
#> fitted.Predictor.004 0.4388 0.1437     0.2482   0.4120      0.797
#> fitted.Predictor.005 2.2652 0.4340     1.4343   2.2498      3.224
#> fitted.Predictor.006 0.6324 0.1582     0.3828   0.6125      1.004
#> fitted.Predictor.007 2.1613 0.4117     1.3506   2.1554      3.043
#> fitted.Predictor.008 0.5611 0.1405     0.3337   0.5450      0.886
#> fitted.Predictor.009 0.9470 0.2112     0.5891   0.9266      1.432
#> fitted.Predictor.010 0.7820 0.1798     0.4785   0.7645      1.193
#> fitted.Predictor.011 1.0599 0.2291     0.6591   1.0410      1.579
#> fitted.Predictor.012 0.6594 0.1611     0.4001   0.6404      1.035
#> fitted.Predictor.013 5.9045 1.0799     3.4899   6.0608      7.846
#> fitted.Predictor.014 0.4677 0.1301     0.2724   0.4488      0.778
#> fitted.Predictor.015 0.7924 0.1885     0.4898   0.7698      1.236
#> fitted.Predictor.016 0.7844 0.1806     0.4806   0.7665      1.198
#> fitted.Predictor.017 2.2573 0.4316     1.4250   2.2442      3.204
#> fitted.Predictor.018 0.4962 0.1339     0.2919   0.4776      0.814
#> fitted.Predictor.019 1.3235 0.2685     0.8146   1.3133      1.902
#> fitted.Predictor.020 0.9149 0.2063     0.5680   0.8942      1.391
#> fitted.Predictor.021 2.7166 0.5056     1.7006   2.7170      3.791
#> fitted.Predictor.022 0.6016 0.1535     0.3626   0.5815      0.964
#> fitted.Predictor.023 4.7193 0.8624     2.8132   4.8209      6.315
#> fitted.Predictor.024 1.4418 0.2905     0.8968   1.4286      2.077
#> fitted.Predictor.025 1.2258 0.2596     0.7708   1.2043      1.818
#> fitted.Predictor.026 0.9465 0.2156     0.5916   0.9227      1.451
#> fitted.Predictor.027 0.7799 0.1827     0.4797   0.7598      1.204
#> fitted.Predictor.028 2.4345 0.4592     1.5243   2.4302      3.418
#> fitted.Predictor.029 1.3955 0.2812     0.8624   1.3847      2.003
#> fitted.Predictor.030 1.0434 0.2234     0.6449   1.0273      1.542
#> fitted.Predictor.031 0.3624 0.1083     0.2029   0.3458      0.621
#> fitted.Predictor.032 0.5781 0.1480     0.3469   0.5589      0.927
#> fitted.Predictor.033 1.4989 0.3075     0.9488   1.4762      2.199
#> fitted.Predictor.034 1.8638 0.3621     1.1654   1.8534      2.648
#> fitted.Predictor.035 1.2776 0.2667     0.7997   1.2586      1.878
#> fitted.Predictor.036 1.6113 0.3194     1.0048   1.5990      2.307
#> fitted.Predictor.037 1.1033 0.2307     0.6743   1.0920      1.604
#> fitted.Predictor.038 0.3498 0.1028     0.1950   0.3349      0.593
#> fitted.Predictor.039 0.1340 0.0565     0.0582   0.1232      0.273
#> fitted.Predictor.040 0.4311 0.1180     0.2482   0.4154      0.708
#> fitted.Predictor.041 0.3875 0.1109     0.2198   0.3716      0.650
#> fitted.Predictor.042 1.2737 0.2603     0.7829   1.2630      1.836
#> fitted.Predictor.043 0.2363 0.0910     0.1166   0.2189      0.460
#> fitted.Predictor.044 0.3259 0.0967     0.1794   0.3120      0.554
#> fitted.Predictor.045 0.9066 0.1996     0.5564   0.8907      1.354
#> fitted.Predictor.046 0.1264 0.0562     0.0530   0.1152      0.265
#> fitted.Predictor.047 0.4974 0.1298     0.2920   0.4812      0.800
#> fitted.Predictor.048 0.2672 0.0866     0.1409   0.2535      0.475
#> fitted.Predictor.049 0.6014 0.1459     0.3586   0.5864      0.934
#> fitted.Predictor.050 0.5165 0.1386     0.3051   0.4972      0.846
#> fitted.Predictor.051 0.7431 0.1756     0.4552   0.7237      1.150
#> fitted.Predictor.052 0.2254 0.0795     0.1135   0.2118      0.418
#> fitted.Predictor.053 0.1356 0.0572     0.0590   0.1246      0.276
#> fitted.Predictor.054 0.1348 0.0598     0.0568   0.1229      0.283
#> fitted.Predictor.055 0.6853 0.1608     0.4131   0.6700      1.049
#> fitted.Predictor.056 0.0834 0.0440     0.0289   0.0739      0.194
#> fitted.Predictor.057 0.5036 0.1324     0.2966   0.4865      0.814
#> fitted.Predictor.058 0.2909 0.0931     0.1558   0.2760      0.514
#> fitted.Predictor.059 0.3371 0.1012     0.1865   0.3219      0.578
#> fitted.Predictor.060 0.1676 0.0651     0.0783   0.1557      0.326
#> fitted.Predictor.061 0.3135 0.0951     0.1713   0.2994      0.539
#> fitted.Predictor.062 0.3140 0.0932     0.1673   0.3021      0.530
#> fitted.Predictor.063 0.2900 0.0926     0.1555   0.2753      0.512
#> fitted.Predictor.064 0.4110 0.1132     0.2353   0.3960      0.676
#> fitted.Predictor.065 0.2064 0.0750     0.1014   0.1934      0.388
#> fitted.Predictor.066 0.8416 0.1888     0.5152   0.8253      1.267
#> fitted.Predictor.067 0.2210 0.0802     0.1101   0.2069      0.416
#> fitted.Predictor.068 1.1174 0.2370     0.6950   1.1001      1.649
#> fitted.Predictor.069 0.2450 0.0845     0.1258   0.2307      0.449
#> fitted.Predictor.070 0.2878 0.0916     0.1542   0.2734      0.507
#> fitted.Predictor.071 0.7131 0.1680     0.4326   0.6960      1.097
#> fitted.Predictor.072 0.4646 0.1339     0.2698   0.4436      0.788
#> fitted.Predictor.073 0.9564 0.2110     0.5934   0.9375      1.437
#> fitted.Predictor.074 0.6656 0.1638     0.4049   0.6455      1.050
#> fitted.Predictor.075 0.9060 0.2124     0.5663   0.8799      1.410
#> fitted.Predictor.076 0.7646 0.1766     0.4671   0.7473      1.168
#> fitted.Predictor.077 0.8023 0.1841     0.4922   0.7841      1.223
#> fitted.Predictor.078 1.9078 0.3675     1.1812   1.9039      2.685
#> fitted.Predictor.079 0.6025 0.1496     0.3617   0.5849      0.950
#> fitted.Predictor.080 0.6630 0.1684     0.4035   0.6402      1.065
#> fitted.Predictor.081 2.2282 0.4220     1.3691   2.2331      3.100
#> fitted.Predictor.082 0.3451 0.1048     0.1914   0.3288      0.596
#> fitted.Predictor.083 0.7734 0.1800     0.4746   0.7545      1.188
#> fitted.Predictor.084 0.9440 0.2146     0.5895   0.9206      1.445
#> fitted.Predictor.085 0.6353 0.1598     0.3846   0.6148      1.012
#> fitted.Predictor.086 0.5892 0.1529     0.3541   0.5684      0.952
#> fitted.Predictor.087 0.6588 0.1742     0.3991   0.6330      1.081
#> fitted.Predictor.088 0.1725 0.0726     0.0783   0.1582      0.351
#> fitted.Predictor.089 0.3632 0.1088     0.2033   0.3464      0.623
#> fitted.Predictor.090 0.8284 0.1871     0.5075   0.8116      1.252
#> fitted.Predictor.091 0.3873 0.1159     0.2187   0.3691      0.666
#> fitted.Predictor.092 1.4969 0.3067     0.9470   1.4746      2.194
#> fitted.Predictor.093 1.0033 0.2185     0.6224   0.9850      1.498
#> fitted.Predictor.094 2.3412 0.4522     1.4941   2.3186      3.362
#> fitted.Predictor.095 1.7903 0.3546     1.1322   1.7708      2.584
#> fitted.Predictor.096 0.4577 0.1249     0.2663   0.4405      0.753
#> fitted.Predictor.097 0.8135 0.1887     0.5017   0.7932      1.251
#> fitted.Predictor.098 0.9259 0.2110     0.5776   0.9030      1.418
#> fitted.Predictor.099 0.6681 0.1866     0.4051   0.6367      1.132
#> fitted.Predictor.100 0.6695 0.1614     0.4060   0.6515      1.043
#> fitted.Predictor.101 1.8720 0.3738     1.1842   1.8499      2.717
#> fitted.Predictor.102 0.9675 0.2087     0.5919   0.9536      1.429
#> fitted.Predictor.103 0.6136 0.1599     0.3706   0.5911      0.996
#> fitted.Predictor.104 0.7101 0.1663     0.4307   0.6935      1.089
#> fitted.Predictor.105 0.8211 0.1919     0.5083   0.7993      1.270
#> fitted.Predictor.106 0.3575 0.1064     0.1994   0.3415      0.611
#> fitted.Predictor.107 2.9093 0.5370     1.7866   2.9301      3.995
#> fitted.Predictor.108 0.7109 0.1665     0.4316   0.6942      1.091
#> fitted.Predictor.109 1.2507 0.2614     0.7817   1.2321      1.838
#> fitted.Predictor.110 0.6383 0.1748     0.3860   0.6104      1.068
#> fitted.Predictor.111 1.8238 0.3706     1.1610   1.7958      2.679
#> fitted.Predictor.112 2.7569 0.5147     1.7151   2.7607      3.842
#> fitted.Predictor.113 3.3201 0.6112     2.0061   3.3650      4.504
#> fitted.Predictor.114 1.1283 0.2381     0.6997   1.1123      1.658
#> fitted.Predictor.115 0.6147 0.1549     0.3709   0.5950      0.979
#> fitted.Predictor.116 1.1006 0.2410     0.6918   1.0769      1.659
#> fitted.Predictor.117 0.4668 0.1247     0.2723   0.4505      0.759
#> fitted.Predictor.118 0.9485 0.2121     0.5902   0.9277      1.437
#> fitted.Predictor.119 1.7261 0.3477     1.0973   1.7021      2.519
#>                        mode
#> fitted.Predictor.001 0.0369
#> fitted.Predictor.002 3.8879
#> fitted.Predictor.003 1.7923
#> fitted.Predictor.004 0.3783
#> fitted.Predictor.005 2.2476
#> fitted.Predictor.006 0.5853
#> fitted.Predictor.007 2.1638
#> fitted.Predictor.008 0.5214
#> fitted.Predictor.009 0.9019
#> fitted.Predictor.010 0.7414
#> fitted.Predictor.011 1.0193
#> fitted.Predictor.012 0.6145
#> fitted.Predictor.013 6.3341
#> fitted.Predictor.014 0.4218
#> fitted.Predictor.015 0.7411
#> fitted.Predictor.016 0.7429
#> fitted.Predictor.017 2.2446
#> fitted.Predictor.018 0.4510
#> fitted.Predictor.019 1.3061
#> fitted.Predictor.020 0.8689
#> fitted.Predictor.021 2.7402
#> fitted.Predictor.022 0.5538
#> fitted.Predictor.023 5.0068
#> fitted.Predictor.024 1.4189
#> fitted.Predictor.025 1.1813
#> fitted.Predictor.026 0.8942
#> fitted.Predictor.027 0.7337
#> fitted.Predictor.028 2.4442
#> fitted.Predictor.029 1.3777
#> fitted.Predictor.030 1.0090
#> fitted.Predictor.031 0.3209
#> fitted.Predictor.032 0.5320
#> fitted.Predictor.033 1.4556
#> fitted.Predictor.034 1.8526
#> fitted.Predictor.035 1.2398
#> fitted.Predictor.036 1.5925
#> fitted.Predictor.037 1.0808
#> fitted.Predictor.038 0.3117
#> fitted.Predictor.039 0.1058
#> fitted.Predictor.040 0.3916
#> fitted.Predictor.041 0.3474
#> fitted.Predictor.042 1.2545
#> fitted.Predictor.043 0.1942
#> fitted.Predictor.044 0.2900
#> fitted.Predictor.045 0.8710
#> fitted.Predictor.046 0.0977
#> fitted.Predictor.047 0.4572
#> fitted.Predictor.048 0.2317
#> fitted.Predictor.049 0.5646
#> fitted.Predictor.050 0.4700
#> fitted.Predictor.051 0.6980
#> fitted.Predictor.052 0.1903
#> fitted.Predictor.053 0.1071
#> fitted.Predictor.054 0.1044
#> fitted.Predictor.055 0.6487
#> fitted.Predictor.056 0.0589
#> fitted.Predictor.057 0.4615
#> fitted.Predictor.058 0.2529
#> fitted.Predictor.059 0.2985
#> fitted.Predictor.060 0.1367
#> fitted.Predictor.061 0.2771
#> fitted.Predictor.062 0.2823
#> fitted.Predictor.063 0.2524
#> fitted.Predictor.064 0.3729
#> fitted.Predictor.065 0.1726
#> fitted.Predictor.066 0.8043
#> fitted.Predictor.067 0.1850
#> fitted.Predictor.068 1.0812
#> fitted.Predictor.069 0.2083
#> fitted.Predictor.070 0.2507
#> fitted.Predictor.071 0.6727
#> fitted.Predictor.072 0.4146
#> fitted.Predictor.073 0.9147
#> fitted.Predictor.074 0.6183
#> fitted.Predictor.075 0.8488
#> fitted.Predictor.076 0.7242
#> fitted.Predictor.077 0.7605
#> fitted.Predictor.078 1.9122
#> fitted.Predictor.079 0.5601
#> fitted.Predictor.080 0.6103
#> fitted.Predictor.081 2.2566
#> fitted.Predictor.082 0.3043
#> fitted.Predictor.083 0.7297
#> fitted.Predictor.084 0.8927
#> fitted.Predictor.085 0.5871
#> fitted.Predictor.086 0.5400
#> fitted.Predictor.087 0.6005
#> fitted.Predictor.088 0.1370
#> fitted.Predictor.089 0.3214
#> fitted.Predictor.090 0.7898
#> fitted.Predictor.091 0.3427
#> fitted.Predictor.092 1.4546
#> fitted.Predictor.093 0.9636
#> fitted.Predictor.094 2.3090
#> fitted.Predictor.095 1.7572
#> fitted.Predictor.096 0.4152
#> fitted.Predictor.097 0.7673
#> fitted.Predictor.098 0.8752
#> fitted.Predictor.099 0.5991
#> fitted.Predictor.100 0.6267
#> fitted.Predictor.101 1.8354
#> fitted.Predictor.102 0.9369
#> fitted.Predictor.103 0.5612
#> fitted.Predictor.104 0.6709
#> fitted.Predictor.105 0.7718
#> fitted.Predictor.106 0.3172
#> fitted.Predictor.107 2.9830
#> fitted.Predictor.108 0.6714
#> fitted.Predictor.109 1.2128
#> fitted.Predictor.110 0.5756
#> fitted.Predictor.111 1.7742
#> fitted.Predictor.112 2.7891
#> fitted.Predictor.113 3.4567
#> fitted.Predictor.114 1.0950
#> fitted.Predictor.115 0.5680
#> fitted.Predictor.116 1.0501
#> fitted.Predictor.117 0.4263
#> fitted.Predictor.118 0.9027
#> fitted.Predictor.119 1.6831
summary(jawa@data$RR)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>    0.06    0.43    0.71    1.00    1.18    5.90
view(jawa@data$RR)
my.palette.1<-brewer.pal(n=2,name="OrRd")
#> Warning in brewer.pal(n = 2, name = "OrRd"): minimal value for n is 3, returning requested palette with 3 different levels
spplot(jawa,'RR', cuts=1, col.regions=my.palette.1, cex=c(0.3,1,0.3), main="Peta risiko relatif kasus stunting di Pulau Jawa",at = c(min(jawa$RR) - 1 ,1.0 , max(jawa$RR) + 1))

Dari grafik tersebut juga dapat dilihat bahwa risiko terjadinya stunting yang tinggi berada di Jawa Barat, dengan risiko paling tinggi di Kabupaten Bogor.

Relative Risk yang hanya menggunakan komponen acak adalah sebagai berikut.

jawa@data$RR2 <- exp(icar_mod$summary.random$ID$mean)
my.palette.1<-brewer.pal(n=3,name="OrRd")
spplot(jawa,'RR2', cuts=2, col.regions=my.palette.1, cex=c(0.3,1,0.3), main="Peta risiko relatif kasus stunting di Pulau Jawa",at = c(min(jawa$RR2) - 1, 0.7 ,1 , max(jawa$RR2) + 1))

Prediction

yhat_icar <- icar_mod$summary.fitted.values$mean*jawa@data$E_d
yhat_bym <- bym_mod$summary.fitted.values$mean*jawa@data$E_d
yhat_glmm <- glmm_mod$summary.fitted.values$mean*jawa@data$E_d
pred <- data.frame(jawa@data$Provinsi,jawa@data$KabKota, jawa@data$Stunting, yhat_icar, yhat_bym, yhat_glmm)
names(pred) <- c("Provinsi","KabKota", "Stunting", "yhat ICAR", "yhat BYM", "yhat GLMM")
pred
#>          Provinsi                KabKota Stunting yhat ICAR
#> 1     DKI Jakarta       Kepulauan Seribu        3      4.89
#> 2      Jawa Barat                Bandung      227     68.76
#> 3      Jawa Barat          Bandung Barat      106     52.53
#> 4      Jawa Timur              Bangkalan       20    109.84
#> 5     Jawa Tengah           Banjarnegara      131     83.10
#> 6   DI Yogyakarta                 Bantul       34     55.66
#> 7     Jawa Tengah               Banyumas      127     63.07
#> 8      Jawa Timur             Banyuwangi       31     41.75
#> 9     Jawa Tengah                 Batang       53     64.11
#> 10     Jawa Barat                 Bekasi       44     50.13
#> 11     Jawa Timur                 Blitar       60     59.05
#> 12    Jawa Tengah                  Blora       36     52.30
#> 13     Jawa Barat                  Bogor      368     52.02
#> 14     Jawa Timur             Bojonegoro       24     55.86
#> 15     Jawa Timur              Bondowoso       43     66.45
#> 16    Jawa Tengah               Boyolali       44     48.84
#> 17    Jawa Tengah                 Brebes      131     75.76
#> 18     Jawa Barat                 Ciamis       26     57.44
#> 19     Jawa Barat                Cianjur       78     47.35
#> 20    Jawa Tengah                Cilacap       51     60.41
#> 21     Jawa Barat                Cirebon      160     76.96
#> 22    Jawa Tengah                  Demak       32     59.54
#> 23     Jawa Barat                  Garut      292     50.64
#> 24     Jawa Timur                 Gresik       84     50.94
#> 25    Jawa Tengah               Grobogan       69     66.55
#> 26  DI Yogyakarta            Gunungkidul       52     66.68
#> 27     Jawa Barat              Indramayu       43     58.48
#> 28     Jawa Timur                 Jember      143     75.02
#> 29    Jawa Tengah                 Jepara       82     47.90
#> 30     Jawa Timur                Jombang       60     47.81
#> 31    Jawa Tengah            Karanganyar       18     52.03
#> 32     Jawa Barat               Karawang       31     58.13
#> 33    Jawa Tengah                Kebumen       85     72.31
#> 34     Jawa Timur                 Kediri      109     62.66
#> 35    Jawa Tengah                 Kendal       73     63.87
#> 36    Jawa Tengah                 Klaten       94     53.67
#> 37    DKI Jakarta          Jakarta Barat       65     41.77
#> 38    DKI Jakarta          Jakarta Pusat       18     45.03
#> 39    DKI Jakarta        Jakarta Selatan        5     38.75
#> 40    DKI Jakarta          Jakarta Timur       23     47.51
#> 41    DKI Jakarta          Jakarta Utara       20     48.20
#> 42     Jawa Barat           Kota Bandung       75     48.15
#> 43     Jawa Barat            Kota Banjar        9     87.18
#> 44     Jawa Timur              Kota Batu       17     36.96
#> 45     Jawa Barat            Kota Bekasi       52     49.31
#> 46     Jawa Timur            Kota Blitar        4     44.46
#> 47     Jawa Barat             Kota Bogor       27     48.41
#> 48         Banten           Kota Cilegon       13     43.44
#> 49     Jawa Barat            Kota Cimahi       34     41.62
#> 50     Jawa Barat           Kota Cirebon       27     67.97
#> 51     Jawa Barat             Kota Depok       41     56.40
#> 52     Jawa Timur            Kota Kediri       10     46.10
#> 53     Jawa Timur            Kota Madiun        5     38.81
#> 54    Jawa Tengah          Kota Magelang        4     50.94
#> 55     Jawa Timur            Kota Malang       39     40.72
#> 56     Jawa Timur         Kota Mojokerto        1     39.84
#> 57     Jawa Timur          Kota Pasuruan       27     49.79
#> 58    Jawa Tengah        Kota Pekalongan       14     49.23
#> 59     Jawa Timur       Kota Probolinggo       17     45.31
#> 60    Jawa Tengah          Kota Salatiga        7     40.57
#> 61    Jawa Tengah          Kota Semarang       16     40.22
#> 62         Banten            Kota Serang       18     18.99
#> 63     Jawa Barat          Kota Sukabumi       14     47.67
#> 64     Jawa Timur          Kota Surabaya       22     40.86
#> 65    Jawa Tengah         Kota Surakarta        9     41.67
#> 66         Banten         Kota Tangerang       48     48.76
#> 67         Banten Kota Tangerang Selatan       10     52.28
#> 68     Jawa Barat       Kota Tasikmalaya       64     57.72
#> 69    Jawa Tengah             Kota Tegal       11     50.75
#> 70  DI Yogyakarta        Kota Yogyakarta       14     44.23
#> 71    Jawa Tengah                  Kudus       40     49.47
#> 72  DI Yogyakarta            Kulon Progo       23     67.85
#> 73     Jawa Barat               Kuningan       54     55.69
#> 74     Jawa Timur               Lamongan       36     55.54
#> 75         Banten                  Lebak       49     91.56
#> 76     Jawa Timur               Lumajang       43     46.50
#> 77     Jawa Timur                 Madiun       45     48.53
#> 78    Jawa Tengah               Magelang      113     50.44
#> 79     Jawa Timur                Magetan       33     46.34
#> 80     Jawa Barat             Majalengka       35     84.04
#> 81     Jawa Timur                 Malang      132     50.41
#> 82     Jawa Timur              Mojokerto       17     51.52
#> 83     Jawa Timur                Nganjuk       43     51.54
#> 84     Jawa Timur                  Ngawi       52     68.63
#> 85     Jawa Timur                Pacitan       34     56.64
#> 86     Jawa Timur              Pamekasan       31     60.70
#> 87         Banten             Pandeglang       34     97.11
#> 88     Jawa Barat            Pangandaran        6     70.00
#> 89     Jawa Timur               Pasuruan       18     54.72
#> 90    Jawa Tengah                   Pati       47     45.83
#> 91    Jawa Tengah             Pekalongan       19     63.36
#> 92    Jawa Tengah               Pemalang       85     73.86
#> 93     Jawa Timur               Ponorogo       57     55.23
#> 94     Jawa Timur            Probolinggo      134     97.22
#> 95    Jawa Tengah            Purbalingga      102     72.93
#> 96     Jawa Barat             Purwakarta       24     53.08
#> 97    Jawa Tengah              Purworejo       45     56.72
#> 98    Jawa Tengah                Rembang       51     65.25
#> 99     Jawa Timur                Sampang       33    113.79
#> 100   Jawa Tengah               Semarang       37     51.59
#> 101        Banten                 Serang      107    114.49
#> 102    Jawa Timur               Sidoarjo       56     42.66
#> 103    Jawa Timur              Situbondo       32     73.83
#> 104 DI Yogyakarta                 Sleman       40     43.34
#> 105   Jawa Tengah                 Sragen       45     62.70
#> 106    Jawa Barat                 Subang       18     48.76
#> 107    Jawa Barat               Sukabumi      175     55.55
#> 108   Jawa Tengah              Sukoharjo       40     44.38
#> 109    Jawa Barat               Sumedang       71     60.82
#> 110    Jawa Timur                Sumenep       32    101.37
#> 111        Banten              Tangerang      103    131.01
#> 112    Jawa Barat            Tasikmalaya      163     74.08
#> 113   Jawa Tengah                  Tegal      203     47.14
#> 114   Jawa Tengah             Temanggung       65     49.74
#> 115    Jawa Timur             Trenggalek       33     58.06
#> 116    Jawa Timur                  Tuban       61     67.14
#> 117    Jawa Timur            Tulungagung       25     45.12
#> 118   Jawa Tengah               Wonogiri       53     62.51
#> 119   Jawa Tengah               Wonosobo       98     82.69
#>     yhat BYM yhat GLMM
#> 1       3.61      7.95
#> 2     212.28    209.38
#> 3     101.58    100.10
#> 4      24.84     26.32
#> 5     128.22    127.52
#> 6      35.80     35.98
#> 7     122.34    120.77
#> 8      31.76     31.79
#> 9      53.61     53.54
#> 10     44.27     44.42
#> 11     60.00     59.61
#> 12     37.33     37.36
#> 13    334.23    326.08
#> 14     26.47     27.06
#> 15     44.85     45.00
#> 16     44.40     44.28
#> 17    127.77    127.35
#> 18     28.09     28.24
#> 19     74.92     74.23
#> 20     51.79     52.25
#> 21    153.77    151.56
#> 22     34.05     34.40
#> 23    267.13    262.30
#> 24     81.61     80.71
#> 25     69.39     68.70
#> 26     53.58     53.71
#> 27     44.15     44.05
#> 28    137.81    137.00
#> 29     78.99     78.90
#> 30     59.06     58.72
#> 31     20.51     20.97
#> 32     32.72     32.95
#> 33     84.84     84.18
#> 34    105.50    104.38
#> 35     72.32     73.08
#> 36     91.21     90.20
#> 37     62.45     61.79
#> 38     19.80     19.85
#> 39      7.59      8.14
#> 40     24.40     24.58
#> 41     21.93     22.03
#> 42     72.10     71.37
#> 43     13.37     14.18
#> 44     18.45     18.52
#> 45     51.32     51.06
#> 46      7.15      7.83
#> 47     28.15     28.11
#> 48     15.13     15.42
#> 49     34.04     34.05
#> 50     29.24     29.59
#> 51     42.06     42.34
#> 52     12.76     13.18
#> 53      7.68      8.02
#> 54      7.63      8.15
#> 55     38.79     38.93
#> 56      4.72      4.82
#> 57     28.51     28.99
#> 58     16.47     16.79
#> 59     19.08     19.27
#> 60      9.49     10.13
#> 61     17.75     18.07
#> 62     17.78     17.70
#> 63     16.42     16.86
#> 64     23.27     23.49
#> 65     11.69     11.56
#> 66     47.64     47.52
#> 67     12.51     13.59
#> 68     63.25     63.18
#> 69     13.87     14.40
#> 70     16.29     16.64
#> 71     40.36     40.14
#> 72     26.30     26.79
#> 73     54.14     54.11
#> 74     37.67     37.77
#> 75     51.28     51.93
#> 76     43.28     43.22
#> 77     45.41     45.28
#> 78    107.99    106.37
#> 79     34.11     34.27
#> 80     37.53     37.91
#> 81    126.13    123.09
#> 82     19.53     19.89
#> 83     43.78     43.83
#> 84     53.43     53.40
#> 85     35.96     36.28
#> 86     33.35     33.77
#> 87     37.29     38.85
#> 88      9.76     10.50
#> 89     20.56     20.82
#> 90     46.89     46.59
#> 91     21.92     22.62
#> 92     84.73     84.11
#> 93     56.79     56.55
#> 94    132.52    131.26
#> 95    101.34     99.58
#> 96     25.91     26.10
#> 97     46.05     46.30
#> 98     52.41     52.42
#> 99     37.82     39.14
#> 100    37.90     38.17
#> 101   105.97    105.30
#> 102    54.77     54.17
#> 103    34.73     35.48
#> 104    40.19     40.14
#> 105    46.48     46.71
#> 106    20.23     20.51
#> 107   164.68    161.84
#> 108    40.24     40.22
#> 109    70.79     69.64
#> 110    36.13     36.92
#> 111   103.23    102.89
#> 112   156.05    155.32
#> 113   187.94    184.20
#> 114    63.87     63.64
#> 115    34.80     34.98
#> 116    62.30     61.81
#> 117    26.42     26.69
#> 118    53.69     53.77
#> 119    97.71     96.88

Conclusion

Model yand dipilih adalah ICAR yang memiliki nilai DIC dan MAD lebih rendah daripada BYM.

yhat_bym <- bym_mod$summary.fitted.values$mean*jawa@data$E_d
jawa@data$yhat_bym <- bym_mod$summary.fitted.values$mean*jawa@data$E_d
my.palette.1<-brewer.pal(n=4,name="OrRd")
spplot(jawa,'yhat_bym', cuts=3, col.regions=my.palette.1, cex=c(0.3,1,0.3), main="Hasil dugaan menggunakan CAR BYM",at = c(min(jawa$yhat_bym) - 1, 50, 100, 150 , max(jawa$yhat_bym) + 1))