Spline dalam regresi nonparametrik digunakan untuk memodelkan hubungan antar variabel dengan menggunakan fungsi polinomial di berbagai interval. Spline memungkinkan fleksibilitas yang tinggi dalam penyesuaian kurva untuk menjaga kekasaran kurva pada tingkat yang dapat diterima (Eubank, 1999).

Dalam berbagai kebutuhan, Spline banyak digunakan untuk interpolasi/fitting data. Berikut adalah beberapa yang umum digunakan:

0.1 Cubic Spline

Cubic spline adalah jenis spline yang paling umum digunakan, terutama dalam fitting data. Cubic spline adalah serangkaian fungsi polinomial derajat tiga yang terhubung pada titik-titik tertentu (disebut knots) sehingga fungsi spline dan turunannya kontinu di seluruh rentang data.

Untuk setiap interval \([x_i, x_{i+1}]\), cubic spline \(S_i(x)\) dapat dituliskan sebagai:

\[ S_i(x) = a_i + b_i (x - x_i) + c_i (x - x_i)^2 + d_i (x - x_i)^3 \]

Dimana:

\(a_i\), \(b_i\), \(c_i\), dan \(d_i\) adalah koefisien yang ditentukan oleh kondisi-kondisi berikut:

Keterhubungan: \(S_i(x_i) = y_i\) dan \(S_i(x_{i+1}) = y_{i+1}\)

  • Memastikan spline melewati titik data pada interval yang bersangkutan.

Keterbatasan pertama turunan: \(S_i'(x_{i+1}) = S_{i+1}'(x_{i+1})\)

  • Menjamin bahwa perubahan kemiringan spline kontinu di titik-titik batas antara interval.

Keterbatasan kedua turunan: \(S_i''(x_{i+1}) = S_{i+1}''(x_{i+1})\)

  • Menjamin bahwa kelengkungan spline kontinu di titik-titik batas antara interval.

Kondisi batas (biasanya ditentukan, seperti batas derajat kedua atau bebas dari batas luar)

  • Biasanya, batasan tambahan diterapkan di ujung rentang data untuk menentukan perilaku spline di luar rentang data.

0.2 B-Spline

B-Spline (Basis Spline) adalah generalisasi dari cubic spline yang lebih fleksibel dan dapat digunakan untuk interpolasi atau smoothing data. B-Spline memiliki beberapa derajat dan knot yang menentukan polinomial spline. Fungsi B-spline dibentuk menggunakan fungsi basis B-spline.

Fungsi Basis B-spline

Untuk interval \([x_i, x_{i+1}]\), fungsi basis B-spline \(N_{i,p}(x)\) adalah fungsi polinomial yang ditentukan oleh derajat \(p\) dan knot vector \(\{t_j\}\). Fungsi basis B-spline memiliki bentuk rekursif, yaitu:

Basis Fungsi B-spline Derajat 0

Untuk derajat \(p = 0\), fungsi basis B-spline \(N_{i,0}(x)\) adalah:

\[ N_{i,0}(x) = \begin{cases} 1 & \text{if } t_i \leq x < t_{i+1} \\ 0 & \text{otherwise} \end{cases} \]

Basis Fungsi B-spline Derajat \(p\)

Untuk derajat \(p > 0\), fungsi basis B-spline \(N_{i,p}(x)\) didefinisikan secara rekursif sebagai:

\[ N_{i,p}(x) = \frac{x - t_i}{t_{i+p} - t_i} N_{i,p-1}(x) + \frac{t_{i+p+1} - x}{t_{i+p+1} - t_{i+1}} N_{i+1,p-1}(x) \]

dimana \(N_{i,p-1}(x)\) adalah fungsi basis B-spline derajat \(p-1\) yang lebih rendah.

