PROJECT EVD

1. DESKRIPSI DATASET

1.1 Sumber Data

Dataset yang digunakan adalah Global Earthquake-Tsunami Risk Assessment Dataset yang diperoleh dari platform Kaggle. Dataset ini berisi informasi mengenai gempa bumi signifikan yang terjadi di seluruh dunia selama periode tahun 2001–2022 dan dirancang untuk mendukung penelitian terkait prediksi tsunami, analisis gempa bumi, serta penilaian risiko bencana seismik.

1.2 Jumlah Observasi

Dataset terdiri dari 782 observasi, di mana setiap observasi merepresentasikan satu kejadian gempa bumi signifikan dengan magnitudo minimal 6,5 skala Richter yang tercatat di berbagai wilayah dunia selama periode pengamatan.

1.3 Jumlah Variabel

Dataset memiliki 13 variabel, yang terdiri dari:

12 variabel prediktor (independen):

  1. magnitude
  2. cdi
  3. mmi
  4. sig
  5. nst
  6. dmin
  7. gap
  8. depth
  9. latitude
  10. longitude
  11. Year
  12. Month

1 variabel target (dependen): tsunami Variabel-variabel tersebut menggambarkan karakteristik gempa bumi, lokasi geografis, kualitas pengamatan seismik, serta waktu kejadian gempa.

1.4 Tujuan Analisis

Tujuan analisis pada dataset ini adalah untuk mengidentifikasi faktor-faktor yang memengaruhi potensi terjadinya tsunami akibat gempa bumi serta mengeksplorasi pola hubungan antara karakteristik seismik dengan kejadian tsunami.

Secara khusus, analisis dilakukan untuk:

  1. Memahami karakteristik gempa bumi yang tercatat dalam dataset.
  2. Mengeksplorasi pola distribusi dan hubungan antar variabel melalui Exploratory Data Analysis (EDA).
  3. Mengidentifikasi variabel yang memiliki pengaruh besar terhadap potensi tsunami.
  4. Menyiapkan data untuk pengembangan model klasifikasi yang dapat digunakan dalam prediksi risiko tsunami dan sistem peringatan dini bencana.

Dengan demikian, hasil analisis diharapkan dapat memberikan informasi yang berguna dalam mitigasi bencana dan pengambilan keputusan terkait risiko tsunami.

1.5 Input Dataasset

# Load library yang diperlukan
library(tidyverse)
library(corrplot)
library(car)

# Membaca data
data <- read.csv("C:/Users/Advan/OneDrive - untirta.ac.id/SEMESTER 4/Ekplorasi dan Visualisasi Data/earthquake_data_tsunami.csv")
DT::datatable(data)

2. Exploratory Data Analysis (EDA).

2.1 Statistik Deskriptif,

# Statistik Deskriptif
# Melihat ringkasan statistik (mean, median, min, max)
summary(data)
##    magnitude          cdi             mmi             sig        
##  Min.   :6.500   Min.   :0.000   Min.   :1.000   Min.   : 650.0  
##  1st Qu.:6.600   1st Qu.:0.000   1st Qu.:5.000   1st Qu.: 691.0  
##  Median :6.800   Median :5.000   Median :6.000   Median : 754.0  
##  Mean   :6.941   Mean   :4.334   Mean   :5.964   Mean   : 870.1  
##  3rd Qu.:7.100   3rd Qu.:7.000   3rd Qu.:7.000   3rd Qu.: 909.8  
##  Max.   :9.100   Max.   :9.000   Max.   :9.000   Max.   :2910.0  
##       nst             dmin             gap             depth       
##  Min.   :  0.0   Min.   : 0.000   Min.   :  0.00   Min.   :  2.70  
##  1st Qu.:  0.0   1st Qu.: 0.000   1st Qu.: 14.62   1st Qu.: 14.00  
##  Median :140.0   Median : 0.000   Median : 20.00   Median : 26.30  
##  Mean   :230.3   Mean   : 1.326   Mean   : 25.04   Mean   : 75.88  
##  3rd Qu.:445.0   3rd Qu.: 1.863   3rd Qu.: 30.00   3rd Qu.: 49.75  
##  Max.   :934.0   Max.   :17.654   Max.   :239.00   Max.   :670.81  
##     latitude         longitude            Year          Month       
##  Min.   :-61.848   Min.   :-179.97   Min.   :2001   Min.   : 1.000  
##  1st Qu.:-14.596   1st Qu.: -71.67   1st Qu.:2007   1st Qu.: 3.250  
##  Median : -2.572   Median : 109.43   Median :2013   Median : 7.000  
##  Mean   :  3.538   Mean   :  52.61   Mean   :2012   Mean   : 6.564  
##  3rd Qu.: 24.654   3rd Qu.: 148.94   3rd Qu.:2017   3rd Qu.:10.000  
##  Max.   : 71.631   Max.   : 179.66   Max.   :2022   Max.   :12.000  
##     tsunami      
##  Min.   :0.0000  
##  1st Qu.:0.0000  
##  Median :0.0000  
##  Mean   :0.3887  
##  3rd Qu.:1.0000  
##  Max.   :1.0000

Interpretasi: Dataset ini mencakup gempa bumi berkekuatan minimal 6,5 magnitudo yang terjadi antara tahun 2001 hingga 2022. Secara keseluruhan, nilai rata-rata magnitudo adalah 6,94 dengan median 6,8, menunjukkan distribusi yang sedikit right-skewed — sebagian besar gempa berada di kisaran moderat-kuat, namun terdapat beberapa kejadian ekstrem hingga magnitudo 9,1. Kedalaman gempa (depth) sangat bervariasi, mulai dari 2,7 km hingga 670,81 km, dengan rata-rata 75,88 km dan median hanya 26,3 km, mengindikasikan dominasi gempa dangkal yang umumnya lebih destruktif. Variabel sig (signifikansi gempa) juga memiliki rentang yang lebar (650–2910), menandakan perbedaan dampak yang besar antar kejadian. Sementara itu, variabel tsunami memiliki rata-rata 0,39, artinya sekitar 38,9% kejadian gempa dalam dataset ini disertai tsunami.

