Dataset: Data bencana banjir di seluruh Indonesia periode Oktober-Desember 2025

Link Akses Dataset : https://dibi.bnpb.go.id/superset/dashboard/2/

SEM-PLS

1. Filter Data & Seleksi Variabel

rm(list = ls(all = TRUE))
graphics.off()
shell("cls")

# Membaca dataset bencana BNPB
data_mentah <- read.csv("D:/Data Science/Semester 4/Multivariate Analysis/5 - Structural Equation Modeling/Reference & Dataset/Data Banjir Okt-Des 2025.csv", 
                        header = TRUE, check.names = TRUE)
head(data_mentah)
##                                     id Tanggal...Waktu.Kejadian Minggu Bulan
## 1 13f98296-861f-42a4-b813-868239122ace  2025-12-30 19:50:00.396      1    12
## 2 c73d8698-54ee-45b2-9dc7-b81c4bc2847b  2025-12-30 17:30:00.126      1    12
## 3 41563ee5-432c-4cf5-8f33-f9f32ca0efa2  2025-12-30 17:00:00.956      1    12
## 4 354bfcda-30c6-4b09-babe-78ad9547e2ed  2025-12-30 17:00:00.947      1    12
## 5 046dd912-31b0-484b-a35e-1e8fc82876a4  2025-12-30 17:00:00.499      1    12
## 6 c12a02e5-406a-4657-8fee-ae28d28a536c  2025-12-30 17:00:00.257      1    12
##   Tahun Kode.Provinsi    Provinsi Kode.Kabupaten     Kabupaten
## 1  2025            36      Banten          36.72  Kota Cilegon
## 2  2025            32  Jawa Barat          32.08      Kuningan
## 3  2025            17    Bengkulu          17.02 Rejang Lebong
## 4  2025            32  Jawa Barat          32.74  Kota Cirebon
## 5  2025            33 Jawa Tengah          33.76    Kota Tegal
## 6  2025            18     Lampung          18.09     Pesawaran
##   Kode.Jenis.Kejadian Nama.Kejadian Jenis.Bencana is_bencana Jumlah.Kejadian
## 1                1010        Banjir        Banjir       True               1
## 2                1010        Banjir        Banjir       True               1
## 3                1010        Banjir        Banjir       True               1
## 4                1010        Banjir        Banjir       True               1
## 5                1010        Banjir        Banjir       True               1
## 6                1010        Banjir        Banjir       True               1
##   Meninggal Hilang Luka...Sakit menderita_mengungsi Rumah.Rusak.Berat
## 1         0      0            0                 370                 0
## 2         0      0            0                  60                 0
## 3         0      0            0                 401                 0
## 4         0      0            0                2180                 0
## 5         0      0            0                1491                 0
## 6         0      0            0                 250                 0
##   Rumah.Rusak.Sedang Rumah.Rusak.Ringan Rumah.Terendam Satuan.Pendidikan.Rusak
## 1                  0                  0             74                       0
## 2                  0                  0             11                       0
## 3                  0                  0             81                       0
## 4                  0                  0            701                       0
## 5                  0                  0            386                       0
## 6                  0                  0             50                       0
##   Rumah.Ibadat.Rusak Fasilitas.Pelayanan.Kesehatan.Rusak Kantor.Rusak
## 1                  0                                   0            0
## 2                  0                                   0            0
## 3                  0                                   0            0
## 4                  0                                   0            0
## 5                  0                                   0            0
## 6                  0                                   0            0
##   Jembatan.Rusak
## 1              0
## 2              0
## 3              0
## 4              0
## 5              0
## 6              0
# Mengambil hanya kolom-kolom yang menjadi indikator sesuai kerangka SEM
fitur_sem <- c(
  # X1 (Formatif)
  "Jumlah.Kejadian", "Rumah.Terendam",
  # Y1 (Formatif)
  "Meninggal", "Hilang", "Luka...Sakit", "menderita_mengungsi",
  # Y2 (Reflektif)
  "Rumah.Rusak.Berat", "Rumah.Rusak.Sedang", "Rumah.Rusak.Ringan",
  # Y3 (Formatif)
  "Satuan.Pendidikan.Rusak", "Rumah.Ibadat.Rusak", "Fasilitas.Pelayanan.Kesehatan.Rusak", "Kantor.Rusak", "Jembatan.Rusak"
)

data <- data_mentah[, fitur_sem]
head(data)
##   Jumlah.Kejadian Rumah.Terendam Meninggal Hilang Luka...Sakit
## 1               1             74         0      0            0
## 2               1             11         0      0            0
## 3               1             81         0      0            0
## 4               1            701         0      0            0
## 5               1            386         0      0            0
## 6               1             50         0      0            0
##   menderita_mengungsi Rumah.Rusak.Berat Rumah.Rusak.Sedang Rumah.Rusak.Ringan
## 1                 370                 0                  0                  0
## 2                  60                 0                  0                  0
## 3                 401                 0                  0                  0
## 4                2180                 0                  0                  0
## 5                1491                 0                  0                  0
## 6                 250                 0                  0                  0
##   Satuan.Pendidikan.Rusak Rumah.Ibadat.Rusak
## 1                       0                  0
## 2                       0                  0
## 3                       0                  0
## 4                       0                  0
## 5                       0                  0
## 6                       0                  0
##   Fasilitas.Pelayanan.Kesehatan.Rusak Kantor.Rusak Jembatan.Rusak
## 1                                   0            0              0
## 2                                   0            0              0
## 3                                   0            0              0
## 4                                   0            0              0
## 5                                   0            0              0
## 6                                   0            0              0
# Cek jumlah baris dan kolom
cat("Jumlah baris:", nrow(data), "\nJumlah kolom:", ncol(data))
## Jumlah baris: 393 
## Jumlah kolom: 14