Keterangan

  • Knot Vector: Knot vector \(\{t_j\}\) adalah urutan nilai yang membagi interval domain menjadi subinterval. Knot vector umumnya mengulangi nilai di ujung interval untuk memastikan bahwa spline memenuhi syarat di batasnya.
  • Derajat: Derajat \(p\) dari B-spline menentukan polinomial yang digunakan dalam basis spline. Derajat 0 menghasilkan fungsi basis seperti yang ditentukan di atas. Derajat yang lebih tinggi menghasilkan fungsi yang lebih halus.

Penjelasan Rumus

  1. Fungsi Basis B-spline Derajat 0: Fungsi basis B-spline derajat 0 adalah fungsi langkah yang aktif di interval antara dua knot.

  2. Fungsi Basis B-spline Derajat \(p\): Fungsi basis B-spline derajat \(p\) diperoleh dengan menggabungkan dua fungsi basis B-spline derajat \(p-1\) menggunakan parameter yang dinyatakan dalam rumus rekursif.

  3. Knot Vector: Knot vector menentukan batas-batas di mana fungsi basis berubah. Knot yang sama pada batas-batas interval memastikan bahwa spline kontinu dan memiliki turunan yang sesuai pada batasnya.

0.3 Natural Spline

Natural spline adalah jenis cubic spline dimana kedua turunan pada ujung-ujung rentang data adalah nol (yaitu, spline memiliki batas kedua turunan yang nol pada batas luar).

Natural spline meminimalkan interpolasi di luar batas data dan memastikan bahwa turunan kedua pada batas interval adalah nol. Natural spline adalah jenis spline yang memastikan bahwa spline tidak melengkung berlebihan di luar batas data.

Fungsi basis natural spline adalah spline kubik yang ditentukan dengan basis fungsi B-spline dengan tambahan syarat turunan kedua pada batas interval adalah nol.

Rumus matematis untuk natural spline dapat dituliskan dalam dua langkah:

  1. Basis Fungsi B-spline: Basis fungsi B-spline untuk natural spline menggunakan knot vector \(\{t_j\}\) yang didefinisikan sama dengan B-spline cubic spline.

    Fungsi basis B-spline derajat 3 (cubic spline) untuk interval \([t_i, t_{i+1}]\) adalah:

    \[ N_{i,3}(x) = \frac{(x - t_i)^3}{(t_{i+3} - t_i)} - \frac{(x - t_i)^2}{(t_{i+3} - t_i)} \frac{(x - t_{i+1})}{(t_{i+2} - t_{i+1})} \]

  2. Kondisi Natural Spline: Fungsi natural spline adalah cubic spline yang memenuhi syarat tambahan bahwa turunan kedua pada batas interval adalah nol.

    Jika \(S(x)\) adalah fungsi natural spline, maka:

    \[ S''(t_0) = 0 \] \[ S''(t_{n}) = 0 \]

    Dimana \(t_0\) dan \(t_n\) adalah batas interval, dan \(S''(x)\) adalah turunan kedua dari spline.

Penjelasan Rumus

  1. Basis Fungsi B-spline Derajat 3: Fungsi basis B-spline derajat 3 adalah fungsi polinomial kubik yang didefinisikan di antara knot dan diinterpolasi di luar batas.

  2. Kondisi Natural Spline: Natural spline memastikan bahwa spline memiliki turunan kedua yang nol pada batas interval. Ini membantu menghindari overfitting di luar data dan memberikan kelancaran tambahan pada spline.

pacman::p_load(splines, ggplot2, writexl)

Data yang digunakan adalah data TBC (tuberkulosis) Indonesia dari tahun 2000 hingga 2023 yang kemudian digunakan sebagai dasar prediksi 2024-2044 dengan tahun 2045 sudah dipasang angka target oleh pemerintah (benchmark).

1 Preparation Data

# Remove rows with missing Year values
df <- df[!is.na(df$Year), ]

# Remove rows with missing Estimated_TB values for fitting
df_fit <- df[!is.na(df$Estimated_TB), ]

2 Model Spline

Secara ringkas:

Cubic Spline adalah bentuk regresi spline yang menggunakan polinomial orde 3 untuk kemulusan tiap segmen.