2.2 Identifikasi Missing Value

# Identifikasi Missing Value
# Mengecek jumlah data yang kosong per kolom
colSums(is.na(data))
## magnitude       cdi       mmi       sig       nst      dmin       gap     depth 
##         0         0         0         0         0         0         0         0 
##  latitude longitude      Year     Month   tsunami 
##         0         0         0         0         0

Interpretasi: Hasil pemeriksaan missing value menunjukkan bahwa tidak ada nilai yang hilang pada seluruh 13 variabel dalam dataset. Setiap kolom — mulai dari magnitude, cdi, mmi, sig, nst, dmin, gap, depth, latitude, longitude, Year, Month, hingga tsunami — memiliki nilai 0 untuk NA. Kondisi ini menunjukkan kualitas data yang baik dan analisis selanjutnya dapat dilakukan tanpa perlu imputasi atau penanganan missing value.

2.3 Identifikasi Outlier

# Identifikasi Outlier
# Menggunakan boxplot untuk variabel utama seperti 'magnitude' dan 'depth'
# Deteksi outlier secara visual
par(mfrow=c(1,2))
boxplot(data$magnitude, main="Outlier: Magnitude", col="lightblue")
boxplot(data$depth, main="Outlier: Depth", col="lightgreen")

Interpretasi:

  • Boxplot magnitude menunjukkan adanya beberapa outlier di bagian atas distribusi, yakni kejadian gempa dengan magnitudo sangat tinggi (mendekati 9,1). Meskipun teridentifikasi sebagai outlier secara statistik, nilai-nilai ini merepresentasikan kejadian nyata seperti gempa megathrust dan tidak perlu dihapus karena bersifat informatif secara substantif.
  • Boxplot depth menampilkan outlier yang jauh lebih banyak dan ekstrem, dengan sebagian gempa memiliki kedalaman hingga lebih dari 600 km. Hal ini mencerminkan variasi tipe gempa — dari gempa dangkal (shallow) hingga gempa sangat dalam (deep focus) — yang memang merupakan karakteristik alami distribusi seismik global. Outlier ini juga tidak disarankan untuk dihapus karena merupakan variasi yang valid secara geologis.

2.4 Analisis Korelasi

# Analisis Korelasi
# Menggunakan matriks korelasi untuk melihat hubungan antar variabel
df_num <- data %>% select(where(is.numeric))
cor_matrix <- cor(df_num, use = "pairwise.complete.obs")

Interpretasi: Matriks korelasi menunjukkan beberapa temuan penting. Variabel sig (signifikansi) memiliki korelasi positif yang cukup kuat dengan magnitude, yang logis karena gempa besar secara definisi memiliki nilai signifikansi lebih tinggi. Variabel cdi (community decimal intensity) dan mmi (modified mercalli intensity) berkorelasi positif satu sama lain, karena keduanya sama-sama mengukur intensitas guncangan yang dirasakan. Variabel tsunami juga menunjukkan korelasi positif dengan magnitude dan sig, mengindikasikan bahwa gempa dengan magnitudo dan signifikansi lebih tinggi cenderung lebih mungkin memicu tsunami. Sebagian besar variabel lainnya memiliki korelasi yang lemah hingga sedang, menandakan tidak adanya multikolinearitas parah secara umum — yang dikonfirmasi lebih lanjut melalui analisis VIF.

2.5. Identifikasi Multikolinearitas

# Identifikasi Multikolinearitas
# Menggunakan VIF (Variance Inflation Factor)
# Model linear dummy untuk mengecek antar variabel independen
model_fit <- lm(magnitude ~ ., data = df_num)
print("--- Identifikasi Multikolinearitas (VIF) ---")
## [1] "--- Identifikasi Multikolinearitas (VIF) ---"
vif(model_fit)
##       cdi       mmi       sig       nst      dmin       gap     depth  latitude 
##  1.865226  1.995523  1.606583  2.249995  1.709013  1.219273  1.454243  1.117975 
## longitude      Year     Month   tsunami 
##  1.182334  3.566364  1.017091  1.930620

Interpretasi: Hasil VIF (Variance Inflation Factor) menunjukkan bahwa tidak ada variabel yang mengalami multikolinearitas serius. Nilai VIF yang mengkhawatirkan biasanya di atas 10, sedangkan pada dataset ini nilai VIF tertinggi adalah 3,57 pada variabel Year, yang masih jauh di bawah ambang batas tersebut. Variabel nst (jumlah stasiun seismik) memiliki VIF 2,25 dan mmi sebesar 2,00 — keduanya masih dalam batas toleransi. Secara keseluruhan, model regresi dapat menggunakan semua variabel numerik ini tanpa kekhawatiran bahwa multikolinearitas akan mendistorsi estimasi koefisien secara signifikan.

2.6. Visualisasi Tambahan (Distribusi Data)

# Visualisasi Tambahan (Distribusi Data)
ggplot(data, aes(x = magnitude, fill = as.factor(tsunami))) +
  geom_density(alpha = 0.5) +
  labs(title = "Distribusi Magnitude berdasarkan Kejadian Tsunami", 
       x = "Magnitude", fill = "Tsunami (0/1)") +
  theme_minimal()

