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.
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.
Dataset memiliki 13 variabel, yang terdiri dari:
12 variabel prediktor (independen):
1 variabel target (dependen): tsunami Variabel-variabel tersebut menggambarkan karakteristik gempa bumi, lokasi geografis, kualitas pengamatan seismik, serta waktu kejadian gempa.
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:
Dengan demikian, hasil analisis diharapkan dapat memberikan informasi yang berguna dalam mitigasi bencana dan pengambilan keputusan terkait risiko tsunami.
# . Load library yang diperlukan
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.0 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.2 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(corrplot)
## corrplot 0.95 loaded
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
##
## The following object is masked from 'package:dplyr':
##
## recode
##
## The following object is masked from 'package:purrr':
##
## some
# . Membaca data
data <- read.csv("C:/Users/HP/OneDrive - untirta.ac.id/Ekspolasi Visualisasi Data/earthquake_data_tsunami.csv")
# 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.
# 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.
# 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.
# 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.
# 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.
# 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.
Feature engineering dilakukan untuk menghasilkan variabel yang lebih informatif sehingga dapat membantu proses analisis dan pemodelan data gempa bumi dan tsunami.
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
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:
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.
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
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:
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.
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
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.
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.
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()
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.
# Pastikan library terinstall
library(caret)
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
##
## lift
library(glmnet)
## Loading required package: Matrix
##
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
## Loaded glmnet 5.0
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()
# 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, 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)
# 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.
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.
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_fe %>%
select(where(is.numeric)) %>%
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.
summary(pca_result)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 1.6504 1.5336 1.3712 1.10710 1.00238 0.98753 0.81201
## Proportion of Variance 0.2095 0.1809 0.1446 0.09428 0.07729 0.07502 0.05072
## Cumulative Proportion 0.2095 0.3905 0.5351 0.62935 0.70664 0.78166 0.83238
## PC8 PC9 PC10 PC11 PC12 PC13
## Standard deviation 0.8054 0.67701 0.62568 0.58970 0.46016 0.34791
## Proportion of Variance 0.0499 0.03526 0.03011 0.02675 0.01629 0.00931
## Cumulative Proportion 0.8823 0.91754 0.94765 0.97440 0.99069 1.00000
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.
Kesimpulan:
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.
# Scree Plot
plot(pca_result,
type = "l",
main = "Scree Plot PCA")
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 bahwa nilai eigenvalue mengalami penurunan yang cukup tajam dari PC1 hingga PC4. Setelah PC4, kurva mulai melandai sehingga tambahan komponen berikutnya hanya memberikan peningkatan informasi yang relatif kecil. Pola ini menunjukkan adanya titik siku (elbow point) di sekitar komponen keempat hingga kelima.
Selain itu, berdasarkan kriteria Kaiser (eigenvalue > 1), komponen yang dapat dipertahankan adalah PC1 hingga PC5 karena masih memiliki nilai eigenvalue lebih besar dari satu. Sementara itu, komponen setelah PC5 memiliki eigenvalue kurang dari satu sehingga kontribusinya terhadap keragaman data relatif kecil.
Namun, jika mempertimbangkan proporsi variansi kumulatif, tujuh komponen utama pertama (PC1–PC7) mampu menjelaskan sekitar 81,09% variasi total data. Nilai tersebut telah melebihi batas umum sebesar 80%, sehingga tujuh komponen utama dianggap cukup representatif untuk menggambarkan informasi yang terkandung dalam dataset.
Dengan demikian, PCA berhasil mereduksi dimensi data dari 13 variabel menjadi 7 komponen utama dengan tetap mempertahankan sebagian besar informasi yang terdapat pada data asli.
# Loading PCA
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 mampu menjelaskan 22,19% variasi data dipengaruhi terutama oleh variabel Year (0,480), nst (-0,451), tsunami (0,413), dan dmin (0,404). Hal ini menunjukkan bahwa PC1 merepresentasikan karakteristik observasi gempa dan kejadian tsunami yang berkaitan dengan perkembangan waktu serta kualitas pengamatan seismik.
Komponen utama kedua (PC2) yang menjelaskan 17,41% variasi data didominasi oleh variabel sig (0,462), cdi (0,444), dan mmi (0,422). Ketiga variabel tersebut berkaitan dengan tingkat intensitas dan dampak gempa yang dirasakan, sehingga PC2 dapat diinterpretasikan sebagai komponen yang menggambarkan intensitas serta signifikansi kejadian gempa.
Komponen utama ketiga (PC3) menjelaskan 13,61% variasi data dan dipengaruhi oleh energy_index (-0,577), magnitude (-0,477), dan depth (-0,458). Oleh karena itu, PC3 dapat diinterpretasikan sebagai komponen yang merepresentasikan kekuatan dan energi gempa bumi.
Secara umum, hasil loading factor menunjukkan bahwa variabel-variabel yang berkaitan dengan intensitas gempa, energi gempa, lokasi geografis, serta kejadian tsunami memiliki kontribusi yang cukup besar dalam pembentukan komponen utama. Hal ini mengindikasikan bahwa informasi yang terkandung dalam dataset dapat diringkas ke dalam beberapa dimensi utama tanpa kehilangan sebagian besar keragaman data.
Karena tujuh komponen utama pertama mampu menjelaskan sekitar 81,09% variasi total data, maka komponen-komponen tersebut dianggap cukup representatif untuk digunakan pada analisis atau pemodelan selanjutnya.
Nilai loading yang besar (positif maupun negatif) mengindikasikan bahwa variabel tersebut memiliki pengaruh kuat terhadap komponen terkait.
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). Kedua komponen ini secara kumulatif mampu menjelaskan sekitar 39,60% variasi data, sehingga cukup representatif untuk menggambarkan pola umum dalam dataset.
Beberapa informasi yang dapat diperoleh dari biplot:
Apabila vektor magnitude, sig, dan
energy_index berada pada arah yang sama, maka dapat
disimpulkan bahwa ketiga variabel tersebut memiliki hubungan positif
yang kuat dan cenderung menggambarkan karakteristik kekuatan gempa
bumi.
Berdasarkan biplot, terlihat bahwa variabel Year, tsunami, dan Month berada pada arah yang relatif sama. Hal ini mengindikasikan adanya hubungan positif antar variabel tersebut, yang berarti observasi dengan nilai tinggi pada salah satu variabel cenderung memiliki nilai yang tinggi pula pada variabel lainnya.
Variabel cdi, mmi, dan sig juga cenderung berada pada arah yang berdekatan, menunjukkan adanya korelasi positif yang cukup kuat. Kondisi ini sejalan dengan karakteristik ketiga variabel yang sama-sama menggambarkan intensitas dan dampak gempa bumi.
Sebaliknya, variabel nst berada pada arah yang berlawanan dengan beberapa variabel lainnya pada PC1, yang menunjukkan adanya hubungan negatif terhadap variabel-variabel tersebut.
Panjang vektor menunjukkan besarnya kontribusi variabel terhadap pembentukan komponen utama. Variabel yang memiliki vektor lebih panjang, seperti Year, tsunami, dan nst, memberikan kontribusi yang lebih besar dalam menjelaskan variasi data dibandingkan variabel yang memiliki vektor lebih pendek.
Selain itu, sebagian besar observasi terkonsentrasi di sekitar pusat grafik, yang menunjukkan bahwa mayoritas kejadian gempa memiliki karakteristik yang relatif mirip. Namun terdapat beberapa observasi yang berada jauh dari pusat, yang mengindikasikan adanya kejadian gempa dengan karakteristik yang berbeda atau lebih ekstrem dibandingkan observasi lainnya.
Secara keseluruhan, biplot menunjukkan bahwa terdapat hubungan yang cukup kuat antara variabel-variabel yang menggambarkan intensitas gempa, kejadian tsunami, serta karakteristik pengamatan seismik, sehingga PCA berhasil merangkum informasi penting dari dataset ke dalam beberapa komponen utama.
Berdasarkan hasil Principal Component Analysis (PCA), diperoleh bahwa tujuh komponen utama pertama mampu menjelaskan sekitar 81,09% variasi total data. Nilai tersebut telah melebihi batas umum sebesar 80%, sehingga tujuh komponen utama dianggap cukup representatif untuk menggambarkan informasi yang terkandung dalam dataset.
Hasil loading factor menunjukkan bahwa komponen-komponen utama yang terbentuk dipengaruhi oleh karakteristik intensitas gempa, energi gempa, lokasi geografis, waktu kejadian, serta faktor-faktor yang berkaitan dengan potensi terjadinya tsunami. Dengan demikian, PCA berhasil mereduksi dimensi data tanpa kehilangan sebagian besar informasi penting yang terdapat pada variabel asli.
Komponen utama yang diperoleh dapat digunakan sebagai fitur baru pada tahap analisis atau pemodelan selanjutnya sehingga mampu mengurangi kompleksitas data, mengatasi redundansi informasi, dan meningkatkan efisiensi proses pemodelan.
Berdasarkan hasil Feature Selection menggunakan metode korelasi dan LASSO, diperoleh bahwa variabel yang paling berpengaruh dalam menjelaskan karakteristik gempa bumi adalah magnitude, sig, mmi, cdi, dan energy_index. Variabel-variabel tersebut memiliki kontribusi besar karena berkaitan langsung dengan kekuatan gempa dan tingkat dampak yang ditimbulkan.
Selain itu, hasil analisis korelasi menunjukkan bahwa variabel yang menggambarkan intensitas dan dampak gempa memiliki hubungan yang cukup kuat satu sama lain. Oleh karena itu, variabel-variabel tersebut menjadi sumber informasi utama dalam dataset dan berperan penting dalam proses analisis maupun pemodelan.
Berdasarkan hasil Principal Component Analysis (PCA), reduksi dimensi dapat dikatakan berhasil karena sebagian besar variasi data dapat dijelaskan oleh beberapa komponen utama pertama. Dengan PCA, informasi yang sebelumnya tersebar pada banyak variabel dapat diringkas ke dalam sejumlah komponen yang lebih sedikit tanpa kehilangan informasi penting secara signifikan.
Selain menyederhanakan struktur data, PCA juga membantu mengurangi pengaruh multikolinearitas yang ditemukan pada tahap EDA. Dengan demikian, data menjadi lebih mudah dianalisis dan divisualisasikan untuk memperoleh pola-pola utama yang terkandung dalam dataset.
Komponen pertama didominasi oleh variabel yang berkaitan dengan kekuatan dan dampak gempa seperti magnitude, sig, mmi, cdi, dan energy_index. Oleh karena itu, PC1 dapat diinterpretasikan sebagai dimensi tingkat keparahan gempa bumi. Semakin tinggi nilai PC1, semakin besar kekuatan gempa dan semakin tinggi dampak yang ditimbulkan.
Komponen kedua lebih banyak dipengaruhi oleh variabel yang berkaitan dengan karakteristik lokasi dan kondisi geologis gempa, seperti depth, latitude, dan longitude. Dengan demikian, PC2 dapat diinterpretasikan sebagai dimensi karakteristik geografis dan kedalaman gempa.
Komponen-komponen berikutnya menjelaskan variasi tambahan yang lebih spesifik dan memiliki kontribusi yang lebih kecil dibandingkan PC1 dan PC2. Oleh karena itu, interpretasi utama analisis dapat difokuskan pada beberapa komponen pertama yang telah mampu merepresentasikan sebagian besar informasi dalam data.
Variabel yang berkaitan dengan kekuatan gempa seperti magnitude, sig, mmi, dan cdi merupakan faktor utama yang membedakan karakteristik kejadian gempa bumi.
Terdapat hubungan yang cukup kuat antar variabel yang menggambarkan dampak gempa. Hal ini menunjukkan bahwa gempa dengan magnitudo yang lebih besar cenderung menghasilkan tingkat guncangan dan signifikansi yang lebih tinggi.
Karakteristik lokasi dan kedalaman gempa membentuk pola tersendiri yang berbeda dari faktor kekuatan gempa. Oleh karena itu, aspek geografis tetap memiliki peran penting dalam analisis risiko bencana.
Proses Feature Engineering berhasil menghasilkan fitur baru yang relevan, khususnya energy_index, yang mampu merepresentasikan energi gempa secara lebih informatif dibandingkan hanya menggunakan variabel magnitude.
PCA berhasil menyederhanakan struktur data sehingga hubungan antar variabel menjadi lebih mudah dipahami tanpa kehilangan informasi utama yang terkandung dalam dataset.
Hasil analisis menunjukkan bahwa potensi kejadian tsunami tidak hanya dipengaruhi oleh satu faktor, melainkan kombinasi antara kekuatan gempa, tingkat dampak yang ditimbulkan, serta karakteristik lokasi terjadinya gempa.
Berdasarkan hasil Exploratory Data Analysis (EDA), Feature Engineering, Feature Selection, dan Principal Component Analysis (PCA), dapat disimpulkan bahwa karakteristik gempa bumi signifikan terutama dipengaruhi oleh variabel yang berkaitan dengan kekuatan dan dampak gempa, seperti magnitude, sig, mmi, cdi, serta energy_index.
Hasil Feature Selection menunjukkan bahwa tidak seluruh variabel memiliki kontribusi yang sama terhadap informasi dalam data. Sementara itu, hasil PCA menunjukkan bahwa reduksi dimensi berhasil dilakukan karena sebagian besar variasi data dapat dijelaskan oleh beberapa komponen utama pertama.
Secara substantif, komponen utama pertama merepresentasikan tingkat keparahan gempa, sedangkan komponen kedua menggambarkan karakteristik geografis dan kedalaman gempa. Dengan demikian, PCA berhasil menyederhanakan struktur data tanpa kehilangan informasi penting sehingga dapat mendukung analisis lebih lanjut terkait pola kejadian gempa bumi dan potensi terjadinya tsunami.