2. Pra-Pemrosesan Data

# Statistik Deskriptif
summary(data)
##  Jumlah.Kejadian  Rumah.Terendam    Meninggal          Hilang       
##  Min.   :0.5000   Min.   :    0   Min.   :  0.00   Min.   : 0.0000  
##  1st Qu.:1.0000   1st Qu.:   12   1st Qu.:  0.00   1st Qu.: 0.0000  
##  Median :1.0000   Median :   80   Median :  0.00   Median : 0.0000  
##  Mean   :0.9885   Mean   : 1072   Mean   :  3.14   Mean   : 0.3995  
##  3rd Qu.:1.0000   3rd Qu.:  457   3rd Qu.:  0.00   3rd Qu.: 0.0000  
##  Max.   :1.0000   Max.   :65094   Max.   :247.00   Max.   :36.0000  
##   Luka...Sakit     menderita_mengungsi Rumah.Rusak.Berat Rumah.Rusak.Sedang
##  Min.   :   0.00   Min.   :     0      Min.   :    0.0   Min.   :    0.0   
##  1st Qu.:   0.00   1st Qu.:   131      1st Qu.:    0.0   1st Qu.:    0.0   
##  Median :   0.00   Median :   580      Median :    0.0   Median :    0.0   
##  Mean   :  12.58   Mean   : 12269      Mean   :  149.2   Mean   :  170.5   
##  3rd Qu.:   0.00   3rd Qu.:  3204      3rd Qu.:    0.0   3rd Qu.:    0.0   
##  Max.   :1823.00   Max.   :455892      Max.   :18267.0   Max.   :26390.0   
##  Rumah.Rusak.Ringan Satuan.Pendidikan.Rusak Rumah.Ibadat.Rusak
##  Min.   :    0      Min.   :  0.000         Min.   :  0.000   
##  1st Qu.:    0      1st Qu.:  0.000         1st Qu.:  0.000   
##  Median :    0      Median :  0.000         Median :  0.000   
##  Mean   :  449      Mean   :  8.204         Mean   :  2.074   
##  3rd Qu.:    0      3rd Qu.:  0.000         3rd Qu.:  0.000   
##  Max.   :62888      Max.   :728.000         Max.   :285.000   
##  Fasilitas.Pelayanan.Kesehatan.Rusak  Kantor.Rusak      Jembatan.Rusak   
##  Min.   : 0.0000                     Min.   :  0.0000   Min.   :  0.000  
##  1st Qu.: 0.0000                     1st Qu.:  0.0000   1st Qu.:  0.000  
##  Median : 0.0000                     Median :  0.0000   Median :  0.000  
##  Mean   : 0.5089                     Mean   :  0.7379   Mean   :  1.959  
##  3rd Qu.: 0.0000                     3rd Qu.:  0.0000   3rd Qu.:  0.000  
##  Max.   :29.0000                     Max.   :102.0000   Max.   :144.000

Hasil statistik deskriptif pada 14 indikator banjir menunjukkan bahwa variabilitas data sangat tinggi dengan tingkat kecondongan (skewness) yang kuat ke arah kanan. Sebagai contoh, pada indikator dampak pemukiman, variabel Rumah Terendam memiliki nilai median sebesar 80 unit, namun nilai rata-ratanya melonjak hingga 1072 unit dengan nilai maksimum mencapai 65.094 unit. Fenomena serupa terjadi pada sektor korban manusia, di mana indikator ‘menderita_mengungsi’ memiliki nilai maksimum ekstrem sebesar 455.892 jiwa, jauh melampaui nilai kuartil ketiganya (Q3 = 3.204 jiwa). Hal ini mengindikasikan adanya beberapa kejadian banjir dengan skala kerusakan besar di antara mayoritas kejadian banjir skala kecil hingga menengah. Maka dari itu, kami menggunakan metode melakukan Transformasi Logaritma Natural untuk menangani skew data, yang dirumuskan sebagai log(x + 1) dengan +1 digunakan untuk menghindari error jika ada data bernilai 0. Kemudian setelah itu baru dilakukan normalisasi Z-Score dari data hasil log sebelumnya agar skala data seragam.