Interpretasi: Plot densitas ini membandingkan distribusi magnitudo antara gempa yang tidak disertai tsunami (0) dan yang disertai tsunami (1). Terlihat bahwa gempa yang memicu tsunami memiliki distribusi yang bergeser ke arah magnitudo lebih tinggi dibandingkan gempa tanpa tsunami. Kurva densitas untuk kejadian tsunami (nilai 1) cenderung lebih datar dan memanjang ke kanan, menandakan proporsi yang lebih besar pada magnitudo ≥7,0. Sebaliknya, gempa tanpa tsunami lebih terkonsentrasi di kisaran magnitudo 6,5–7,0. Pola ini mengonfirmasi bahwa magnitudo merupakan faktor pembeda penting dalam menentukan potensi tsunami, meskipun bukan satu-satunya faktor — karena kedalaman dan lokasi gempa juga berperan besar.

3. Feature Engineering

Feature engineering dilakukan untuk menghasilkan variabel yang lebih informatif sehingga dapat membantu proses analisis dan pemodelan data gempa bumi dan tsunami.

3.1 Feature 1 : Magnitude Category

data_fe <- data

data_fe$magnitude_category <- cut(
  data_fe$magnitude,
  breaks = c(6.5, 7, 8, Inf),
  labels = c("Strong", "Major", "Great"),
  include.lowest = TRUE
)

table(data_fe$magnitude_category)
## 
## Strong  Major  Great 
##    548    211     23

Alasan Pembuatan Fitur

Variabel magnitude merupakan data numerik kontinu yang menunjukkan kekuatan gempa. Agar lebih mudah dianalisis dan diinterpretasikan, magnitude dikelompokkan ke dalam beberapa kategori berdasarkan tingkat kekuatan gempa, yaitu Strong, Major, dan Great.

Kategori yang digunakan adalah:

  • Strong : 6.5 – < 7.0
  • Major : 7.0 – < 8.0
  • Great : ≥ 8.0

Interpretasi Fitur

Berdasarkan output tabel yang dihasilkan, dapat diketahui distribusi jumlah gempa pada masing-masing kategori magnitudo. Kategori dengan frekuensi terbesar menunjukkan kelompok magnitudo yang paling dominan dalam dataset.

Apabila kategori Major memiliki jumlah observasi paling banyak, maka dapat disimpulkan bahwa sebagian besar gempa yang tercatat memiliki magnitudo antara 7 hingga kurang dari 8. Sebaliknya, apabila kategori Great memiliki jumlah observasi yang lebih sedikit, maka kejadian gempa dengan magnitudo sangat besar relatif jarang terjadi.

Pengelompokan magnitude menjadi kategori membantu menyederhanakan analisis karena karakteristik gempa dapat diamati berdasarkan kelompok kekuatannya, bukan hanya berdasarkan nilai numerik yang sangat beragam. Selain itu, fitur ini dapat digunakan untuk melihat apakah gempa dengan magnitudo yang lebih besar memiliki kecenderungan lebih tinggi dalam memicu tsunami.


3.2 Feature 2 : Depth Category

data_fe$depth_category <- cut(
  data_fe$depth,
  breaks = c(-Inf, 70, 300, Inf),
  labels = c("Shallow", "Intermediate", "Deep")
)

table(data_fe$depth_category)
## 
##      Shallow Intermediate         Deep 
##          619          111           52

Alasan Pembuatan Fitur

Kedalaman gempa merupakan salah satu faktor penting yang memengaruhi dampak gempa di permukaan bumi. Oleh karena itu, variabel depth dikelompokkan menjadi beberapa kategori agar lebih mudah dipahami dan dianalisis.

Kategori yang digunakan adalah:

  • Shallow : < 70 km
  • Intermediate : 70 – 300 km
  • Deep : > 300 km

Interpretasi Fitur

Berdasarkan output tabel yang dihasilkan, dapat diketahui kategori kedalaman gempa yang paling sering muncul pada dataset.

Jika kategori Shallow memiliki jumlah observasi terbesar, maka sebagian besar gempa terjadi pada kedalaman kurang dari 70 km. Kondisi ini menunjukkan bahwa mayoritas gempa berasal dari sumber yang relatif dekat dengan permukaan bumi sehingga berpotensi menghasilkan guncangan yang lebih kuat di wilayah terdampak.

Apabila kategori Deep memiliki jumlah observasi yang lebih sedikit dibandingkan kategori lainnya, maka gempa dengan sumber yang sangat dalam relatif jarang ditemukan dalam dataset. Hasil ini juga dapat memberikan gambaran mengenai karakteristik geologi wilayah yang menjadi lokasi kejadian gempa.

Fitur ini membantu menyederhanakan informasi kedalaman gempa sehingga pola distribusi kedalaman lebih mudah diamati dibandingkan jika hanya menggunakan nilai depth asli yang bersifat kontinu.


3.3 Feature 3 : Energy Index

data_fe$energy_index <- data_fe$magnitude * log(data_fe$depth + 1)

summary(data_fe$energy_index)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.504  18.699  22.957  24.623  28.025  53.082

Alasan Pembuatan Fitur

Magnitude dan depth merupakan dua variabel utama yang menggambarkan karakteristik suatu gempa bumi. Untuk memperoleh informasi yang lebih komprehensif, kedua variabel tersebut digabungkan menjadi satu fitur baru yang disebut Energy Index.

Rumus yang digunakan:

\[ Energy\ Index = Magnitude \times \log(Depth + 1) \]

Fitur ini bertujuan menangkap kombinasi antara kekuatan gempa dan kedalaman sumber gempa dalam satu ukuran yang lebih informatif.

Interpretasi Fitur

Berdasarkan output summary yang dihasilkan, dapat diamati nilai minimum, kuartil pertama, median, rata-rata, kuartil ketiga, dan nilai maksimum dari Energy Index.

