1 PENDAHULUAN

1.1 Latar Belakang

Data klimatologis memiliki karakteristik yang kompleks dan dinamis, dengan hubungan antara variabel respon dan variabel prediktor yang sering kali bersifat nonlinier serta berubah seiring waktu. Pada data deret waktu dengan periode pengamatan yang panjang, pola fluktuasi dan pengaruh temporal sering kali tidak dapat dijelaskan secara memadai menggunakan pendekatan regresi parametrik klasik.

Pendekatan regresi linear berganda mengharuskan adanya asumsi bentuk hubungan yang tetap dan sederhana antara variabel respon dan prediktor. Dalam praktiknya, asumsi tersebut sering kali tidak terpenuhi pada data klimatologis, sehingga model parametrik murni cenderung menghasilkan estimasi yang kurang optimal.

Regresi semiparametrik merupakan pendekatan yang mengombinasikan komponen parametrik dan nonparametrik dalam satu model. Pendekatan ini memungkinkan pemodelan hubungan linear pada sebagian variabel, serta hubungan nonlinier pada variabel lain secara fleksibel. Salah satu metode nonparametrik yang banyak digunakan adalah local kernel smoothing dengan local linear estimator karena kemampuannya dalam mengikuti pola lokal data dan mengurangi bias estimasi, terutama pada daerah batas.

Dalam konteks klimatologi di Kota Langsa, Provinsi Aceh, pemodelan hubungan antara kelembapan udara (RH2M) dan faktor-faktor klimatologis lainnya menjadi penting mengingat pernah terjadinya kejadian hujan lebat yang berdampak pada banjir. Oleh karena itu, penelitian ini menerapkan regresi semiparametrik dengan metode local kernel smoothing dan local linear estimator untuk memperoleh model yang lebih fleksibel dan akurat.

1.2 Rumusan Masalah

  1. Bagaimana kinerja model regresi parametrik dalam memodelkan RH2M?

  2. Bagaimana estimasi komponen nonparametrik berbasis waktu menggunakan local kernel smoothing?

  3. Apakah regresi semiparametrik lebih baik dibanding model parametrik murni?

1.3 Tujuan Penelitian

Menerapkan dan mengevaluasi model regresi semiparametrik pada data klimatologis RH2M serta membandingkannya dengan model regresi parametrik.

2 TINJAUAN PUSTAKA

2.1 Regresi Parametrik

Regresi parametrik merupakan metode pemodelan statistik yang mengasumsikan bentuk hubungan tertentu antara variabel respon dan variabel prediktor. Salah satu metode yang paling umum digunakan adalah regresi linear berganda yang dirumuskan sebagai:

\[Y_i = \beta_0 + \beta_1 X_{2i} + \beta_2 X_{3i} + \beta_3 X_{4i} + \varepsilon_i\].

dengan \(\varepsilon_i\) merupakan galat acak.

2.2 Regresi Nonparametrik

Regresi nonparametrik tidak mengasumsikan bentuk fungsi tertentu, melainkan mengestimasi hubungan berdasarkan data. Salah satu metode yang banyak digunakan adalah kernel smoothing dengan kernel Gaussian:

\[ K(u) = \frac{1}{\sqrt{2\pi}} e^{-u^2/2} \] Pendekatan local linear estimator digunakan untuk mengurangi bias estimasi, terutama pada daerah batas data.

2.3 Regresi Semiparametrik

Regresi semiparametrik mengombinasikan regresi parametrik dan nonparametrik sehingga model menjadi lebih fleksibel. Bentuk umum model semiparametrik adalah:

\[ Y_i = \beta_0 + \beta_1 X_{2i} + \beta_2 X_{3i} + \beta_3 X_{4i} + g(t_i) + \varepsilon_i \]

di mana \(g(t)\) merupakan fungsi nonparametrik dari waktu \(t\).

3 METODOLOGI PENELITIAN

3.1 Library yang Dibutuhkan

library(tidyverse) # Data wrangling & plotting
library(car) #Analisis regresi dan diagnostik model statistik
library(readxl) # Membaca Excel

3.2 Data penelitian

Data yang digunakan merupakan data deret waktu klimatologis dari Kota Langsa, Provinsi Aceh (1 April 2012 – 2 Januari 2026). Variabel penelitian meliputi:

