Tuberkulosis (TB) merupakan penyakit menular kronis yang disebabkan oleh Mycobacterium tuberculosis dan masih menjadi salah satu masalah kesehatan masyarakat paling serius di Indonesia. Berdasarkan data dari Global Tuberculosis Report (World Health Organization [WHO], 2024), Indonesia menempati peringkat kedua setelah India dalam jumlah kasus TB global, dengan estimasi lebih dari 1,06 juta kasus baru dan 125.000 kematian akibat TB setiap tahun. Angka tersebut mencerminkan tingginya beban epidemiologis yang masih dihadapi, sekaligus menjadi tantangan besar dalam upaya eliminasi TB pada tahun 2030. Selain itu, laporan WHO (2024) menunjukkan bahwa Indonesia mengalami underreporting kasus TB sebesar 15,6% berdasarkan hasil Studi Inventori Nasional TB Indonesia 2023–2024, yang menunjukkan ketidaksesuaian antara jumlah kasus TB yang diperkirakan dan jumlah kasus yang tercatat secara resmi. Ketimpangan tersebut berdampak langsung terhadap efektivitas strategi penanggulangan TB nasional, karena program pengendalian penyakit tidak dapat dirancang secara optimal tanpa estimasi kasus yang akurat.
Ketidakpastian dalam fluktuasi jumlah kasus TB baru menimbulkan kebutuhan mendesak untuk membangun sistem peramalan yang akurat. Model deret waktu atau time series merupakan salah satu pendekatan statistik yang efektif untuk memprediksi kejadian penyakit menular berdasarkan data historis. Model Auto Regressive Integrated Moving Average (ARIMA) dikenal luas karena kemampuannya menangkap pola, prediksi jangka pendek, serta autokorelasi dalam data deret waktu yang stabil (Ramadhan, 2025). Model ARIMA telah digunakan dalam berbagai penelitian peramalan penyakit menular, termasuk tuberkulosis, dan terbukti memberikan hasil prediksi yang stabil dan dapat diandalkan. Penelitian yang dilakukan oleh Sumanto et al. (2024) dalam konteks peramalan kunjungan pasien TB menunjukkan bahwa model ARIMA memberikan estimasi yang cukup akurat dan bermanfaat untuk mendukung kesiapan fasilitas layanan kesehatan.
Penerapan model ARIMA untuk memprediksi jumlah kasus TB baru tidak hanya memberikan keuntungan dalam hal akurasi statistik, tetapi juga membantu pemangku kebijakan dalam merancang intervensi strategis berbasis bukti. Peramalan yang tepat dapat menjadi dasar bagi alokasi sumber daya yang efisien, seperti ketersediaan tempat tidur rumah sakit, tenaga medis, logistik obat anti-TB, dan kampanye deteksi dini. Oleh karena itu, penelitian ini diarahkan untuk mengembangkan dan mengevaluasi model ARIMA dalam memprediksi jumlah kasus TB baru di Indonesia berdasarkan data historis. Tujuan dari penelitian ini adalah (1) membangun model ARIMA optimal yang mampu memproyeksikan tren kasus TB baru secara akurat, (2) menguji keandalan model tersebut dalam skenario prediksi jangka pendek, serta (3) menyediakan dasar ilmiah bagi perencanaan kebijakan kesehatan masyarakat yang lebih efektif dan adaptif terhadap dinamika epidemi TB di Indonesia.
Data yang digunakan merupakan data sekunder jumlah kasus Tuberkulosis (TB) baru di Kota Semarang yang dicatat secara bulanan selama periode Januari 2019 hingga November 2025, dengan total 83 observasi. Data awal disajikan berdasarkan jenis kelamin (laki-laki dan perempuan), kemudian diagregasikan menjadi total kasus TB baru per bulan untuk keperluan analisis deret waktu. Variabel utama yang dianalisis adalah jumlah total kasus TB bulanan yang merepresentasikan dinamika perkembangan kasus TB dari waktu ke waktu.
Data diperoleh dari dashboard kesehatan Dinas Kesehatan Kota Semarang melalui laman resmi LEKMINKES pada laman https://lekminkes.dinkes.semarangkota.go.id/. Sebagai data sekunder dari sumber pemerintah, data ini memiliki tingkat keandalan dan konsistensi pencatatan yang baik. Dengan frekuensi bulanan dan rentang waktu yang cukup panjang, data dinilai sesuai untuk analisis deret waktu, khususnya dalam mengkaji pola tren, kestasioneran, dan ketergantungan antarperiode sebagai dasar pemodelan ARIMA
#Package
library(readxl)
library(forecast)
library(tseries)
library(zoo)
library(lmtest)
library(tidyverse)
library(lubridate)
library(tibble)
library(ggplot2)
#Import Data
setwd("C:/Users/user/Downloads/ARIMA")
Data <- read_excel("C:/Users/user/Downloads/ARIMA/TB BARU.xlsx")
# cek apakah ada atau tidaknya NA
colSums(is.na(Data))
## Tahun Jumlah
## 0 0
# Perbaiki Tipe Data
Data$Tahun <- as.yearmon(Data$Tahun, "%Y-%m")
# Filter Periode
Data <- Data[Data$Tahun >= as.yearmon("2019-01") &
Data$Tahun <= as.yearmon("2025-11"), ]
# Mengubah ke Time Series Bulanan
Data_ts <- ts(Data$Jumlah,
start = c(2019, 1),
frequency = 12)
# Statistik Deskriptif
summary(Data_ts)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 54.0 202.0 275.0 277.3 365.0 590.0
Jumlah kasus TB baru bervariasi cukup besar, dari 54 hingga 590 kasus. Nilai median (275) yang hampir sama dengan mean (277,3) mengindikasikan sebaran data relatif simetris, sementara rentang antar kuartil (202–365) menunjukkan sebagian besar kasus berada pada tingkat menengah hingga tinggi
# Plot time series
ts.plot(
Data_ts,
col = "dodgerblue2",
ylab = "Jumlah Kasus TB Baru",
xlab = "Periode",
lwd = 2
)
title(
main = "Plot Time Series Kasus TB Baru",
cex.main = 0.9
)
points(
Data_ts,
pch = 16,
col = "red"
)
Plot time series berfluktuasi cukup tinggi dengan penurunan tajam sekitar 2020–2021 dan peningkatan kembali pada tahun-tahun berikutnya. Pola ini menandakan adanya dinamika waktu yang kuat dan data belum stasioner sehingga perlu distasionerkan.
Metode analisis yang digunakan dalam penelitian ini adalah metode Autoregressive Integrated Moving Average (ARIMA). Metode ARIMA sesuai untuk menganalisis data deret waktu karena mampu menangkap pola ketergantungan temporal dan fluktuasi data berdasarkan nilai masa lalu dan kesalahan acak tanpa memerlukan variabel penjelas tambahan (Pradana, B. L., 2025). Data yang digunakan terdiri dari 83 observasi bulanan, yang kemudian dibagi menjadi data training untuk pendugaan parameter dan data testing untuk penentuan model ARIMA terbaik.
Proses analisis dilakukan dengan tahapan sebagai berikut:
Data_train <- head(Data_ts, 75)
Data_train
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2019 163 117 170 235 235 590 286 294 292 241 163 173
## 2020 398 373 451 365 387 348 374 318 54 85 75 59
## 2021 148 192 206 206 172 127 117 129 208 184 174 119
## 2022 217 178 198 209 185 243 250 423 450 438 525 433
## 2023 398 373 451 365 387 348 374 318 369 444 380 275
## 2024 256 303 274 246 285 260 317 283 316 379 256 350
## 2025 289 297 282
Data_test <- tail(Data_ts, 8)
Data_test
## Apr May Jun Jul Aug Sep Oct Nov
## 2025 266 234 273 253 305 288 293 253
Melakukan pengujian stasioneritas menggunakan adf.test() dengan hipotesis: H0: p-value > alpha (0,05) data tidak stasioner H1: p-value < alpha (0,05) data stasioner
adf.test(Data_train)
##
## Augmented Dickey-Fuller Test
##
## data: Data_train
## Dickey-Fuller = -2.7063, Lag order = 4, p-value = 0.2874
## alternative hypothesis: stationary
Karena nilai p-value sebesar 0,2874 lebih besar dari α, maka keputusan yang diambil adalah terima H₀, sehingga data belum stasioner.
diff_data <- diff(Data_train)
ts.plot(diff_data, main="Plot Data Differens")
adf.test(diff_data)
##
## Augmented Dickey-Fuller Test
##
## data: diff_data
## Dickey-Fuller = -5.4789, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Nilai p-value sebesar 0,01 lebih kecil dari α, maka keputusan yang diambil adalah terima H₀, sehingga data stasioner.Karena hanya dilakukan differencing 1x maka penyusunan ARIMA(p,d,q), d=1 d -> diperoleh dari hasil berapa kali melakukan differencing ARIMA(p,d,q)
Parameter ARIMA ditentukan melalui plot ACF dan PACF. Nilai p diperoleh dari lag signifikan pada PACF, sedangkan nilai q dari lag signifikan pada ACF. ACF mengukur korelasi dengan mempertimbangkan data di antaranya, sementara PACF mengukur korelasi langsung antar lag.
acf(as.numeric(diff_data), lag.max = 20, main = "ACF Differencing 1")
pacf(as.numeric(diff_data), lag.max = 20, main = "PACF Differencing 1")
Berdasarkan plot ACF dan PACF hasil differencing satu, ACF menunjukkan spike signifikan pada lag ke-1 sehingga q dapat dicoba 0 atau 1, sedangkan PACF menunjukkan spike awal pada lag ke-1 (lag ke-6 tidak diambil karena tidak berurutan), sehingga p = 1; dengan d = 1, model kandidatnya adalah ARIMA(1,1,0) dan ARIMA(0,1,1).
#Dugaan Sementara Estimasi Parameter Menggunakan Differencing 1
m1 = arima(Data_train, order = c(1,1,0))
m2 = arima(Data_train, order = c(1,1,1))
Pemilihan model terbaik dengan melihat nilai AIC dari masing-masing model
aic <- data.frame(Nama = c("m1","m2"), Model=c("ARIMA (1,1,0)","ARIMA (1,1,1)"), AIC = c(m1$aic, m2$aic))
aic
## Nama Model AIC
## 1 m1 ARIMA (1,1,0) 867.2115
## 2 m2 ARIMA (1,1,1) 869.1936
Pemilihan model terbaik menggunakan AIC yang mempunyai nilai paling Kecil (Gustiansyah, et.al., 2023). Berdasarkan nilai AIC dari dua model yaitu ARIMA (1,1,0) dan ARima (1,1,1), diperoleh nilai AIC terkecil pada model ARIMA (1,1,0) yaitu sebesar 865.2115, sehingga model ini dinyatakan sebagai model terbaik.
best_model <- Arima(Data_train, order = c(1,1,0))
coeftest(best_model)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.29256 0.11043 -2.6493 0.008066 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil pengujian koefisien pada model menunjukkan bahwa parameter AR(1) memiliki nilai estimasi sebesar −0,2926 dengan standar error 0,1104, sehingga diperoleh nilai z-statistik sebesar −2,6493 dan p-value sebesar 0,0081. Karena p-value lebih kecil dari tingkat signifikansi 0,05, maka H₀ ditolak, yang berarti parameter AR(1) signifikan secara statistik. Dengan demikian, komponen AR(1) memberikan kontribusi yang nyata dalam menjelaskan ketergantungan nilai saat ini terhadap nilai satu periode sebelumnya, sehingga keberadaannya penting dalam pembentukan model ARIMA. Model yang terbentuk dapat dituliskan sebagai:
Yt=Yt−1−0,2926(Yt−1−Yt−2)+εt
#Uji Residu
res1 = best_model$residuals
#Uji Normalitas ## (Uji Asumsi Klasik)
ks.test(res1, "pnorm", mean(res1), sd(res1))
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: res1
## D = 0.12251, p-value = 0.2103
## alternative hypothesis: two-sided
#Uji Autokolerasi
checkresiduals(best_model)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,1,0)
## Q* = 17.637, df = 14, p-value = 0.2238
##
## Model df: 1. Total lags used: 15
#Uji White Noise
Box.test(residuals(best_model), type = "Ljung-Box")
##
## Box-Ljung test
##
## data: residuals(best_model)
## X-squared = 0.0050553, df = 1, p-value = 0.9433
Berdasarkan hasil uji normalitas residual diperoleh nilai p-value sebesar 0.2103, yang lebih besar dari tingkat signifikansi 0.05. Oleh karena itu, H₀ tidak ditolak, sehingga residual model berdistribusi normal.
Selanjutnya, berdasarkan uji autokorelasi residual diperoleh nilai p-value sebesar 0.2238, lebih besar dari 0.05. Hal ini menunjukkan bahwa tidak terdapat autokorelasi yang signifikan pada residual model ARIMA(1,1,0).
Selain itu, hasil uji white noise menghasilkan p-value sebesar 0.9433, yang juga lebih besar dari 0.05. Dengan demikian, residual bersifat acak (white noise). Secara keseluruhan, model ARIMA(1,1,0) telah memenuhi asumsi diagnostik dan layak digunakan untuk analisis lebih lanjut.
#Nilai MAPE Data Testing
test_pred <- forecast(best_model, h = 8)$mean
actual_test <- as.numeric(Data_test)
pred_test <- as.numeric(test_pred)
mape_test <- mean(abs((actual_test - pred_test) / actual_test)) * 100
mape_test
## [1] 8.700084
Berdasarkan hasil evaluasi model diperoleh nilai MAPE sebesar 8.7% pada data testing. Mengacu pada kriteria akurasi model berdasarkan nilai MAPE menurut Amri et.al. (2024), maka model ARIMA yang dibangun termasuk dalam kategori akurasi sangat baik. Nilai MAPE tersebut menunjukkan bahwa model mampu menghasilkan prediksi yang akurat pada data yang tidak digunakan dalam proses pelatihan, sehingga model ARIMA layak digunakan untuk keperluan peramalan
fc_future <- forecast(best_model, h = 8)
forecast_future_table <- tibble(
Periode = format(as.yearmon(time(fc_future$mean)), "%Y-%m"),
Forecast = as.numeric(fc_future$mean)
)
forecast_future_table
## # A tibble: 8 × 2
## Periode Forecast
## <chr> <dbl>
## 1 2025-04 286.
## 2 2025-05 285.
## 3 2025-06 285.
## 4 2025-07 285.
## 5 2025-08 285.
## 6 2025-09 285.
## 7 2025-10 285.
## 8 2025-11 285.
# Perbandingan aktual vs forecast
fc_test <- forecast(best_model, h = length(Data_test))
forecast_test_table <- tibble(
Periode = format(as.yearmon(time(Data_test)), "%Y-%m"),
Aktual = as.numeric(Data_test),
Forecast = as.numeric(fc_test$mean)
)
forecast_test_table
## # A tibble: 8 × 3
## Periode Aktual Forecast
## <chr> <dbl> <dbl>
## 1 2025-04 266 286.
## 2 2025-05 234 285.
## 3 2025-06 273 285.
## 4 2025-07 253 285.
## 5 2025-08 305 285.
## 6 2025-09 288 285.
## 7 2025-10 293 285.
## 8 2025-11 253 285.
Hasil peramalan menunjukkan bahwa model ARIMA mampu menangkap kecenderungan umum jumlah kasus TB baru pada periode pengujian. Nilai prediksi relatif stabil dan berada pada kisaran yang sejalan dengan data aktual, meskipun terdapat perbedaan pada beberapa periode akibat fluktuasi data. Hal ini didukung oleh nilai MAPE sebesar 8,7% pada data pengujian, yang mengindikasikan bahwa tingkat kesalahan peramalan tergolong rendah dan performa model dapat dikategorikan sangat baik. Dengan demikian, model ARIMA layak digunakan sebagai alat peramalan jangka pendek
# Plot Perbandingan Data Training, Aktual, dan Prediksi
df_plot <- bind_rows(
data.frame(
Waktu = seq(as.yearmon("2019-01"), by = 1/12, length.out = length(Data_train)),
Nilai = as.numeric(Data_train),
Tipe = "Training"
),
data.frame(
Waktu = seq(as.yearmon("2019-01") + length(Data_train)/12, by = 1/12, length.out = length(Data_test)),
Nilai = as.numeric(Data_test),
Tipe = "Aktual"
),
data.frame(
Waktu = seq(as.yearmon("2019-01") + length(Data_train)/12, by = 1/12, length.out = length(Data_test)),
Nilai = as.numeric(fc_test$mean),
Tipe = "Prediksi"
)
)
ggplot(df_plot, aes(Waktu, Nilai, color = Tipe)) +
geom_line(size = 1.2) +
scale_color_manual(values = c("Training"="black","Aktual"="blue","Prediksi"="red")) +
labs(
title = "Perbandingan Data Training, Aktual, dan Prediksi",
subtitle = "Kasus TB Baru Kota Semarang",
x = "Periode", y = "Jumlah Kasus", color = "Keterangan"
) +
theme_minimal(base_size = 14) +
theme(legend.position = "top", plot.title = element_text(face="bold"))
final_model <- Arima(Data_ts, order = c(1,1,0))
# Forecast masa depan (8 bulan ke depan)
fc_future <- forecast(final_model, h = 8)
forecast_future_table <- tibble(
Periode = format(as.yearmon(time(fc_future$mean)), "%Y-%m"),
Forecast = as.numeric(fc_future$mean)
)
forecast_future_table
## # A tibble: 8 × 2
## Periode Forecast
## <chr> <dbl>
## 1 2025-12 265.
## 2 2026-01 261.
## 3 2026-02 262.
## 4 2026-03 262.
## 5 2026-04 262.
## 6 2026-05 262.
## 7 2026-06 262.
## 8 2026-07 262.
plot(fc_future,
main = "Peramalan Jumlah Kasus TB Baru",
xlab = "Periode",
ylab = "Jumlah Kasus")
Hasil peramalan menunjukkan bahwa jumlah kasus TB baru pada periode Desember 2025 hingga Juli 2026 diproyeksikan berada pada kisaran 261–265 kasus per bulan. Nilai prediksi cenderung stabil dengan fluktuasi yang sangat kecil, mengindikasikan bahwa model ARIMA menangkap pola jangka pendek yang relatif konstan setelah periode observasi terakhir. Kondisi ini menunjukkan tidak adanya lonjakan atau penurunan ekstrem dalam waktu dekat, sehingga proyeksi kasus TB baru diperkirakan tetap berada pada tingkat yang moderat dan terkendali
Berdasarkan hasil analisis jumlah kasus Tuberkulosis (TB) baru di Kota Semarang periode Januari 2019 hingga November 2025 menggunakan metode ARIMA, diperoleh model terbaik yaitu ARIMA (1,1,0) berdasarkan nilai AIC terendah dan signifikansi parameter yang valid. Secara matematis, model tersebut dapat dinyatakan sebagai berikut Yt=Yt−1−0,2926(Yt−1−Yt−2)+εt yang menunjukkan adanya ketergantungan nilai kasus TB saat ini terhadap satu periode sebelumnya. Hasil uji diagnostik menunjukkan bahwa residual model bersifat white noise, tidak mengandung autokorelasi, dan berdistribusi normal, sehingga model memenuhi asumsi kelayakan ARIMA. Nilai MAPE sebesar 8,7% pada data testing mengindikasikan bahwa model memiliki tingkat akurasi yang sangat baik, serta hasil peramalan (validasi testing) berada pada kisaran yang sejalan dengan data aktual. Selanjutnya, hasil peramalan delapan bulan ke depan (Desember 2025–Juli 2026) menunjukkan bahwa jumlah kasus TB baru diproyeksikan berada pada kisaran yang relatif stabil tanpa fluktuasi ekstrem. Dengan demikian, model ARIMA (1,1,0) dinilai tidak hanya efektif untuk validasi jangka pendek, tetapi juga berpotensi digunakan sebagai alat pendukung perencanaan dan antisipasi kebijakan kesehatan masyarakat terkait pengendalian TB di Kota Semarang.
Dinas Kesehatan Kota Semarang. (n.d.). LEKMINKES – Layanan Informasi Kesehatan. Diakses 10 Januari 2026, dari https://lekminkes.dinkes.semarangkota.go.id/
Fathoni Amri, I., Chamidah, N., Saifudin, T., Purwanto, D., Fadlurohman, A., Fitriyana Ningrum, A., & Amri, S. (2024). Prediction of extreme weather using nonparametric regression approach with Fourier series estimators. Data and Metadata, 3, Article 319. https://doi.org/10.56294/dm2024319
Gustiansyah, M. A., Rizki, A., Apriyanti, B., Maulidia, K., Roa, R. J. R., Al Hadi, O., … & Angraini, Y. (2023). Aplikasi Model ARIMA dalam Peramalan Data Harga Emas Dunia Tahun 2010-2022. Jurnal Statistika Dan Aplikasinya, 7(1), 84-92.https://doi.org/10.21009/JSA.07108
Novietasari, A. (2022). Peramalan penjualan motor. RPubs. https://rpubs.com/anggitnoviee/forecast_penjualanmotor
Ramadhan, H. A. (2025). Prediksi curah hujan menggunakan metode ARIMA (Autoregressive Integrated Moving Average) (Studi kasus: Kabupaten Sleman, Semarang, dan Surabaya). Skripsi, Universitas Islam Indonesia.
Pradana, B. L. (2025). Time Series Forecasting of LQ45 Stock Index Using ARIMA: Insights and Implications. Review of Management, Accounting and Tourism Studies, 1(1), 27-40.https://doi.org/10.51170/jmabr.v1i1.160
Ratnasari, A. P. (2022). Penerapan model ARIMA pada data harga emas Eropa. RPubs. https://rpubs.com/andikaputri/ARIMA
Sumanto, Y. D., Hariyanto, S., & Andriyati, A. (2024). Forecasting the number of tuberculosis patients visiting Mitra Sehat Clinic with ARIMA method. International Journal of Social Health Research and Education (IJSHRE), 3(1). https://doi.org/10.26821/IJSHRE.12.9.2024.120905
World Health Organization. (2024). Global tuberculosis report 2024. https://www.who.int/teams/global-programme-on-tuberculosis-and-lung-health/tb-reports/global-tuberculosis-report-2024
World Health Organization. (2024). The second national TB inventory study in Indonesia 2023–2024. https://www.who.int/teams/global-programme-on-tuberculosis-and-lung-health/tb-reports/global-tuberculosis-report-2024/featured-topics/the-second-national-tb-inventory-study-in-indonesia