Kalibrasi Data GPM dengan Data BMKG

1

Latar Belakang

Masalah Utama

GPM IMERG adalah produk curah hujan satelit presisi tinggi dari NASA dengan resolusi 0.1° × 0.1° dan temporal 30 menit. Namun dalam analisis hidrologi — khususnya untuk menentukan Hujan Harian Maksimum Tahunan (HHMT) sebagai input desain bangunan air — data mentah (raw) GPM sering menunjukkan bias sistematis negatif yang signifikan dibandingkan observasi BMKG di lapangan.

⚠️ GPM Raw — Masalah

PBIAS = −31.9% artinya GPM Raw secara rata-rata meremehkan curah hujan sebesar hampir sepertiga dari nilai sesungguhnya. NSE = −1.06 menunjukkan model bahkan lebih buruk dari sekedar menggunakan nilai rata-rata — tidak layak digunakan langsung untuk desain hidrologi.

✅ GPM M4 — Solusi

Setelah kalibrasi dengan metode Year-Specific Scaling Factor (M4), PBIAS turun menjadi +3.5% — hampir tidak ada bias. NSE meningkat ke 0.77 dan KGE ke 0.88, keduanya masuk kategori Sangat Baik menurut SNI 2415:2016.

PBIAS
−31.9%
↓ 91%
+3.5%
Threshold: <10%
NSE
−1.062
↑ 172%
0.772
Threshold: ≥0.75
KGE
0.206
↑ 326%
0.879
Threshold: ≥0.75
RMSE
47.4 mm
↓ 67%
15.8 mm
Semakin kecil
🎯Kalibrasi dengan metode M4 berhasil mengubah data GPM yang tidak layak pakai menjadi data yang masuk kategori Sangat Baik (SB) untuk semua metrik validasi menurut Moriasi et al. (2007) dan SNI 2415:2016.
2

Data & Wilayah Studi

🛰️ Piksel GPM B4 — Titik Referensi

Analisis berfokus pada satu piksel GPM IMERG V07 yang merepresentasikan wilayah Kota Banjarmasin, yang selanjutnya disebut Piksel B4.

Koordinat Piksel B4

114.60°E, 3.30°S

Bounding Box: 114.487–114.687°E, 3.197–3.397°S

Produk GPM

GPM IMERG V07 Final Run (NASA Giovanni)
Resolusi: 0.1° × 0.1° · Temporal: Daily
Variabel: Presipitasi harian (mm)

🌧️ Stasiun Observasi BMKG (Ground Truth)
Stasiun SY — Syamsuddin Noor

Lokasi: Banjarmasin, Kalimantan Selatan
Piksel GPM-nya: 114.80°E, 3.40°S
Periode: 1998–2025 (28 tahun)
Catatan: Tahun 2010 data = 0 mm (tidak valid, hanya BMKG Kalsel yang digunakan)

Stasiun KS — BMKG Kalsel (Banjarbaru)

Lokasi: Banjarbaru, Kalimantan Selatan
Piksel GPM-nya: 114.85°E, 3.45°S
Periode: 1998–2025 (28 tahun)
Catatan: Digunakan sebagai data pembanding & pengisi ketika SY tidak tersedia

📊 Tabel Data Lengkap — HHMT 1998–2025
TahunGPM Raw (mm)Fk M4GPM M4 (mm)Obs BMKG (mm)Error Raw (mm)Error M4 (mm)
ℹ️HHMT = Hujan Harian Maksimum Tahunan. Error = GPM − Obs BMKG. Nilai negatif berarti GPM meremehkan observasi. Tahun 2010: data BMKG SY = 0 mm (tidak valid), Fk dihitung dari stasiun KS saja.
3

Metode Koreksi Bias M4

Terdapat beberapa metode koreksi bias yang umum digunakan dalam hidrologi berbasis data satelit. Analisis ini membandingkan empat metode (M1–M4) dan memilih M4: Year-Specific Scaling Factor sebagai yang terbaik.