# Cek tipe data
str(data)
## 'data.frame':    393 obs. of  14 variables:
##  $ Jumlah.Kejadian                    : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ Rumah.Terendam                     : int  74 11 81 701 386 50 38 1351 77 210 ...
##  $ Meninggal                          : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Hilang                             : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Luka...Sakit                       : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ menderita_mengungsi                : int  370 60 401 2180 1491 250 144 5277 244 1059 ...
##  $ Rumah.Rusak.Berat                  : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Rumah.Rusak.Sedang                 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Rumah.Rusak.Ringan                 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Satuan.Pendidikan.Rusak            : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Rumah.Ibadat.Rusak                 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Fasilitas.Pelayanan.Kesehatan.Rusak: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Kantor.Rusak                       : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Jembatan.Rusak                     : int  0 0 0 0 0 0 0 0 0 0 ...
# Konversi Seluruh Indikator ke Numerik
for (col in colnames(data)) {
  data[[col]] <- as.numeric(as.character(data[[col]]))
}

# Cek Missing Value
print(paste("Total Missing Value:", sum(is.na(data))))
## [1] "Total Missing Value: 0"
data[is.na(data)] <- 0

# Cek Data Duplikat
duplikat <- data[duplicated(data), ]
print(paste("Jumlah data duplikat:", nrow(duplikat)))
## [1] "Jumlah data duplikat: 46"
# Hapus data duplikat 
data_bersih <- data[!duplicated(data), ]

cat("Baris sebelum:", nrow(data), "\n")
## Baris sebelum: 393
cat("Baris sesudah:", nrow(data_bersih), "\n")
## Baris sesudah: 347
# Penanganan Data Skew: Log Transform & Z-Score
data_z <- as.data.frame(lapply(data, function(x) {
  if (is.numeric(x)) {
    x_log <- log(x + 1)
    if (sd(x_log) == 0) return(x_log)       
    (x_log - mean(x_log)) / sd(x_log)
  } else {
    x
  }
}))
head(data_z)
##   Jumlah.Kejadian Rumah.Terendam  Meninggal     Hilang Luka...Sakit
## 1       0.1528982     0.05558120 -0.2959682 -0.1884124   -0.1936168
## 2       0.1528982    -0.63985219 -0.2959682 -0.1884124   -0.1936168
## 3       0.1528982     0.08944289 -0.2959682 -0.1884124   -0.1936168
## 4       0.1528982     0.90427402 -0.2959682 -0.1884124   -0.1936168
## 5       0.1528982     0.67828862 -0.2959682 -0.1884124   -0.1936168
## 6       0.1528982    -0.09077113 -0.2959682 -0.1884124   -0.1936168
##   menderita_mengungsi Rumah.Rusak.Berat Rumah.Rusak.Sedang Rumah.Rusak.Ringan
## 1          -0.1701525        -0.3614964         -0.3546078         -0.3880973
## 2          -0.8409327        -0.3614964         -0.3546078         -0.3880973
## 3          -0.1403351        -0.3614964         -0.3546078         -0.3880973
## 4           0.4879981        -0.3614964         -0.3546078         -0.3880973
## 5           0.3469309        -0.3614964         -0.3546078         -0.3880973
## 6          -0.3153376        -0.3614964         -0.3546078         -0.3880973
##   Satuan.Pendidikan.Rusak Rumah.Ibadat.Rusak
## 1              -0.2934103         -0.2831517
## 2              -0.2934103         -0.2831517
## 3              -0.2934103         -0.2831517
## 4              -0.2934103         -0.2831517
## 5              -0.2934103         -0.2831517
## 6              -0.2934103         -0.2831517
##   Fasilitas.Pelayanan.Kesehatan.Rusak Kantor.Rusak Jembatan.Rusak
## 1                           -0.231054   -0.1845486     -0.3349156
## 2                           -0.231054   -0.1845486     -0.3349156
## 3                           -0.231054   -0.1845486     -0.3349156
## 4                           -0.231054   -0.1845486     -0.3349156
## 5                           -0.231054   -0.1845486     -0.3349156
## 6                           -0.231054   -0.1845486     -0.3349156

3. Uji Asumsi

# 1. Uji Normalitas Multivariat
library(psych)
## Warning: package 'psych' was built under R version 4.5.3
mardia(x= data_z)

## Call: mardia(x = data_z)
## 
## Mardia tests of multivariate skew and kurtosis
## Use describe(x) the to get univariate tests
## n.obs = 393   num.vars =  14 
## b1p =  449.66   skew =  29452.43  with probability  <=  0
##  small sample skew =  29707.42  with probability <=  0
## b2p =  1081.82   kurtosis =  401.72  with probability <=  0
# 2. Uji Kecukupan Sampel(KMO)
library(psych)
r <- cor(data_z)
KMO(r)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = r)
## Overall MSA =  0.9
## MSA for each item = 
##                     Jumlah.Kejadian                      Rumah.Terendam 
##                                0.76                                0.58 
##                           Meninggal                              Hilang 
##                                0.93                                0.81 
##                        Luka...Sakit                 menderita_mengungsi 
##                                0.93                                0.77 
##                   Rumah.Rusak.Berat                  Rumah.Rusak.Sedang 
##                                0.95                                0.90 
##                  Rumah.Rusak.Ringan             Satuan.Pendidikan.Rusak 
##                                0.94                                0.90 
##                  Rumah.Ibadat.Rusak Fasilitas.Pelayanan.Kesehatan.Rusak 
##                                0.86                                0.98 
##                        Kantor.Rusak                      Jembatan.Rusak 
##                                0.88                                0.98
#3. Uji Multikolinearitas
# Indikator
idk <- c("Jumlah.Kejadian", "Rumah.Terendam", 
        "Meninggal", "Hilang", "Luka...Sakit", "menderita_mengungsi",
        "Rumah.Rusak.Berat", "Rumah.Rusak.Sedang", "Rumah.Rusak.Ringan",
        "Satuan.Pendidikan.Rusak", "Rumah.Ibadat.Rusak", "Fasilitas.Pelayanan.Kesehatan.Rusak", 
        "Kantor.Rusak", "Jembatan.Rusak")