Nilai minimum menunjukkan kejadian gempa dengan kombinasi magnitudo dan kedalaman yang relatif rendah. Sebaliknya, nilai maksimum menunjukkan kejadian gempa dengan kombinasi magnitudo dan kedalaman paling besar dalam dataset.

Median menggambarkan nilai tengah Energy Index, sedangkan rata-rata menunjukkan kecenderungan umum dari keseluruhan data. Apabila nilai rata-rata lebih besar dibandingkan median, maka terdapat beberapa gempa dengan nilai Energy Index yang sangat tinggi sehingga distribusi data cenderung menceng ke kanan.

Semakin besar nilai Energy Index, semakin besar kombinasi pengaruh antara magnitudo dan kedalaman gempa. Oleh karena itu, fitur ini dapat digunakan untuk mengidentifikasi kejadian gempa yang memiliki karakteristik ekstrem dan berpotensi memberikan dampak yang lebih besar dibandingkan kejadian gempa lainnya.


3.4 Visualisasi Feature Engineering

library(ggplot2)

ggplot(data_fe,
       aes(x = magnitude_category,
           fill = as.factor(tsunami))) +
  geom_bar(position = "dodge") +
  labs(
    title = "Distribusi Tsunami Berdasarkan Kategori Magnitude",
    x = "Kategori Magnitude",
    y = "Jumlah Gempa",
    fill = "Tsunami"
  ) +
  theme_minimal()

Interpretasi Visualisasi

Grafik memperlihatkan distribusi jumlah kejadian tsunami dan non-tsunami pada setiap kategori magnitudo gempa. Tinggi batang menunjukkan banyaknya observasi pada masing-masing kategori.

Kategori dengan batang paling tinggi menunjukkan kelompok magnitudo yang paling dominan dalam dataset. Jika kategori Major memiliki frekuensi tertinggi, maka dapat disimpulkan bahwa sebagian besar kejadian gempa berada pada rentang magnitudo 7 hingga kurang dari 8.

Selanjutnya, perbandingan warna pada setiap kategori menunjukkan proporsi kejadian tsunami dan non-tsunami. Apabila jumlah kejadian tsunami meningkat pada kategori Great, maka terdapat indikasi bahwa gempa dengan magnitudo yang sangat besar cenderung lebih berpotensi memicu tsunami dibandingkan kategori lainnya.

Sebaliknya, apabila jumlah non-tsunami tetap mendominasi pada seluruh kategori, maka dapat disimpulkan bahwa magnitudo yang besar tidak selalu diikuti oleh terjadinya tsunami. Faktor lain seperti kedalaman gempa, lokasi episentrum, kondisi dasar laut, serta karakteristik geologi wilayah juga dapat memengaruhi terbentuknya tsunami.

Secara keseluruhan, visualisasi ini memberikan gambaran awal mengenai hubungan antara tingkat kekuatan gempa dan kejadian tsunami sehingga dapat menjadi dasar untuk analisis lebih lanjut pada tahap berikutnya.

4. Feature Selection

4.1 Metode 1: Filter Method (Korelasi)

# Pastikan library terinstall
library(caret)
## Warning: package 'caret' was built under R version 4.5.3
## Loading required package: lattice
## 
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
## 
##     lift
library(glmnet)
## Warning: package 'glmnet' was built under R version 4.5.2
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## Loaded glmnet 4.1-10
library(tidyverse)

# Kita gunakan data_fe yang sudah memiliki fitur baru
# Pastikan dataset bersih dari NA dan hanya berisi numerik untuk keperluan seleksi
data_fs <- data_fe %>% 
  select(where(is.numeric)) %>% 
  drop_na()

# 4.1 METODE 1: FILTER METHOD (Korelasi)
# Menghapus variabel yang memiliki korelasi sangat tinggi (> 0.85) dengan variabel lain
cor_matrix <- cor(data_fs %>% select(-magnitude))
cor_matrix
##                       cdi          mmi         sig         nst         dmin
## cdi           1.000000000  0.317937144  0.47978827 -0.17541659  0.006553715
## mmi           0.317937144  1.000000000  0.44242325  0.16041680 -0.299073912
## sig           0.479788270  0.442423251  1.00000000 -0.03010030 -0.095317675
## nst          -0.175416593  0.160416799 -0.03010030  1.00000000 -0.529371258
## dmin          0.006553715 -0.299073912 -0.09531768 -0.52937126  1.000000000
## gap           0.098143208 -0.015723127  0.11428546 -0.11881191 -0.021932759
## depth        -0.097890926 -0.504438804 -0.08866726 -0.12198160  0.168545983
## latitude      0.129002979  0.144882758  0.20430613  0.14420352 -0.238376702
## longitude    -0.149047608 -0.005802738 -0.19013227  0.17366545 -0.097874774
## Year          0.423158098 -0.212855195  0.12443929 -0.68860183  0.529449012
## Month         0.007002361 -0.035237749 -0.02918923 -0.01402125  0.037502053
## tsunami       0.160265636 -0.147362749 -0.01549961 -0.60023121  0.400751659
## energy_index -0.006088636 -0.335957352  0.02861056 -0.01809652  0.062413333
##                      gap       depth    latitude    longitude        Year
## cdi           0.09814321 -0.09789093  0.12900298 -0.149047608  0.42315810
## mmi          -0.01572313 -0.50443880  0.14488276 -0.005802738 -0.21285519
## sig           0.11428546 -0.08866726  0.20430613 -0.190132274  0.12443929
## nst          -0.11881191 -0.12198160  0.14420352  0.173665452 -0.68860183
## dmin         -0.02193276  0.16854598 -0.23837670 -0.097874774  0.52944901
## gap           1.00000000 -0.11191225  0.08775642 -0.313622670  0.19400151
## depth        -0.11191225  1.00000000 -0.06949216 -0.036985536  0.17822012
## latitude      0.08775642 -0.06949216  1.00000000  0.026927040 -0.08973106
## longitude    -0.31362267 -0.03698554  0.02692704  1.000000000 -0.18794658
## Year          0.19400151  0.17822012 -0.08973106 -0.187946580  1.00000000
## Month        -0.02495304  0.06921319 -0.05729182  0.028047346 -0.02253118
## tsunami       0.11636023  0.05681422 -0.11320930 -0.136777698  0.64721100
## energy_index -0.16462389  0.83450304 -0.06371719 -0.017271303  0.10082666
##                     Month     tsunami energy_index
## cdi           0.007002361  0.16026564 -0.006088636
## mmi          -0.035237749 -0.14736275 -0.335957352
## sig          -0.029189226 -0.01549961  0.028610558
## nst          -0.014021245 -0.60023121 -0.018096517
## dmin          0.037502053  0.40075166  0.062413333
## gap          -0.024953039  0.11636023 -0.164623893
## depth         0.069213194  0.05681422  0.834503043
## latitude     -0.057291824 -0.11320930 -0.063717191
## longitude     0.028047346 -0.13677770 -0.017271303
## Year         -0.022531181  0.64721100  0.100826657
## Month         1.000000000 -0.02202839  0.021630101
## tsunami      -0.022028385  1.00000000  0.051380295
## energy_index  0.021630101  0.05138029  1.000000000
highly_correlated <- findCorrelation(cor_matrix, cutoff = 0.85)
highly_correlated
## integer(0)
# Mendapatkan nama variabel yang akan dieliminasi
dropped_vars <- colnames(data_fs %>% select(-magnitude))[highly_correlated]