Perbandingan 4 Metode Koreksi Bias
MetodePrinsipKeunggulanKeterbatasanStatus
M1 — CF BulananGPM × faktor koreksi per bulan HHMTMempertimbangkan musimCF dihitung hanya dari 1 stasiunCukup Baik
M2 — Direct ScalingGPM × (rerata Obs / rerata GPM) globalSangat sederhanaSatu faktor untuk semua tahunCukup Baik
M3 — Quantile MappingRank-to-rank GPM vs Obs (CDF matching)Koreksi distribusi penuhButuh data lebih banyak; asumsi stasionerBaik
M4 — Year-Specific ✅GPM × Fk per tahun dari semua stasiun tersediaFk unik tiap tahun, multi-stasiunButuh data BMKG per tahun🏆 Terbaik
Formula Inti — Metode M4
Langkah 1: Faktor Koreksi per Stasiun per Tahun Fk_SY = HHMT_Ground_SY / HHMT_GPM_B4
Langkah 2: Fk Akhir = Rata-rata dari semua stasiun tersedia Fk = mean(Fk_SY, Fk_KS) Jika hanya satu stasiun tersedia (mis. 2010): Fk = Fk dari stasiun yang ada
Langkah 3: GPM Terkoreksi GPM_M4 = GPM_Raw_B4 × Fk Hasil: HHMT tahunan yang sudah dikalibrasi terhadap observasi BMKG
Alur Kerja M4 Step-by-Step
Ekstrak HHMT GPM Raw dari Piksel B4
Download data harian GPM IMERG V07 dari NASA Giovanni untuk piksel 114.60°E, 3.30°S. Ekstrak nilai HHMT (nilai maksimum harian dalam setahun) untuk setiap tahun 1998–2025.
Ekstrak HHMT Ground Truth dari BMKG
Ambil data harian dari dua stasiun BMKG: Syamsuddin Noor (SY) dan BMKG Kalsel/Banjarbaru (KS). Hitung HHMT per tahun dari masing-masing stasiun.
Hitung Faktor Koreksi Fk per Tahun
Fk_SY = Gnd_SY / GPM_B4; Fk_KS = Gnd_KS / GPM_B4. Fk final = rata-rata dari stasiun yang tersedia. Jika data SY tidak valid (tahun 2010: Gnd_SY = 0 mm), gunakan Fk_KS saja.
Terapkan Fk ke GPM Raw
GPM_M4 = GPM_Raw × Fk. Setiap tahun mendapatkan faktor koreksi yang berbeda — ini yang membuat M4 lebih akurat dibandingkan M2 (satu faktor global).
Validasi dengan Metrik Goodness-of-Fit
Hitung R, NSE, KGE, PBIAS, RMSE, MAE untuk membandingkan GPM M4 vs Obs BMKG. Bandingkan dengan threshold SNI 2415:2016 kategori Sangat Baik (SB): NSE ≥ 0.75, KGE ≥ 0.75, |PBIAS| < 10%.
⚠️Metode M4 bersifat year-specific — artinya Fk dikalibrasi untuk periode historis yang sudah ada data BMKG-nya. Untuk proyeksi masa depan, perlu diasumsikan Fk konstan (nilai median atau rata-rata historis) karena tidak ada data ground truth masa depan.
4

Hasil Visualisasi

📈 Panel 1 — Time Series HHMT Tahunan
Time series HHMT tahunan GPM Raw vs GPM M4 vs Observasi BMKG 1998-2025
Time series HHMT tahunan: GPM Raw (merah solid) vs GPM M4 (navy solid) vs Observasi BMKG (oranye dashed). Label kotak menunjukkan nilai puncak tahun 2021 = 252.2 mm.
Interpretasi Time Series

GPM Raw secara konsisten berada di bawah observasi BMKG sepanjang 28 tahun — mencerminkan bias negatif yang sistematis. Setelah kalibrasi M4, GPM M4 (garis navy) mengikuti pola observasi BMKG dengan sangat baik, termasuk menangkap puncak ekstrem tahun 2021 (252.2 mm) yang berkorelasi dengan banjir besar Banjarmasin Januari 2021.

📊 Panel 2 — Bar Chart Perbandingan Tahunan
Bar chart perbandingan HHMT tahunan GPM Raw vs GPM M4 vs Observasi BMKG 1998-2025
Bar chart dengan 3 seri per tahun: GPM Raw (merah), GPM M4 (navy), Obs BMKG (oranye). Terlihat GPM M4 jauh lebih mendekati bar oranye dibanding GPM Raw.
Residual Error per Tahun (GPM − Obs BMKG)
Zona hijau = ±10 mm (toleransi ideal) · GPM M4 hampir selalu di dalam zona hijau
Error GPM Raw
Error GPM M4
Zona ±10 mm
🔵 Panel 3 — Scatter Plot: GPM Raw vs GPM M4 terhadap Observasi BMKG
Scatter plot GPM Raw vs Obs BMKG dan GPM M4 vs Obs BMKG
Kiri: Scatter GPM Raw vs Obs BMKG — titik tersebar jauh dari garis 1:1 (R=0.373). Kanan: Scatter GPM M4 vs Obs BMKG — titik mengikuti garis 1:1 dengan rapat (R=0.900).
🎯Garis putus-putus abu-abu pada scatter plot adalah garis 1:1 (perfect fit). Semakin dekat titik ke garis ini, semakin baik kalibrasi. GPM M4 (kanan) menunjukkan sebaran yang sangat rapat di sekitar garis 1:1 dengan CI band yang sempit — bukti kalibrasi yang sangat berhasil.
5