# Determinan Matriks Kovarians
data_manifest <- data_z[, idk]

# Perhitungan Matriks Kovarians dan Determinannya
cov_matrix <- cov(data_manifest, use = "complete.obs")
det_cov <- det(cov_matrix)

#Pakai VIF (Variance Inflation Factor)
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
data_manifest_clean <- na.omit(data_manifest)
# Indikator 'Satuan.Pendidikan.Rusak' sebagai sampel variabel dependen
model_vif <- lm(Satuan.Pendidikan.Rusak ~ Jumlah.Kejadian + Rumah.Terendam + 
                  Meninggal + Hilang + Luka...Sakit + menderita_mengungsi + 
                  Rumah.Rusak.Berat + Rumah.Rusak.Sedang + Rumah.Rusak.Ringan +
                  Rumah.Ibadat.Rusak + Fasilitas.Pelayanan.Kesehatan.Rusak + Kantor.Rusak + Jembatan.Rusak, 
                data = data_manifest_clean)

vif_values <- vif(model_vif)
vif_values
##                     Jumlah.Kejadian                      Rumah.Terendam 
##                            1.008527                            2.478746 
##                           Meninggal                              Hilang 
##                            4.575426                            2.191727 
##                        Luka...Sakit                 menderita_mengungsi 
##                            2.450240                            3.044749 
##                   Rumah.Rusak.Berat                  Rumah.Rusak.Sedang 
##                            8.306866                            9.769647 
##                  Rumah.Rusak.Ringan                  Rumah.Ibadat.Rusak 
##                            8.076259                            5.609131 
## Fasilitas.Pelayanan.Kesehatan.Rusak                        Kantor.Rusak 
##                            3.023455                            2.783262 
##                      Jembatan.Rusak 
##                            2.987172

Hasil Uji Asumsi Multivariat

Pertama, berdasarkan Uji Normalitas Multivariat Mardia, diperoleh nilai multivariate skewness sebesar 29452.43 (\(p \le 0\)) dan multivariate kurtosis sebesar 401.72 (\(p \le 0\)). Hasil ini secara signifikan menolak hipotesis nol, yang berarti data tidak berdistribusi normal multivariat. Nilai ini diperkuat oleh visual Normal Q-Q Plot yang menunjukkan kelengkungan tajam ke atas pada kuantil atas yang menandakan sebaran heavy-tailed yang pada dasarnya normal pada data bencana.

Kedua, pada Uji Kecukupan Sampel, seluruh nilai Kaiser-Meyer-Olkin (KMO) indikator berada di atas ambang batas 0.5. Hal ini menunjukkan bahwa matriks korelasi antar-indikator memiliki kecukupan informasi yang sangat baik untuk diolah ke dalam Confirmatory Factor Analysis (CFA).

Ketiga, hasil Uji Multikolinearitas (VIF) dengan menggunakan batasan ketat untuk PLS-SEM (VIF < 3.3) pada beberapa variabel menunjukkan adanya gejala kolinearitas tinggi khususnya pada kluster kerusakan pemukiman. Indikator Rumah.Rusak.Sedang mencatat nilai VIF tertinggi (9.769647), disusul oleh Rumah.Rusak.Berat (8.306866) dan Rumah.Rusak.Ringan(8.076259).

Dari hasil ini, data cocok untuk dilakukan PLS-SEM yang memang dirancang untuk bekerja tanpa asumsi distribusi normal. Adapun dalam konteks PLS-SEM reflektif, multikolinearitas antarindikator sebenarnya masih dapat ditoleransi karena indikator diperlakukan sebagai cerminan dari konstruk yang sama dalam artian korelasi tinggi antar-indikator justru sejalan dengan asumsi reflektif.

library(seminr)

set.seed(123)
data_z_fix <- data_z

cols_ties <- c("Meninggal", "Hilang", "Luka...Sakit", "menderita_mengungsi",
               "Satuan.Pendidikan.Rusak", "Rumah.Ibadat.Rusak",
               "Fasilitas.Pelayanan.Kesehatan.Rusak", "Kantor.Rusak", "Jembatan.Rusak")

for(col in cols_ties) {
  data_z_fix[[col]] <- data_z_fix[[col]] + rnorm(nrow(data_z_fix), 0, 1e-6)
}

Tambahkan noise kecil untuk memecah ties dalam menangani masalah NaN yang kompleks pada PLS-SEM

4. Spesifikasi Model dan Estimasi Parameter (Mixed-Model PLS)

library(seminr)

