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):
- magnitude
- cdi
- mmi
- sig
- nst
- dmin
- gap
- depth
- latitude
- longitude
- Year
- 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:
- Memahami karakteristik gempa bumi yang tercatat dalam dataset.
- Mengeksplorasi pola distribusi dan hubungan antar variabel melalui Exploratory Data Analysis (EDA).
- Mengidentifikasi variabel yang memiliki pengaruh besar terhadap potensi tsunami.
- 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.
2. Exploratory Data Analysis (EDA).
2.1 Statistik Deskriptif,
## 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
## 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) ---"
## 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
## 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)
## 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
## 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
## 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) ---
## Variabel yang dieliminasi karena redundan:
## 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
## 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) ---
## Fitur yang DIPILIH (Koefisien != 0): (Intercept), cdi, mmi, sig, nst, dmin, gap, depth, latitude, longitude, Year, Month, tsunami, energy_index
## 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
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
## 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)
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.