# Membuat dataset hasil filter
data_fs_filtered <- data_fs %>% select(-all_of(dropped_vars))

cat("--- HASIL METODE 1: FILTER (KORELASI) ---\n")
## --- HASIL METODE 1: FILTER (KORELASI) ---
cat("Variabel yang dieliminasi karena redundan:", paste(dropped_vars, collapse = ", "), "\n")
## Variabel yang dieliminasi karena redundan:
cat("Jumlah variabel setelah filter:", ncol(data_fs_filtered), "\n\n")
## Jumlah variabel setelah filter: 14

Metode 1: Filter Method (Korelasi)

  • Variabel yang dipilih: Semua variabel yang memiliki korelasi < 0.85 antar sesamanya. ( Berdasarkan output semua variabel memiliki korelasi < 0.85, jadi semuanya dipilih)

  • Variabel yang dieliminasi: Variabel yang memiliki korelasi > 0.85 dengan variabel lain.( Berdasarkan output tidak ada variabel memiliki korelasi > 0,85. Oleh karena itu seluruh variabel tetap dipertahankan untuk analisis berikutnya, jadi tidak ada yang dieliminasi)

  • Alasan: Sesuai materi, metode ini dilakukan untuk mengurangi multikolinearitas. Dengan membuang variabel yang redundan (korelasi sangat tinggi), kita menyederhanakan data tanpa kehilangan informasi unik.

4.2 METODE 2: EMBEDDED METHOD (Lasso Regression)

# 4.2 METODE 2: EMBEDDED METHOD (Lasso Regression)
# Lasso melakukan penalti pada fitur yang kurang relevan (koefisien menjadi 0)

# Menentukan target (y) dan prediktor (x) dari data yang sudah difilter
y <- data_fs_filtered$magnitude
x <- as.matrix(data_fs_filtered %>% select(-magnitude))

# Melakukan Cross-Validation untuk mencari Lambda Optimal
set.seed(123)
lasso_cv <- cv.glmnet(x, y, alpha = 1)

# Mengambil koefisien pada lambda terbaik
best_lambda <- lasso_cv$lambda.min
best_lambda
## [1] 0.00165848
lasso_coef <- coef(lasso_cv, s = best_lambda)
lasso_coef
## 14 x 1 sparse Matrix of class "dgCMatrix"
##               s=0.00165848
## (Intercept)  21.0959726540
## cdi          -0.0015371891
## mmi           0.0279832853
## sig           0.0006789478
## nst           0.0001728580
## dmin          0.0072875843
## gap          -0.0012805605
## depth        -0.0010042736
## latitude     -0.0016529033
## longitude     0.0001365059
## Year         -0.0077625629
## Month         0.0004805884
## tsunami       0.1089701890
## energy_index  0.0295074304
# Menampilkan hasil fitur
lasso_matrix <- as.matrix(lasso_coef)
features_selected <- rownames(lasso_matrix)[lasso_matrix[,1] != 0]
features_dropped <- rownames(lasso_matrix)[lasso_matrix[,1] == 0]

cat("--- HASIL METODE 2: EMBEDDED (LASSO) ---\n")
## --- HASIL METODE 2: EMBEDDED (LASSO) ---
cat("Fitur yang DIPILIH (Koefisien != 0):", paste(features_selected, collapse = ", "), "\n")
## Fitur yang DIPILIH (Koefisien != 0): (Intercept), cdi, mmi, sig, nst, dmin, gap, depth, latitude, longitude, Year, Month, tsunami, energy_index
cat("Fitur yang DIELIMINASI (Koefisien = 0):", paste(features_dropped, collapse = ", "), "\n")
## Fitur yang DIELIMINASI (Koefisien = 0):