# Outer Model
banjir_mm <- constructs(
  composite("IntensitasBanjir",
            c("Jumlah.Kejadian", "Rumah.Terendam"), weights = mode_B),
  composite("DampakKorbanManusia",                        
            c("Meninggal", "Hilang", "Luka...Sakit", "menderita_mengungsi"),
            weights = mode_B),  
  reflective("KerusakanPemukiman",
             c("Rumah.Rusak.Berat", "Rumah.Rusak.Sedang", "Rumah.Rusak.Ringan")),
  composite("KerusakanFasilitasPublik",
            c("Satuan.Pendidikan.Rusak", "Rumah.Ibadat.Rusak",
              "Fasilitas.Pelayanan.Kesehatan.Rusak", "Kantor.Rusak", "Jembatan.Rusak"),
            weights = mode_B)
)

# Inner Model
banjir_sm <- relationships( paths(from = "IntensitasBanjir", to   = c("DampakKorbanManusia", "KerusakanPemukiman", "KerusakanFasilitasPublik"))
)

# Estimasi Algoritma PLS-SEM
banjir_pls <- estimate_pls(
  data              = data_z_fix,
  measurement_model = banjir_mm,
  structural_model  = banjir_sm,
  inner_weights     = path_weighting,
  missing           = mean_replacement
)
## Generating the seminr model
## All 393 observations are valid.
summary_banjir <- summary(banjir_pls)

5. Evaluasi Outer Model (Measurement Model)

cat("\nOuter Loadings & Weights\n")
## 
## Outer Loadings & Weights
print(round(summary_banjir$loadings, 4))
##                                     IntensitasBanjir DampakKorbanManusia
## Jumlah.Kejadian                               -0.004               0.000
## Rumah.Terendam                                 1.000               0.000
## Meninggal                                     -0.000              -0.341
## Hilang                                        -0.000              -0.254
## Luka...Sakit                                  -0.000              -0.296
## menderita_mengungsi                            0.000               0.694
## Rumah.Rusak.Berat                             -0.000              -0.000
## Rumah.Rusak.Sedang                            -0.000              -0.000
## Rumah.Rusak.Ringan                            -0.000              -0.000
## Satuan.Pendidikan.Rusak                       -0.000              -0.000
## Rumah.Ibadat.Rusak                            -0.000              -0.000
## Fasilitas.Pelayanan.Kesehatan.Rusak           -0.000              -0.000
## Kantor.Rusak                                  -0.000              -0.000
## Jembatan.Rusak                                -0.000              -0.000
##                                     KerusakanPemukiman KerusakanFasilitasPublik
## Jumlah.Kejadian                                  0.000                    0.000
## Rumah.Terendam                                  -0.000                   -0.000
## Meninggal                                        0.000                    0.000
## Hilang                                           0.000                    0.000
## Luka...Sakit                                     0.000                    0.000
## menderita_mengungsi                              0.000                    0.000
## Rumah.Rusak.Berat                                0.894                    0.000
## Rumah.Rusak.Sedang                               0.987                    0.000
## Rumah.Rusak.Ringan                               0.961                    0.000
## Satuan.Pendidikan.Rusak                          0.000                    0.893
## Rumah.Ibadat.Rusak                               0.000                    0.785
## Fasilitas.Pelayanan.Kesehatan.Rusak              0.000                    0.943
## Kantor.Rusak                                     0.000                    0.633
## Jembatan.Rusak                                   0.000                    0.814
print(round(summary_banjir$weights, 4))
##                                     IntensitasBanjir DampakKorbanManusia
## Jumlah.Kejadian                                0.000               0.000
## Rumah.Terendam                                 1.000               0.000
## Meninggal                                      0.000              -0.718
## Hilang                                         0.000               0.115
## Luka...Sakit                                   0.000              -0.209
## menderita_mengungsi                            0.000               1.041
## Rumah.Rusak.Berat                              0.000               0.000
## Rumah.Rusak.Sedang                             0.000               0.000
## Rumah.Rusak.Ringan                             0.000               0.000
## Satuan.Pendidikan.Rusak                        0.000               0.000
## Rumah.Ibadat.Rusak                             0.000               0.000
## Fasilitas.Pelayanan.Kesehatan.Rusak            0.000               0.000
## Kantor.Rusak                                   0.000               0.000
## Jembatan.Rusak                                 0.000               0.000
##                                     KerusakanPemukiman KerusakanFasilitasPublik
## Jumlah.Kejadian                                  0.000                    0.000
## Rumah.Terendam                                   0.000                    0.000
## Meninggal                                        0.000                    0.000
## Hilang                                           0.000                    0.000
## Luka...Sakit                                     0.000                    0.000
## menderita_mengungsi                              0.000                    0.000
## Rumah.Rusak.Berat                                0.326                    0.000
## Rumah.Rusak.Sedang                               0.360                    0.000
## Rumah.Rusak.Ringan                               0.350                    0.000
## Satuan.Pendidikan.Rusak                          0.000                    0.522
## Rumah.Ibadat.Rusak                               0.000                   -0.527
## Fasilitas.Pelayanan.Kesehatan.Rusak              0.000                    0.640
## Kantor.Rusak                                     0.000                    0.188
## Jembatan.Rusak                                   0.000                    0.277
cat("\nReliabilitas & Validitas Konvergen\n")
## 
## Reliabilitas & Validitas Konvergen
print(round(summary_banjir$reliability, 4))
##                           alpha  rhoA  rhoC   AVE
## IntensitasBanjir         -0.008 1.000 0.498 0.500
## DampakKorbanManusia       0.785 1.000 0.012 0.188
## KerusakanPemukiman        0.963 0.966 0.964 0.899
## KerusakanFasilitasPublik  0.923 1.000 0.910 0.673
## 
## Alpha, rhoA, and rhoC should exceed 0.7 while AVE should exceed 0.5
cat("\nValiditas Diskriminan (HTMT) & VIF Formatif\n")
## 
## Validitas Diskriminan (HTMT) & VIF Formatif
print(round(summary_banjir$validity$htmt, 4))
##                          IntensitasBanjir DampakKorbanManusia
## IntensitasBanjir                        .                   .
## DampakKorbanManusia                 3.466                   .
## KerusakanPemukiman                  2.550               0.889
## KerusakanFasilitasPublik            2.602               0.818
##                          KerusakanPemukiman KerusakanFasilitasPublik
## IntensitasBanjir                          .                        .
## DampakKorbanManusia                       .                        .
## KerusakanPemukiman                        .                        .
## KerusakanFasilitasPublik              0.924                        .
lapply(summary_banjir$vif_items, round, 4)     
## list()