Metrik Validasi Statistik

Perbandingan Metrik Goodness-of-Fit — GPM Raw vs GPM M4
Threshold Sangat Baik (SNI 2415:2016 / Moriasi et al. 2007) ditampilkan sebagai garis putus-putus
MetrikGPM Raw (M0)GPM M4Threshold SBStatus M4
R (Korelasi Pearson)0.3730.900≥ 0.75✅ SB
R² (Koef. Determinasi)0.1390.811≥ 0.75✅ SB
NSE (Nash-Sutcliffe Eff.)−1.0620.772≥ 0.75✅ SB
KGE (Kling-Gupta Eff.)0.2060.879≥ 0.75✅ SB
PBIAS (%)−31.9%+3.5%|PBIAS| < 10%✅ SB
RMSE (mm)47.44 mm15.79 mmMin (↓)✅ −67%
MAE (mm)38.72 mm11.14 mmMin (↓)✅ −71%
Tentang NSE (Nash-Sutcliffe Efficiency)

NSE = 1 adalah sempurna. NSE = 0 berarti model sama akuratnya dengan rata-rata observasi. NSE < 0 berarti model lebih buruk dari rata-rata. GPM Raw dengan NSE = −1.06 sangat tidak layak. GPM M4 dengan NSE = 0.77 masuk kategori Sangat Baik.

Tentang KGE (Kling-Gupta Efficiency)

KGE menggabungkan korelasi, bias, dan variabilitas dalam satu metrik. KGE ≥ 0.75 = Sangat Baik. KGE GPM M4 = 0.879 menunjukkan keseimbangan yang baik antara tiga komponen tersebut — model tidak hanya berkorelasi tinggi, tapi juga reproduksi variabilitasnya bagus.

6

Distribusi Faktor Koreksi (Fk)

Faktor Koreksi Fk per Tahun (Year-Specific Scaling Factor)
Fk = mean(Gnd_SY/GPM_B4, Gnd_KS/GPM_B4) · Garis putus-putus = Median Fk · Garis titik-titik = Fk=1.0 (tidak ada koreksi)
Fk per tahun
 Median Fk
 Fk = 1.0
Median Fk

1.402

GPM secara rata-rata meremehkan observasi sebesar ~40%. Fk > 1 artinya observasi lebih tinggi dari GPM.

Rentang Fk

Min: 0.842 (2011) — tahun saat GPM justru lebih tinggi
Max: 2.466 (2014) — GPM sangat meremehkan
StDev: ±0.37 (variasi antar tahun tinggi)

Implikasi Fk Tinggi

Tahun dengan Fk > 2.0 (2014, 2020, 2021, 2022, 2023) adalah tahun-tahun dengan curah hujan ekstrem tinggi di Banjarmasin — satelit GPM secara struktural kesulitan menangkap puncak intensitas.

⚠️Variabilitas Fk yang tinggi antar tahun (0.84 – 2.47) menunjukkan bahwa metode koreksi bias tunggal (M2) tidak cukup — justru inilah alasan utama M4 unggul: setiap tahun mendapat koreksi yang sesuai kondisinya.
7

Kode R — Reproduksi Analisis

Seluruh analisis dikerjakan menggunakan R dengan package ggplot2, patchwork, readxl, dan dplyr. Kode di bawah dapat langsung dijalankan dengan file Excel yang disediakan.

R · Setup & Import Data
library(ggplot2); library(readxl); library(patchwork)
library(scales);  library(dplyr);   library(tidyr)
library(ggrepel)   # label titik scatter plot

# ── Baca data utama dari Excel ───────────────────────────────
xl  <- "Input_Plot_GPM_NoWMO.xlsx"
df  <- read_excel(xl, sheet = "DATA_UTAMA", skip = 3)
met <- read_excel(xl, sheet = "METRIK_VALIDASI", skip = 3)