B-spline adalah bentuk lebih fleksibel dari cubic spline, dimana dapat diatur jumlah knots secara eksplisit.

Natural spline adalah bentuk spesifik dari regresi spline yang memiliki pembatasan linier di bagian ujung (boundary constraints) sehingga mengurangi overfitting dibandingkan cubic spline atau B-spline.

3 Predicted

# Predict missing values
df$Cubic_Spline_Imputed <- predict(cubic_spline_fit, newdata = df)
df$B_Spline_Imputed <- predict(b_spline_fit, newdata = df)
df$Natural_Spline_Imputed <- predict(natural_spline_fit, newdata = df)

# Remove rows with any remaining NA before plotting
df_plot <- df[complete.cases(df[, c("Cubic_Spline_Imputed", "B_Spline_Imputed", "Natural_Spline_Imputed")]), ]

4 Evaluasi Model

RMSE

Root Mean Squared Error (RMSE) adalah ukuran statistik yang digunakan untuk mengevaluasi seberapa baik model prediktif atau regresi sesuai dengan data yang sebenarnya. RMSE mengukur seberapa besar rata-rata deviasi antara nilai yang diprediksi oleh model dan nilai aktualnya (Hair dkk, 2006).

RMSE adalah ukuran error yang digunakan untuk mengukur perbedaan antara nilai yang diprediksi dan nilai yang sebenarnya. RMSE adalah akar kuadrat dari rata-rata kuadrat error. Semakin kecil nilai RMSE, semakin baik model dalam memprediksi nilai yang sebenarnya.

Rumus untuk RMSE adalah:

\[ \text{RMSE} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2} \] dimana:

  • \(y_i\) adalah nilai sebenarnya,
  • \(\hat{y}_i\) adalah nilai yang diprediksi,
  • \(n\) adalah jumlah observasi.

R-square

R-squared (\(R^2\)) memberikan gambaran umum tentang seberapa baik model dalam menjelaskan variasi dalam data dibandingkan dengan model yang hanya menggunakan rata-rata sebagai prediksi.

Rumus untuk R-squared adalah (Gujarati & Porter, 2009):

\[ R^2 = 1 - \frac{RSS}{TSS} \]

dimana:

  • \(RSS\) adalah Residual Sum of Squares, dan
  • \(TSS\) adalah Total Sum of Squares.

R-squared memberikan gambaran umum tentang seberapa baik model dalam menjelaskan variasi dalam data dibandingkan dengan model yang hanya menggunakan rata-rata sebagai prediksi.

MAD

MAD adalah rata-rata dari nilai absolut selisih setiap data terhadap rata-rata dataset.

Rumusnya adalah:

\[ MAD = \frac{\sum_{i=1}^{n} |x_i - \bar{x}|}{n} \]

dengan:

  • \(x_i\) adalah nilai individu dalam dataset,

  • \(\bar{x}\) adalah rata-rata dari dataset,

  • \(n\) adalah jumlah data.

Menghitung goodness-of-fit metrics tiap model

compute_metrics <- function(actual, predicted) {
  rmse <- sqrt(mean((actual - predicted)^2, na.rm = TRUE))
  mad <- mean(abs(actual - predicted), na.rm = TRUE)
  ss_total <- sum((actual - mean(actual, na.rm = TRUE))^2, na.rm = TRUE)
  ss_residual <- sum((actual - predicted)^2, na.rm = TRUE)
  r_squared <- 1 - (ss_residual / ss_total)
  return(c(RMSE = rmse, MAD = mad, R2 = r_squared))
}

Ukuran metrik setiap model