Metode 2: Embedded Method (Lasso Regression)

  • Variabel yang dipilih: Variabel yang memiliki koefisien bukan nol (coef != 0) pada hasil lambda.min. ( Berdasarkan output semua variabel memiliki koefisien bukan nol, jadi semuanya dipilih)

  • Variabel yang dieliminasi: Variabel yang koefisiennya bernilai nol.( Berdasarkan output tidak ada variabel memiliki koefisien nol, jadi tidak dieliminasi)

  • Alasan: Sesuai prinsip Lasso, metode ini secara otomatis melakukan seleksi fitur selama proses pemodelan. Variabel dengan koefisien nol dianggap sebagai noise (tidak memberikan kontribusi signifikan terhadap target), sehingga dieliminasi untuk menghindari overfitting dan meningkatkan kekuatan penjelas model.


5. Feature Extraction (PCA)

Principal Component Analysis (PCA) digunakan untuk mereduksi dimensi data dengan mengubah sejumlah variabel yang saling berkorelasi menjadi sejumlah komponen utama (principal components) yang saling bebas (tidak berkorelasi). PCA membantu menyederhanakan struktur data tanpa kehilangan sebagian besar informasi yang terkandung dalam data asli.

Pada penelitian ini, PCA diterapkan pada seluruh variabel numerik hasil feature engineering dan feature selection untuk memperoleh representasi data yang lebih ringkas sebelum digunakan pada tahap pemodelan.

5.1 Standardisasi Data

Karena variabel memiliki satuan dan rentang nilai yang berbeda-beda, maka dilakukan standardisasi terlebih dahulu agar setiap variabel memiliki kontribusi yang seimbang dalam pembentukan komponen utama.

Pemilihan Variabel untuk PCA

Pada tahap PCA, hanya variabel prediktor yang digunakan dalam pembentukan komponen utama. Variabel target tsunami tidak disertakan dalam proses PCA karena tujuan PCA adalah mereduksi dimensi variabel penjelas (prediktor) tanpa melibatkan variabel yang akan diprediksi.

Jika variabel target dimasukkan ke dalam PCA, maka informasi mengenai kejadian tsunami akan ikut memengaruhi pembentukan komponen utama. Kondisi ini dapat menyebabkan data leakage, yaitu situasi ketika informasi target telah digunakan pada tahap ekstraksi fitur sehingga hasil analisis atau model yang dibangun menjadi bias.

Oleh karena itu, PCA dilakukan hanya pada variabel-variabel karakteristik gempa bumi, seperti magnitudo, intensitas, kedalaman, lokasi geografis, waktu kejadian, dan fitur hasil feature engineering. Setelah komponen utama diperoleh, variabel tsunami tetap dipertahankan sebagai variabel target yang digunakan pada tahap analisis atau pemodelan selanjutnya.

# Memilih variabel numerik
data_pca <- data_fs_filtered %>%
  select(-tsunami)

DT::datatable(data_pca)
# Standardisasi data
data_scaled <- scale(data_pca)

# Melakukan PCA
pca_result <- prcomp(data_scaled,
                     center = TRUE,
                     scale. = TRUE)

Alasan Standardisasi

Variabel seperti magnitude, depth, sig, longitude, dan energy_index memiliki satuan serta rentang nilai yang berbeda-beda. Jika PCA dilakukan tanpa standardisasi, variabel dengan varians terbesar akan mendominasi pembentukan komponen utama.

Oleh karena itu, standardisasi dilakukan agar seluruh variabel memiliki rata-rata mendekati nol dan simpangan baku sebesar satu, sehingga setiap variabel memiliki kontribusi yang seimbang dalam proses pembentukan komponen utama.


5.2 Proporsi Variansi yang Dijelaskan

summary(pca_result)

Atau:

# Proporsi variansi
pve <- pca_result$sdev^2 / sum(pca_result$sdev^2)

# Variansi kumulatif
cum_pve <- cumsum(pve)

data.frame(
  PC = paste0("PC",1:length(pve)),
  Proporsi_Variansi = round(pve,4),
  Variansi_Kumulatif = round(cum_pve,4)
)
##      PC Proporsi_Variansi Variansi_Kumulatif
## 1   PC1            0.2095             0.2095
## 2   PC2            0.1809             0.3904
## 3   PC3            0.1446             0.5351
## 4   PC4            0.0943             0.6294
## 5   PC5            0.0773             0.7066
## 6   PC6            0.0750             0.7817
## 7   PC7            0.0507             0.8324
## 8   PC8            0.0499             0.8823
## 9   PC9            0.0353             0.9175
## 10 PC10            0.0301             0.9477
## 11 PC11            0.0267             0.9744
## 12 PC12            0.0163             0.9907
## 13 PC13            0.0093             1.0000

Interpretasi

Hasil PCA menunjukkan bahwa komponen utama pertama (PC1) mampu menjelaskan sebesar 20,95% variasi data. Komponen utama kedua (PC2) menjelaskan 18,09% variasi data, sedangkan komponen utama ketiga (PC3) menjelaskan 14,46% variasi data.

Secara kumulatif, tiga komponen utama pertama telah mampu menjelaskan 53,51% variasi total data. Ketika ditambahkan hingga komponen ketujuh (PC7), proporsi variansi kumulatif meningkat menjadi 83,24%. Hal ini menunjukkan bahwa sebagian besar informasi yang terkandung dalam 13 variabel asli telah berhasil diringkas ke dalam tujuh komponen utama.

Berdasarkan kriteria variansi kumulatif minimum 80%, tujuh komponen utama pertama dianggap cukup representatif untuk menggambarkan struktur data. Dengan demikian, PCA berhasil mereduksi dimensi data dari 13 variabel menjadi 7 komponen utama tanpa kehilangan informasi yang signifikan.

Komponen-komponen berikutnya hanya memberikan tambahan informasi yang relatif kecil, sehingga penggunaan tujuh komponen utama dinilai lebih efisien untuk analisis dan pemodelan selanjutnya.