# ── Bersihkan nama kolom & konversi tipe data ────────────────
df <- df |>
  rename(raw = `GPM_Raw
(mm)`, m4 = `M4_Baru
(mm)`,
         obs = `Obs_BMKG
(mm)`, fk = `Fk_Baru
(rata²)`) |>
  filter(!is.na(Tahun)) |>
  mutate(across(c(Tahun, raw, m4, obs, fk), as.numeric),
         tahun = as.integer(Tahun),
         err_raw = raw - obs,
         err_m4  = m4  - obs)
R · Hitung Faktor Koreksi Fk & Terapkan ke GPM
# ── Data referensi: HHMT dari stasiun BMKG & piksel GPM ─────
# Asumsi: df sudah memiliki kolom gnd_sy, gnd_ks, gpm_b4

df <- df |>
  mutate(
    # Fk per stasiun = BMKG / GPM_B4 (untuk setiap tahun)
    fk_sy = gnd_sy / gpm_b4,
    fk_ks = gnd_ks / gpm_b4,

    # Fk final = rata-rata stasiun yang tersedia
    # Jika salah satu NA (mis. 2010: gnd_sy = 0), gunakan yang ada
    fk_m4 = case_when(
      is.na(fk_sy) | gnd_sy == 0 ~ fk_ks,
      is.na(fk_ks)             ~ fk_sy,
      .default                 ~ mean(c(fk_sy, fk_ks))
    ),

    # Terapkan Fk ke GPM Raw piksel B4
    gpm_m4 = gpm_b4 * fk_m4
  )