Deskripsi Variabel Penelitian
Kode.Variabel Nama.Variabel Keterangan Satuan
Y (RH2M) Kelembapan Relatif Udara Kelembapan udara pada ketinggian 2 meter %
X1 (t) Indeks Waktu Urutan waktu pengamatan harian -
X2 (T2MDEW) Suhu Titik Embun Suhu titik embun udara °C
X3 (PRECTOTCORR) Curah Hujan Terkoreksi Total curah hujan harian terkoreksi mm
X4 (T2M) Suhu Udara Permukaan Suhu udara pada ketinggian 2 meter °C

Data disiapkan dalam bentuk observasi harian untuk analisis tren dan pola musiman.

data <- read_excel("data semipar fix.xlsx") %>%
  mutate(
    Y_RH2M = as.numeric(Y_RH2M),
    X1_t = as.numeric(X1_t),
    X2_T2MDEW = as.numeric(X2_T2MDEW),
    X3_PRECTOTCORR = as.numeric(X3_PRECTOTCORR),
    X4_T2M = as.numeric(X4_T2M)
  )

Y  <- data$Y_RH2M
t  <- data$X1_t
X2 <- data$X2_T2MDEW
X3 <- data$X3_PRECTOTCORR
X4 <- data$X4_T2M

summary(data)
##      Y_RH2M        X2_T2MDEW     X3_PRECTOTCORR       X4_T2M     
##  Min.   :71.15   Min.   :19.44   Min.   : 0.000   Min.   :22.95  
##  1st Qu.:82.21   1st Qu.:22.68   1st Qu.: 1.130   1st Qu.:25.49  
##  Median :84.73   Median :23.16   Median : 2.870   Median :26.04  
##  Mean   :84.69   Mean   :23.14   Mean   : 5.495   Mean   :26.03  
##  3rd Qu.:87.25   3rd Qu.:23.62   3rd Qu.: 6.570   3rd Qu.:26.57  
##  Max.   :95.55   Max.   :25.92   Max.   :88.330   Max.   :29.02  
##       X1_t     
##  Min.   :   1  
##  1st Qu.:1248  
##  Median :2495  
##  Mean   :2495  
##  3rd Qu.:3742  
##  Max.   :4989

Korelasi Pearson X dan Y

Matriks Korelasi Pearson antara Y dan Variabel X
Y_RH2M X2_T2MDEW X3_PRECTOTCORR X4_T2M X1_t
Y_RH2M 1.0000 0.1637 0.2128 -0.4202 0.0137
X2_T2MDEW 0.1637 1.0000 0.0728 0.4735 0.2349
X3_PRECTOTCORR 0.2128 0.0728 1.0000 -0.2399 0.0078
X4_T2M -0.4202 0.4735 -0.2399 1.0000 0.2079
X1_t 0.0137 0.2349 0.0078 0.2079 1.0000

3.3 Pembagian Data

Data dibagi menjadi training 70% dan testing 30% untuk mengevaluasi kemampuan generalisasi model.

n <- length(Y)
n_train <- floor(0.7 * n)

Y_train <- Y[1:n_train]
Y_test  <- Y[(n_train+1):n]

t_train <- t[1:n_train]
t_test  <- t[(n_train+1):n]

X2_train <- X2[1:n_train]
X2_test  <- X2[(n_train+1):n]

X3_train <- X3[1:n_train]
X3_test  <- X3[(n_train+1):n]

X4_train <- X4[1:n_train]
X4_test  <- X4[(n_train+1):n]

3.4 Model Parametrik (OLS)

Model parametrik dibangun menggunakan regresi linear berganda:

\[Y_i = \beta_0 + \beta_1 X_{2i} + \beta_2 X_{3i} + \beta_3 X_{4i} + \varepsilon_i\].

train_df <- data.frame(
  Y = Y_train,
  X2 = X2_train,
  X3 = X3_train,
  X4 = X4_train
)

test_df <- data.frame(
  X2 = X2_test,
  X3 = X3_test,
  X4 = X4_test
)

model_param <- lm(Y ~ X2 + X3 + X4, data = train_df)


yhat_ols_train <- predict(model_param, newdata = train_df)
yhat_ols_test  <- predict(model_param, newdata = test_df)

resid_train <- Y_train - yhat_ols_train

summary(model_param)
## 
## Call:
## lm(formula = Y ~ X2 + X3 + X4, data = train_df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9.6539 -1.9987  0.0336  1.9716 10.4982 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 108.034187   1.991680  54.243   <2e-16 ***
## X2            2.241647   0.081667  27.449   <2e-16 ***
## X3            0.011427   0.007553   1.513     0.13    
## X4           -2.897597   0.076412 -37.921   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.965 on 3488 degrees of freedom
## Multiple R-squared:  0.3375, Adjusted R-squared:  0.3369 
## F-statistic: 592.2 on 3 and 3488 DF,  p-value: < 2.2e-16