Maka PCA berhasil mereduksi dimensi data dari 13 variabel menjadi 7 komponen utama dengan tetap mempertahankan sekitar 83,24% informasi asli. Dengan demikian, penggunaan 7 komponen utama dianggap cukup efisien untuk analisis lanjutan atau pembangunan model prediksi tsunami karena mampu mengurangi kompleksitas data tanpa kehilangan informasi yang signifikan.


5.3 Menentukan Jumlah Komponen Optimal

# Eigenvalue setiap komponen utama
eigenvalue <- pca_result$sdev^2
eigen_table <- data.frame(
  Komponen = paste0("PC", 1:length(eigenvalue)),
  Eigenvalue = round(eigenvalue, 4))
eigen_table
##    Komponen Eigenvalue
## 1       PC1     2.7238
## 2       PC2     2.3520
## 3       PC3     1.8801
## 4       PC4     1.2257
## 5       PC5     1.0048
## 6       PC6     0.9752
## 7       PC7     0.6594
## 8       PC8     0.6487
## 9       PC9     0.4583
## 10     PC10     0.3915
## 11     PC11     0.3477
## 12     PC12     0.2117
## 13     PC13     0.1210
# Scree Plot
plot(eigenvalue,
     type = "b",
     pch = 19,
     xlab = "Principal Component",
     ylab = "Eigenvalue",
     main = "Scree Plot PCA")
abline(h = 1, col = "red", lty = 2)

Interpretasi

Scree Plot digunakan untuk membantu menentukan jumlah komponen utama yang layak dipertahankan dalam analisis PCA. Grafik menunjukkan hubungan antara komponen utama dengan nilai eigenvalue (varians) yang mampu dijelaskan oleh masing-masing komponen.

Berdasarkan Scree Plot, terlihat penurunan eigenvalue yang cukup tajam dari PC1 hingga PC4. Setelah PC5, penurunan nilai eigenvalue menjadi lebih landai sehingga tambahan komponen berikutnya hanya memberikan informasi yang relatif kecil. Titik siku (elbow point) terlihat berada di sekitar PC4–PC5.

Berdasarkan Kaiser Criterion (eigenvalue > 1), komponen yang layak dipertahankan adalah PC1 sampai PC5, karena memiliki eigenvalue lebih besar dari 1. Sementara itu, PC6 dan seterusnya memiliki eigenvalue kurang dari 1 sehingga kontribusinya relatif lebih kecil.

Namun, jika menggunakan kriteria variansi kumulatif, diperlukan 7 komponen utama untuk menjelaskan sekitar 83,24% variasi total data. Oleh karena itu, jumlah komponen yang dipilih dapat disesuaikan dengan tujuan analisis: 5 komponen berdasarkan Kaiser Criterion atau 7 komponen berdasarkan target variansi kumulatif minimal 80%.


5.4 Loading Factor

# Loading PCA
as.data.frame(round(pca_result$rotation,3))
##                 PC1    PC2    PC3    PC4    PC5    PC6    PC7    PC8    PC9
## magnitude    -0.131  0.222 -0.479  0.217 -0.112 -0.272  0.150  0.428  0.159
## cdi          -0.030  0.489 -0.119  0.074  0.085  0.247 -0.446 -0.400  0.354
## mmi          -0.419  0.282 -0.021  0.207 -0.042 -0.053  0.025 -0.138 -0.489
## sig          -0.169  0.462 -0.305  0.003 -0.032 -0.022  0.127  0.163 -0.022
## nst          -0.387 -0.296 -0.202 -0.159 -0.083 -0.055 -0.125 -0.075  0.629
## dmin          0.414  0.132  0.173  0.285  0.024 -0.068  0.405  0.196  0.393
## gap           0.019  0.226  0.226 -0.594 -0.204 -0.057 -0.358  0.548 -0.026
## depth         0.396 -0.156 -0.440 -0.194  0.016  0.083 -0.061 -0.072 -0.171
## latitude     -0.196  0.089 -0.080 -0.382  0.403  0.598  0.486  0.092  0.037
## longitude    -0.100 -0.269 -0.044  0.465  0.341  0.368 -0.414  0.499 -0.058
## Year          0.399  0.381  0.112  0.072  0.151  0.133 -0.164  0.008  0.047
## Month         0.043 -0.040 -0.027  0.157 -0.791  0.577  0.076  0.030 -0.009
## energy_index  0.300 -0.106 -0.570 -0.126  0.023 -0.010 -0.101 -0.050 -0.151
##                PC10   PC11   PC12   PC13
## magnitude     0.420 -0.360 -0.026 -0.182
## cdi          -0.008 -0.155 -0.401 -0.057
## mmi          -0.489 -0.375  0.224 -0.093
## sig          -0.178  0.761  0.021  0.092
## nst          -0.285 -0.012  0.432 -0.033
## dmin         -0.544 -0.145 -0.140  0.023
## gap          -0.196 -0.153 -0.090  0.003
## depth        -0.229  0.062 -0.001 -0.698
## latitude      0.060 -0.181 -0.001  0.009
## longitude    -0.124  0.079 -0.039  0.001
## Year          0.191 -0.037  0.755  0.005
## Month         0.041 -0.010  0.048  0.035
## energy_index -0.166 -0.195  0.004  0.676

Interpretasi

Loading factor menunjukkan kontribusi masing-masing variabel terhadap pembentukan komponen utama. Semakin besar nilai absolut loading, semakin besar pengaruh variabel tersebut terhadap komponen yang bersangkutan.