metrics_cubic_spline <- compute_metrics(df_fit$Estimated_TB, predict(cubic_spline_fit, newdata = df_fit))
metrics_b_spline <- compute_metrics(df_fit$Estimated_TB, predict(b_spline_fit, newdata = df_fit))
metrics_natural_spline <- compute_metrics(df_fit$Estimated_TB, predict(natural_spline_fit, newdata = df_fit))
comparison_table <- data.frame(
  Model = c("Cubic Spline", "B-Spline", "Natural Spline"),
  RMSE = c(metrics_cubic_spline["RMSE"], metrics_b_spline["RMSE"], metrics_natural_spline["RMSE"]),
  MAD = c(metrics_cubic_spline["MAD"], metrics_b_spline["MAD"], metrics_natural_spline["MAD"]),
  R2 = c(metrics_cubic_spline["R2"], metrics_b_spline["R2"], metrics_natural_spline["R2"])
)

print(comparison_table)
##            Model      RMSE      MAD        R2
## 1   Cubic Spline 10.138652 6.908274 0.9676241
## 2       B-Spline  8.238697 5.463191 0.9786214
## 3 Natural Spline 13.656244 8.546090 0.9412613

Berdasarkan hasil perbandingan tiga model spline—Cubic Spline, B-Spline, dan Natural Spline:

  1. B-Spline memiliki kesalahan terkecil (RMSE & MAD) dan koefisien determinasi (R²) terbesar dibandingkan model lainnya. Model ini paling akurat dalam menangkap pola data dan memiliki prediksi yang lebih stabil.

  2. Cubic Spline masih menunjukkan performa yang cukup baik, tetapi tidak sebaik B-Spline. Model ini mampu menangkap tren dengan cukup baik, tetapi lebih rentan terhadap variasi lokal dibandingkan B-Spline.

  3. Natural Spline memiliki kesalahan terbesar (RMSE & MAD) dan koefisien determinasi terendah (R²) dibandingkan model lainnya. Model ini mengalami kesulitan dalam menangkap pola data TB dengan baik. Hal ini mungkin disebabkan oleh pembatasan linier di ujung spline, yang menyebabkan model kurang fleksibel.

5 Visualisasi

ggplot(df_plot, aes(x = Year)) +
  geom_point(aes(y = Estimated_TB), color = "black", alpha = 0.5, size = 2) +
  geom_line(aes(y = Cubic_Spline_Imputed, color = "Cubic Spline"), size = 1) +
  geom_line(aes(y = B_Spline_Imputed, color = "B-Spline"), size = 1) +
  geom_line(aes(y = Natural_Spline_Imputed, color = "Natural Spline"), size = 1) +
  scale_color_manual(values = c("Cubic Spline" = "purple", "B-Spline" = "orange", "Natural Spline" = "brown")) +
  labs(title = "Comparison of Cubic Spline, B-Spline, and Natural Spline Models", x = "Year", y = "Estimated TB Cases", color = "Model") +
  theme_minimal()

Export Data

write_xlsx(df, "dataTBC Pred.xls")

Kesimpulan

Kelebihan B-Spline:

  • Lebih fleksibel daripada cubic spline, karena memungkinkan kontrol lebih lanjut atas posisi knots.

  • Dapat menangani perubahan pola data dengan lebih baik dibanding spline biasa.

  • Membantu menghindari overfitting, terutama jika jumlah knots disesuaikan dengan baik.

Kelebihan Natural Spline:

  • Lebih stabil di bagian ujung data dibandingkan cubic spline atau B-spline.

  • Menghindari osilasi (pola naik-turun berulang) yang berlebihan dengan memaksakan kondisi linier di luar knots.

  • Bekerja lebih baik untuk data yang memiliki tren panjang tanpa fluktuasi tajam.

6 References

[1] Damodar, Gujarati & Dawn C. Porter. (2009). Basic Econometric 5th Edition. McGraw–Hill: New York.

[2] Eubank, R.L. (1999). Nonparametric Regression and Spline Smoothing. 2nd ed.. Dekker: New York.

[3] Hair, J. F., dkk. (2006). Multivariate Data Analysis Sixth Edition. Pearson Education Inc: New Jersey.


Direktorat Statistik Kesejahteraan Rakyat, BPS,