3.5 Model Nonparametrik

Residual dari model parametrik diestimasi menggunakan local linear kernel smoothing dengan kernel Gaussian:

\[ K(u) = \frac{1}{\sqrt{2\pi}} e^{-u^2/2} \]

gaussian_kernel <- function(u) {
  exp(-0.5 * u^2) / sqrt(2*pi)
}

local_linear_smoother <- function(x, y, h, x_eval = NULL) {
  if (is.null(x_eval)) x_eval <- x
  yhat <- numeric(length(x_eval))

  for (i in seq_along(x_eval)) {
    u <- (x - x_eval[i]) / h
    w <- gaussian_kernel(u)
    X1 <- x - x_eval[i]

    S00 <- sum(w)
    S01 <- sum(w * X1)
    S11 <- sum(w * X1^2)
    T0  <- sum(w * y)
    T1  <- sum(w * y * X1)

    det <- S00 * S11 - S01^2

    if (abs(det) < 1e-10) {
      yhat[i] <- T0 / S00
    } else {
      yhat[i] <- (T0 * S11 - T1 * S01) / det
    }
  }
  yhat
}

ts_cv_score <- function(x, y, h, min_train = 20) {
  errors <- c()
  for (i in min_train:length(x)) {
    yhat <- local_linear_smoother(
      x[1:(i-1)], y[1:(i-1)], h, x_eval = x[i]
    )
    errors <- c(errors, (y[i] - yhat)^2)
  }
  mean(errors)
}

h_grid <- seq(
  0.2 * sd(t_train),
  2.0 * sd(t_train),
  length.out = 30
)

cv_vals <- sapply(h_grid, ts_cv_score, x = t_train, y = resid_train)
h_opt <- h_grid[which.min(cv_vals)]

h_opt
## [1] 1140.307
g_train <- local_linear_smoother(t_train, resid_train, h_opt)
g_test  <- local_linear_smoother(t_train, resid_train, h_opt, x_eval = t_test)

3.6 Model Semiparametrik

Model semiparametrik diperoleh dengan menggabungkan prediksi OLS dan komponen nonparametrik:

\[ Y_i = \beta_0 + \beta_1 X_{2i} + \beta_2 X_{3i} + \beta_3 X_{4i} + g(t_i) + \varepsilon_i \]

yhat_semi_train <- yhat_ols_train + g_train
yhat_semi_test  <- yhat_ols_test  + g_test

3.7 Kriteria Evaluasi Model

Evaluasi Kinerja Model OLS dan Semiparametrik
Model R..Training MAPE.Training…. MAPE.Testing…. RMSE.Training RMSE.Testing
OLS 0.3375 2.7968 4.6065 NA NA
Semiparametrik 0.3384 2.7953 4.6420 2.9613 4.9472

4 Hasil dan Pembahasan

4.1 Visualisasi Prediksi Training dan Testing

Grafik menunjukkan bahwa pada data training, hasil prediksi model semiparametrik mampu mengikuti pola fluktuasi kelembapan relatif udara (RH2M) dengan cukup baik, meskipun variasi ekstrem pada data aktual tidak sepenuhnya tertangkap. Hal ini mengindikasikan bahwa model berhasil mempelajari pola umum data tanpa terlalu menyesuaikan diri terhadap noise.

Pada data testing, pola prediksi masih konsisten mengikuti kecenderungan data aktual, yang menunjukkan kemampuan generalisasi model yang cukup baik. Perbedaan amplitudo antara nilai aktual dan prediksi mengindikasikan adanya penyederhanaan pola oleh model, namun secara keseluruhan model semiparametrik tetap mampu merepresentasikan dinamika RH2M terhadap waktu dengan stabil.

4.2 Perbandingan Model

df_uji <- data.frame(
  Y_RH2M = c(92.18, 88.18, 89.17, 87.67, 90.03, 89.43, 90.05, 88.26, 88.91, 88.76),
  X2_T2MDEW = c(22.84, 23.38, 22.90, 23.10, 22.86, 22.59, 22.57, 22.76, 22.68, 21.99),
  X3_PRECTOTCORR = c(1.08, 1.25, 3.45, 16.40, 15.96, 5.22, 9.42, 16.11, 7.20, 2.76),
  X4_T2M = c(25.00, 25.33, 25.19, 24.88, 24.79, 24.35, 24.68, 24.77, 24.72, 24.15),
  X1_t = c(4990, 4991, 4992, 4993, 4994, 4995, 4996, 4997, 4998, 4999)
)