Berdasarkan hasil PCA, komponen utama pertama (PC1) yang menjelaskan 20,95% variasi data dipengaruhi terutama oleh variabel dmin (0,414), Year (0,399), depth (0,396), nst (-0,387), dan mmi (-0,419). Hal ini menunjukkan bahwa PC1 merepresentasikan karakteristik observasi gempa yang berkaitan dengan kualitas pengamatan seismik, kedalaman gempa, serta perubahan kejadian gempa dari waktu ke waktu.

Komponen utama kedua (PC2) yang menjelaskan 18,09% variasi data didominasi oleh variabel cdi (0,489), sig (0,462), Year (0,381), dan mmi (0,282). Variabel-variabel tersebut berkaitan dengan intensitas dan signifikansi gempa, sehingga PC2 dapat diinterpretasikan sebagai komponen yang menggambarkan tingkat dampak gempa yang dirasakan.

Komponen utama ketiga (PC3) yang menjelaskan 14,46% variasi data dipengaruhi terutama oleh energy_index (-0,570), magnitude (-0,479), dan depth (-0,440). Oleh karena itu, PC3 dapat diinterpretasikan sebagai komponen yang merepresentasikan kekuatan dan energi gempa bumi.

Secara umum, hasil loading factor menunjukkan bahwa informasi dalam dataset terutama dirangkum oleh karakteristik intensitas gempa (cdi, mmi, sig), kekuatan gempa (magnitude, energy_index), kedalaman gempa (depth), serta faktor pengamatan seismik (nst, dmin).

Karena tujuh komponen utama pertama mampu menjelaskan sekitar 83,24% variasi total data, maka komponen-komponen tersebut dianggap cukup representatif untuk digunakan pada analisis dan pemodelan selanjutnya.


5.5 Visualisasi PCA (Biplot)

biplot(pca_result,
       scale = 0,
       cex = 0.6)

Interpretasi

Biplot PCA menampilkan hubungan antara observasi dan variabel pada dua komponen utama pertama (PC1 dan PC2). Berdasarkan hasil PCA, kedua komponen tersebut secara kumulatif mampu menjelaskan sekitar 39,04% variasi data (PC1 = 20,95% dan PC2 = 18,09%), sehingga cukup representatif untuk menggambarkan pola umum dalam dataset.

Beberapa informasi yang dapat diperoleh dari biplot adalah:

Variabel yang membentuk sudut kecil menunjukkan korelasi positif yang kuat. Variabel yang membentuk sudut mendekati 180° menunjukkan korelasi negatif. Variabel yang saling tegak lurus menunjukkan korelasi yang lemah atau tidak ada korelasi. Panjang vektor menunjukkan besar kontribusi variabel terhadap komponen utama.

Berdasarkan biplot, terlihat bahwa variabel cdi, sig, dan Year berada pada arah yang relatif sama pada sisi positif PC2. Hal ini menunjukkan bahwa ketiga variabel tersebut memiliki hubungan positif, sehingga observasi dengan nilai signifikansi gempa dan intensitas yang tinggi cenderung berada pada periode waktu tertentu.

Variabel nst dan mmi berada pada arah yang relatif berdekatan di sisi negatif PC1. Kondisi ini mengindikasikan adanya hubungan positif antara jumlah stasiun pengamatan seismik dan intensitas guncangan yang dirasakan.

Sementara itu, variabel dmin, depth, dan Year cenderung berada pada sisi positif PC1, menunjukkan bahwa ketiga variabel tersebut berkontribusi dalam membedakan karakteristik kejadian gempa berdasarkan lokasi, kedalaman, dan waktu kejadian.

Variabel longitude dan latitude memiliki arah vektor yang berbeda dari sebagian besar variabel lainnya. Hal ini menunjukkan bahwa aspek geografis membentuk dimensi tersendiri dalam variasi data gempa bumi.

Panjang vektor menunjukkan besarnya kontribusi variabel terhadap pembentukan komponen utama. Variabel yang memiliki vektor relatif panjang, seperti Year, nst, latitude, dan longitude, memberikan kontribusi yang lebih besar terhadap variasi data dibandingkan variabel yang memiliki vektor lebih pendek.

Selain itu, sebagian besar observasi terkonsentrasi di sekitar pusat grafik. Hal ini menunjukkan bahwa mayoritas kejadian gempa memiliki karakteristik yang relatif serupa. Namun, terdapat beberapa observasi yang berada jauh dari pusat grafik, yang mengindikasikan adanya kejadian gempa dengan karakteristik yang lebih ekstrem dibandingkan observasi lainnya.

Secara keseluruhan, biplot menunjukkan bahwa variasi data gempa bumi terutama dipengaruhi oleh karakteristik intensitas gempa, kualitas pengamatan seismik, lokasi geografis, kedalaman gempa, serta waktu kejadian. PCA berhasil merangkum informasi penting dari banyak variabel ke dalam dua dimensi utama yang lebih sederhana untuk divisualisasikan.


Kesimpulan PCA

Berdasarkan hasil PCA, diperoleh tujuh komponen utama pertama mampu menjelaskan 83,24% variasi total data. Nilai ini telah melebihi batas umum sebesar 80%, sehingga tujuh komponen utama dianggap cukup representatif untuk menggambarkan informasi yang terkandung dalam 13 variabel asli.

Meskipun kriteria Kaiser menyarankan mempertahankan lima komponen utama (eigenvalue > 1), penelitian ini menggunakan tujuh komponen utama karena mampu mempertahankan proporsi informasi yang lebih besar dengan variansi kumulatif mencapai 83,24%.

Dengan demikian, PCA berhasil mereduksi dimensi data dari 13 variabel menjadi 7 komponen utama tanpa kehilangan informasi yang signifikan, sehingga dapat meningkatkan efisiensi analisis dan pemodelan selanjutnya.