6. Evaluasi Inner Model (Structural Model)

cat("\nPath Coefficients & R-Squared\n")
## 
## Path Coefficients & R-Squared
print(round(summary_banjir$paths, 4))
##                  DampakKorbanManusia KerusakanPemukiman
## R^2                            0.459              0.075
## AdjR^2                         0.457              0.073
## IntensitasBanjir               0.677             -0.274
##                  KerusakanFasilitasPublik
## R^2                                 0.094
## AdjR^2                              0.092
## IntensitasBanjir                   -0.307
cat("\nSRMR (Model Fit)\n")
## 
## SRMR (Model Fit)
print(round(summary_banjir$it_criteria, 4))
##     DampakKorbanManusia KerusakanPemukiman KerusakanFasilitasPublik
## AIC            -238.216            -26.596                  -35.815
## BIC            -230.268            -18.648                  -27.867
cat("\nEffect Size f² & VIF Inner Model\n")
## 
## Effect Size f² & VIF Inner Model
print(round(summary_banjir$fSquare, 4))
##                          IntensitasBanjir DampakKorbanManusia
## IntensitasBanjir                    0.000               0.847
## DampakKorbanManusia                 0.000               0.000
## KerusakanPemukiman                  0.000               0.000
## KerusakanFasilitasPublik            0.000               0.000
##                          KerusakanPemukiman KerusakanFasilitasPublik
## IntensitasBanjir                      0.081                    0.104
## DampakKorbanManusia                   0.000                    0.000
## KerusakanPemukiman                    0.000                    0.000
## KerusakanFasilitasPublik              0.000                    0.000
lapply(summary_banjir$vif_antecedents, round, 4) 
## $DampakKorbanManusia
## IntensitasBanjir 
##               NA 
## 
## $KerusakanPemukiman
## IntensitasBanjir 
##               NA 
## 
## $KerusakanFasilitasPublik
## IntensitasBanjir 
##               NA

7. Bootstrapping

boot_banjir <- bootstrap_model(
  seminr_model = banjir_pls,
  nboot        = 1000,
  cores        = parallel::detectCores() - 1,
  seed         = 123
)
## Bootstrapping model using seminr...
## SEMinR Model successfully bootstrapped
summary_boot <- summary(boot_banjir, alpha = 0.05)  