predict_manual <- function(t_new, x2, x3, x4, y_actual = NA) {

  # OLS prediction
  yhat_ols <- predict(
    model_param,
    newdata = data.frame(X2 = x2, X3 = x3, X4 = x4)
  )

  # Nonparametric component
  g_new <- local_linear_smoother(
    t_train,
    resid_train,
    h_opt,
    x_eval = t_new
  )

  yhat_semi <- yhat_ols + g_new

  data.frame(
    t = t_new,
    Y_actual = y_actual,
    Y_hat_OLS = yhat_ols,
    g_t = g_new,
    Y_hat_Semi = yhat_semi
  )
}

results_manual <- data.frame()

for (i in 1:nrow(df_uji)) {

  res <- predict_manual(
    t_new = df_uji$X1_t[i],
    x2 = df_uji$X2_T2MDEW[i],
    x3 = df_uji$X3_PRECTOTCORR[i],
    x4 = df_uji$X4_T2M[i],
    y_actual = df_uji$Y_RH2M[i]
  )

  print(
    paste0(
      "t=", res$t,
      " | Y=", round(res$Y_actual, 2),
      " | OLS=", round(res$Y_hat_OLS, 2),
      " | Semi=", round(res$Y_hat_Semi, 2)
    )
  )

  results_manual <- rbind(results_manual, res)
}
## [1] "t=4990 | Y=92.18 | OLS=86.81 | Semi=85.84"
## [1] "t=4991 | Y=88.18 | OLS=87.06 | Semi=86.1"
## [1] "t=4992 | Y=89.17 | OLS=86.42 | Semi=85.45"
## [1] "t=4993 | Y=87.67 | OLS=87.91 | Semi=86.95"
## [1] "t=4994 | Y=90.03 | OLS=87.63 | Semi=86.66"
## [1] "t=4995 | Y=89.43 | OLS=88.18 | Semi=87.21"
## [1] "t=4996 | Y=90.05 | OLS=87.22 | Semi=86.26"
## [1] "t=4997 | Y=88.26 | OLS=87.46 | Semi=86.5"
## [1] "t=4998 | Y=88.91 | OLS=87.33 | Semi=86.36"
## [1] "t=4999 | Y=88.76 | OLS=87.38 | Semi=86.41"
df_manual <- results_manual[order(results_manual$t), ]

Visualisasi deret waktu menunjukkan bahwa model semiparametrik berhasil merepresentasikan pola naik-turun RH2M terhadap waktu, terutama pada perubahan lokal antar periode pengamatan. Perbedaan amplitudo antara data aktual dan hasil prediksi mengindikasikan bahwa variasi ekstrem pada data ujicoba belum sepenuhnya tertangkap oleh model, yang kemungkinan disebabkan oleh keterbatasan jumlah data ujicoba dan sifat lokal dari estimasi kernel. Secara keseluruhan, hasil ini menunjukkan bahwa model semiparametrik memiliki kemampuan yang baik dalam mengikuti pola temporal, meskipun masih terdapat ruang perbaikan dalam menangkap besarnya variasi nilai kelembapan udara. ## Evaluasi Prediksi

Hasil Evaluasi Model Semiparametrik pada Data Ujicoba
Metrik Nilai
MAPE 3.218
RMSE 3.235

4.3 Interpretasi Hasil

Hasil evaluasi menunjukkan bahwa model regresi semiparametrik memiliki kinerja yang lebih baik dibandingkan model regresi parametrik OLS. Hal ini ditunjukkan oleh nilai koefisien determinasi (R²) yang lebih tinggi serta nilai MAPE dan RMSE yang lebih rendah, yang mengindikasikan bahwa model semiparametrik mampu memberikan estimasi dan prediksi kelembapan relatif udara (RH2M) dengan tingkat kesalahan yang lebih kecil. Dengan demikian, model ini memiliki kemampuan fitting dan generalisasi yang lebih baik terhadap data klimatologis.

Keunggulan utama model semiparametrik terletak pada komponen nonparametrik berbasis waktu yang mampu menangkap fluktuasi dan dinamika temporal residual yang tidak dapat dijelaskan oleh model OLS. Penggunaan local kernel smoothing dengan local linear estimator memungkinkan pemodelan hubungan yang lebih fleksibel dan adaptif terhadap perubahan pola data. Oleh karena itu, pendekatan ini dinilai lebih sesuai untuk analisis risiko hidrometeorologi di Kota Langsa yang memiliki karakteristik data deret waktu yang kompleks dan nonlinier.