# ── Ringkasan statistik ──────────────────────────────────────
cat("Median Fk:", round(median(df$fk_m4, na.rm = TRUE), 3), "
")
cat("Rentang:", round(min(df$fk_m4), 3), "–",
                round(max(df$fk_m4), 3), "
")
R · Hitung Metrik Validasi
# ── Fungsi hitung metrik validasi ───────────────────────────
hitung_metrik <- function(sim, obs) {
  n     <- length(sim)
  bias  <- sim - obs
  R_val <- cor(obs, sim)
  NSE   <- 1 - sum(bias^2) / sum((obs - mean(obs))^2)
  KGE   <- 1 - sqrt((R_val-1)^2 +
                        (sd(sim)/sd(obs)-1)^2 +
                        (mean(sim)/mean(obs)-1)^2)
  PBIAS <- sum(bias) / sum(obs) * 100
  RMSE  <- sqrt(mean(bias^2))
  MAE   <- mean(abs(bias))
  data.frame(R=R_val, NSE=NSE, KGE=KGE, PBIAS=PBIAS, RMSE=RMSE, MAE=MAE)
}

# ── Bandingkan M0 (Raw) vs M4 ────────────────────────────────
metrik_raw <- hitung_metrik(df$raw, df$obs)
metrik_m4  <- hitung_metrik(df$m4,  df$obs)

bind_rows(
  mutate(metrik_raw, Metode = "GPM Raw"),
  mutate(metrik_m4,  Metode = "GPM M4")
) |> select(Metode, R, NSE, KGE, PBIAS, RMSE, MAE)
R · Time Series Plot (Panel 1)
# ── Reshape ke long format untuk ggplot ──────────────────────
df_long <- df |>
  select(tahun, raw, m4, obs) |>
  pivot_longer(c(raw, m4, obs), names_to = "seri", values_to = "hhmt") |>
  mutate(seri = factor(seri,
    levels = c("obs", "m4", "raw"),
    labels = c("Obs BMKG", "GPM M4 (Koreksi)", "GPM Raw")))

p1 <- ggplot(df_long, aes(x = tahun, y = hhmt,
       color = seri, linetype = seri, linewidth = seri)) +
  geom_line(na.rm = TRUE) +
  geom_point(data = . |> filter(seri == "Obs BMKG"),
             size = 1.8, shape = 21) +
  geom_label(data = df |> filter(m4 > 200),
             aes(x = tahun, y = m4 + 8,
                 label = paste0(tahun, "
", m4, "mm")),
             inherit.aes = FALSE, size = 2.8, color = "#1A5276") +
  scale_color_manual(
    values = c("Obs BMKG"="#B45309", "GPM M4 (Koreksi)"="#1A5276",
               "GPM Raw"="#B91C1C"), name = NULL) +
  scale_linetype_manual(
    values = c("Obs BMKG"="dashed", "GPM M4 (Koreksi)"="solid",
               "GPM Raw"="solid"), name = NULL) +
  scale_y_continuous(
    limits = c(0, 280),
    labels = function(x) paste0(x, " mm")) +
  labs(
    title    = "Time Series HHMT Tahunan",
    subtitle = "GPM Raw vs GPM M4 vs Observasi BMKG | 1998–2025",
    x = NULL, y = "HHMT (mm)",
    caption  = "Sumber: GPM IMERG V07 (NASA) | BMKG Syamsuddin Noor + BMKG Kalsel"
  ) +
  theme_minimal(base_size = 11) +
  theme(plot.title = element_text(face = "bold"))

# ── Scatter Plot: M4 vs Obs ───────────────────────────────────
p_scatter <- ggplot(df, aes(x = obs, y = m4)) +
  geom_abline(slope = 1, intercept = 0,
              linetype = "dashed", color = "#94A3B8") +
  geom_point(color = "#1A5276", size = 3, shape = 21) +
  ggrepel::geom_text_repel(aes(label = tahun),
              size = 2.5, color = "#475569") +
  geom_smooth(method = "lm", se = TRUE,
              color = "#1A5276", fill = "#1A527622") +
  coord_equal() +
  labs(title = "Scatter: GPM M4 vs Obs BMKG",
       x = "Observasi BMKG (mm)", y = "GPM M4 (mm)")

# ── Gabung & simpan ──────────────────────────────────────────
fig_final <- p1 / p_scatter +
  plot_annotation(
    title   = "Koreksi Bias GPM IMERG V07 — WPG Banjarmasin",
    caption = "SNI 2415:2016 | Teutschbein & Seibert (2012)")

ggsave("hasil_kalibrasi_gpm.png", fig_final,
       width = 36, height = 30, units = "cm", dpi = 300)
8

Kesimpulan

Ringkasan Hasil
GPM Raw tidak layak digunakan langsung
PBIAS = −31.9% dan NSE = −1.06 mengonfirmasi bahwa data mentah GPM IMERG secara sistematis meremehkan HHMT di wilayah Banjarmasin sebesar ~32% — tidak memenuhi threshold SNI 2415:2016 untuk analisis hidrologi desain.
Metode M4 (Year-Specific Scaling) adalah yang terbaik
Dibandingkan M1 (CF bulanan), M2 (direct scaling), dan M3 (quantile mapping), metode M4 menghasilkan metrik terbaik karena Fk dikalibrasi unik per tahun dari rata-rata dua stasiun BMKG — menangkap variabilitas antar tahun yang signifikan.
Semua metrik validasi masuk kategori Sangat Baik
Setelah kalibrasi M4: R=0.900, NSE=0.772, KGE=0.879, PBIAS=+3.5%, RMSE=15.8 mm. Semua nilai melampaui threshold Sangat Baik (SB) menurut Moriasi et al. (2007) dan SNI 2415:2016.
Aplikasi praktis: data GPM M4 layak untuk analisis frekuensi
Dengan kualitas data yang sudah masuk SB, GPM M4 dapat digunakan sebagai data curah hujan dalam analisis frekuensi (menghitung return period 25, 50, 100 tahun) untuk desain bangunan air di wilayah yang tidak memiliki stasiun observasi.
Referensi Utama

📚 Moriasi et al. (2007) — Model Evaluation Guidelines
📚 Teutschbein & Seibert (2012) — Bias Correction Methods
📚 Knoben et al. (2019) — KGE Commentary
📚 SNI 2415:2016 — Tata Cara Perhitungan Debit Banjir Rencana
🛰️ NASA GPM IMERG V07 Final Run
🌧️ BMKG Stasiun Syamsuddin Noor & BMKG Kalsel

Keterbatasan & Pengembangan

⚠️ Fk bersifat historis — proyeksi masa depan asumsi Fk = median
⚠️ Hanya 2 stasiun BMKG — wilayah DAS besar butuh lebih banyak
⚠️ Koreksi bias pada level HHMT — bukan distribusi harian penuh
🔭 Pengembangan: uji pada stasiun lain & periode lebih panjang
🔭 Kombinasikan M4 dengan M3 (Quantile Mapping) untuk distribusi

Ada pertanyaan tentang kalibrasi data GPM?

Diskusi metodologi, data, atau implementasi di proyekmu

Hubungi saya →

Related