cat("\nBootstrapped Path Coefficient\n")
## 
## Bootstrapped Path Coefficient
print(round(summary_boot$bootstrapped_paths, 4))
##                                                Original Est. Bootstrap Mean
## IntensitasBanjir  ->  DampakKorbanManusia              0.677          0.084
## IntensitasBanjir  ->  KerusakanPemukiman              -0.274         -0.271
## IntensitasBanjir  ->  KerusakanFasilitasPublik        -0.307         -0.328
##                                                Bootstrap SD T Stat. 2.5% CI
## IntensitasBanjir  ->  DampakKorbanManusia             0.684   0.990  -0.758
## IntensitasBanjir  ->  KerusakanPemukiman              0.064  -4.288  -0.389
## IntensitasBanjir  ->  KerusakanFasilitasPublik        0.048  -6.434  -0.412
##                                                97.5% CI Bootstrap P Val
## IntensitasBanjir  ->  DampakKorbanManusia         0.762           0.868
## IntensitasBanjir  ->  KerusakanPemukiman         -0.131           0.002
## IntensitasBanjir  ->  KerusakanFasilitasPublik   -0.234           0.000
cat("\nBootstrapped Outer Loadings (Reflektif)\n")
## 
## Bootstrapped Outer Loadings (Reflektif)
print(round(summary_boot$bootstrapped_loadings, 4))
##                                                                   Original Est.
## Jumlah.Kejadian  ->  IntensitasBanjir                                    -0.004
## Rumah.Terendam  ->  IntensitasBanjir                                      1.000
## Meninggal  ->  DampakKorbanManusia                                       -0.341
## Hilang  ->  DampakKorbanManusia                                          -0.254
## Luka...Sakit  ->  DampakKorbanManusia                                    -0.296
## menderita_mengungsi  ->  DampakKorbanManusia                              0.694
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                                 0.894
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                                0.987
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                                0.961
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                     0.893
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                          0.785
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik         0.943
## Kantor.Rusak  ->  KerusakanFasilitasPublik                                0.633
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                              0.814
##                                                                   Bootstrap Mean
## Jumlah.Kejadian  ->  IntensitasBanjir                                     -0.002
## Rumah.Terendam  ->  IntensitasBanjir                                       1.000
## Meninggal  ->  DampakKorbanManusia                                         0.020
## Hilang  ->  DampakKorbanManusia                                            0.025
## Luka...Sakit  ->  DampakKorbanManusia                                      0.015
## menderita_mengungsi  ->  DampakKorbanManusia                               0.149
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                                  0.888
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                                 0.988
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                                 0.956
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                      0.820
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                           0.726
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik          0.867
## Kantor.Rusak  ->  KerusakanFasilitasPublik                                 0.576
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                               0.749
##                                                                   Bootstrap SD
## Jumlah.Kejadian  ->  IntensitasBanjir                                    0.064
## Rumah.Terendam  ->  IntensitasBanjir                                     0.000
## Meninggal  ->  DampakKorbanManusia                                       0.345
## Hilang  ->  DampakKorbanManusia                                          0.261
## Luka...Sakit  ->  DampakKorbanManusia                                    0.298
## menderita_mengungsi  ->  DampakKorbanManusia                             0.676
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                                0.093
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                               0.085
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                               0.099
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                    0.123
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                         0.160
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik        0.079
## Kantor.Rusak  ->  KerusakanFasilitasPublik                               0.158
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                             0.138
##                                                                    T Stat.
## Jumlah.Kejadian  ->  IntensitasBanjir                               -0.062
## Rumah.Terendam  ->  IntensitasBanjir                              1920.674
## Meninggal  ->  DampakKorbanManusia                                  -0.988
## Hilang  ->  DampakKorbanManusia                                     -0.971
## Luka...Sakit  ->  DampakKorbanManusia                               -0.994
## menderita_mengungsi  ->  DampakKorbanManusia                         1.027
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                            9.655
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                          11.606
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                           9.725
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                7.243
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                     4.914
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik   11.900
## Kantor.Rusak  ->  KerusakanFasilitasPublik                           4.004
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                         5.914
##                                                                   2.5% CI
## Jumlah.Kejadian  ->  IntensitasBanjir                              -0.115
## Rumah.Terendam  ->  IntensitasBanjir                                0.999
## Meninggal  ->  DampakKorbanManusia                                 -0.387
## Hilang  ->  DampakKorbanManusia                                    -0.325
## Luka...Sakit  ->  DampakKorbanManusia                              -0.351
## menderita_mengungsi  ->  DampakKorbanManusia                       -0.700
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                           0.686
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                          0.879
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                          0.790
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik               0.525
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                    0.340
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik   0.678
## Kantor.Rusak  ->  KerusakanFasilitasPublik                          0.196
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                        0.407
##                                                                   97.5% CI
## Jumlah.Kejadian  ->  IntensitasBanjir                                0.126
## Rumah.Terendam  ->  IntensitasBanjir                                 1.000
## Meninggal  ->  DampakKorbanManusia                                   0.506
## Hilang  ->  DampakKorbanManusia                                      0.410
## Luka...Sakit  ->  DampakKorbanManusia                                0.435
## menderita_mengungsi  ->  DampakKorbanManusia                         0.853
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                            1.037
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                           1.115
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                           1.111
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                0.974
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                     0.953
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik    0.981
## Kantor.Rusak  ->  KerusakanFasilitasPublik                           0.832
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                         0.941
##                                                                   Bootstrap P Val
## Jumlah.Kejadian  ->  IntensitasBanjir                                       0.934
## Rumah.Terendam  ->  IntensitasBanjir                                        0.000
## Meninggal  ->  DampakKorbanManusia                                          0.868
## Hilang  ->  DampakKorbanManusia                                             0.890
## Luka...Sakit  ->  DampakKorbanManusia                                       0.874
## menderita_mengungsi  ->  DampakKorbanManusia                                0.868
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                                   0.000
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                                  0.002
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                                  0.002
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                       0.000
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                            0.000
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik           0.000
## Kantor.Rusak  ->  KerusakanFasilitasPublik                                  0.004
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                                0.000
cat("\nBootstrapped Outer Weights (Formatif)\n")
## 
## Bootstrapped Outer Weights (Formatif)
print(round(summary_boot$bootstrapped_weights, 4))
##                                                                   Original Est.
## Jumlah.Kejadian  ->  IntensitasBanjir                                     0.000
## Rumah.Terendam  ->  IntensitasBanjir                                      1.000
## Meninggal  ->  DampakKorbanManusia                                       -0.718
## Hilang  ->  DampakKorbanManusia                                           0.115
## Luka...Sakit  ->  DampakKorbanManusia                                    -0.209
## menderita_mengungsi  ->  DampakKorbanManusia                              1.041
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                                 0.326
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                                0.360
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                                0.350
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                     0.522
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                         -0.527
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik         0.640
## Kantor.Rusak  ->  KerusakanFasilitasPublik                                0.188
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                              0.277
##                                                                   Bootstrap Mean
## Jumlah.Kejadian  ->  IntensitasBanjir                                      0.001
## Rumah.Terendam  ->  IntensitasBanjir                                       0.999
## Meninggal  ->  DampakKorbanManusia                                        -0.059
## Hilang  ->  DampakKorbanManusia                                            0.062
## Luka...Sakit  ->  DampakKorbanManusia                                     -0.022
## menderita_mengungsi  ->  DampakKorbanManusia                               0.153
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                                  0.324
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                                 0.360
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                                 0.349
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                      0.436
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                          -0.445
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik          0.595
## Kantor.Rusak  ->  KerusakanFasilitasPublik                                 0.167
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                               0.258
##                                                                   Bootstrap SD
## Jumlah.Kejadian  ->  IntensitasBanjir                                    0.021
## Rumah.Terendam  ->  IntensitasBanjir                                     0.002
## Meninggal  ->  DampakKorbanManusia                                       0.758
## Hilang  ->  DampakKorbanManusia                                          0.196
## Luka...Sakit  ->  DampakKorbanManusia                                    0.237
## menderita_mengungsi  ->  DampakKorbanManusia                             1.021
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                                0.032
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                               0.038
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                               0.041
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                    0.657
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                         0.629
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik        0.358
## Kantor.Rusak  ->  KerusakanFasilitasPublik                               0.233
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                             0.330
##                                                                   T Stat.
## Jumlah.Kejadian  ->  IntensitasBanjir                               0.015
## Rumah.Terendam  ->  IntensitasBanjir                              547.674
## Meninggal  ->  DampakKorbanManusia                                 -0.948
## Hilang  ->  DampakKorbanManusia                                     0.586
## Luka...Sakit  ->  DampakKorbanManusia                              -0.882
## menderita_mengungsi  ->  DampakKorbanManusia                        1.019
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                          10.216
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                          9.341
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                          8.502
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik               0.795
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                   -0.838
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik   1.786
## Kantor.Rusak  ->  KerusakanFasilitasPublik                          0.806
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                        0.839
##                                                                   2.5% CI
## Jumlah.Kejadian  ->  IntensitasBanjir                              -0.030
## Rumah.Terendam  ->  IntensitasBanjir                                0.995
## Meninggal  ->  DampakKorbanManusia                                 -1.049
## Hilang  ->  DampakKorbanManusia                                    -0.284
## Luka...Sakit  ->  DampakKorbanManusia                              -0.405
## menderita_mengungsi  ->  DampakKorbanManusia                       -1.067
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                           0.261
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                          0.322
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                          0.292
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik              -0.958
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                   -1.615
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik  -0.032
## Kantor.Rusak  ->  KerusakanFasilitasPublik                         -0.246
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                       -0.490
##                                                                   97.5% CI
## Jumlah.Kejadian  ->  IntensitasBanjir                                0.048
## Rumah.Terendam  ->  IntensitasBanjir                                 1.001
## Meninggal  ->  DampakKorbanManusia                                   1.070
## Hilang  ->  DampakKorbanManusia                                      0.479
## Luka...Sakit  ->  DampakKorbanManusia                                0.399
## menderita_mengungsi  ->  DampakKorbanManusia                         1.096
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                            0.377
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                           0.421
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                           0.410
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                1.602
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                     0.858
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik    1.359
## Kantor.Rusak  ->  KerusakanFasilitasPublik                           0.676
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                         0.819
##                                                                   Bootstrap P Val
## Jumlah.Kejadian  ->  IntensitasBanjir                                       0.930
## Rumah.Terendam  ->  IntensitasBanjir                                        0.000
## Meninggal  ->  DampakKorbanManusia                                          0.868
## Hilang  ->  DampakKorbanManusia                                             0.782
## Luka...Sakit  ->  DampakKorbanManusia                                       0.904
## menderita_mengungsi  ->  DampakKorbanManusia                                0.868
## Rumah.Rusak.Berat  ->  KerusakanPemukiman                                   0.000
## Rumah.Rusak.Sedang  ->  KerusakanPemukiman                                  0.002
## Rumah.Rusak.Ringan  ->  KerusakanPemukiman                                  0.002
## Satuan.Pendidikan.Rusak  ->  KerusakanFasilitasPublik                       0.472
## Rumah.Ibadat.Rusak  ->  KerusakanFasilitasPublik                            0.454
## Fasilitas.Pelayanan.Kesehatan.Rusak  ->  KerusakanFasilitasPublik           0.066
## Kantor.Rusak  ->  KerusakanFasilitasPublik                                  0.444
## Jembatan.Rusak  ->  KerusakanFasilitasPublik                                0.398

8. Plot Hasil PLS-SEM

plot(banjir_pls, title = "Hasil PLS-SEM")