Major
Information System
Student ID
H1101251078
Lecturer
Dr EVY SULISTIANINGSIH, S.Si, M.Sc
Subject
Statistic and Probability
Dokumen interaktif ini disusun sebagai bentuk penyelesaian tugas Ujian Tengah Semester (UTS) Statistika dan Probabilitas. Laporan ini dirancang untuk mendemonstrasikan implementasi komputasi statistika berbasis R melalui dua studi kasus utama:
Pada studi kasus pertama ini, saya akan membedah hubungan antara dua variabel independen (\(X_1\) dan \(X_2\)) terhadap variabel dependen (\(Z\)) berdasarkan 15 runtunan percobaan yang telah dilakukan. Untuk memudahkan pembacaan alur pengerjaannya, saya telah membagi laporan ini ke dalam beberapa tab di bawah.
Langkah paling awal yang saya lakukan tentu saja memindahkan data hasil percobaan ke dalam environment R agar bisa diolah. Data ini terdiri dari 15 baris observasi. Berikut adalah tampilan datanya:
data_regresi <- data.frame(
Z = c(14.8, 12.1, 19.0, 14.5, 16.6, 17.2, 17.5, 14.1, 13.8, 14.7, 17.7, 17.0, 17.6, 16.3, 18.2),
X1 = c(11.5, 14.3, 9.4, 15.2, 8.8, 9.8, 11.2, 10.9, 14.7, 15.1, 8.7, 8.6, 9.3, 10.8, 11.9),
X2 = c(6.3, 7.4, 5.9, 8.7, 9.1, 5.6, 6.8, 7.4, 8.2, 9.2, 4.7, 5.5, 6.6, 8.7, 5.4)
)
datatable(data_regresi, rownames = FALSE,
caption = "Tabel 1. Rincian 15 Runtunan Percobaan",
options = list(pageLength = 5, dom = 'tp'))Setelah data siap, sekarang saatnya membangun model regresi. Di sini,
saya menggunakan metode kuadrat terkecil (Ordinary Least
Squares / OLS) yang pada bahasa R bisa dieksekusi dengan sangat
mudah menggunakan fungsi bawaan lm() (Linear Model).
Tujuan utama dari tahapan ini adalah untuk mencari tahu seberapa besar sebenarnya bobot (koefisien) dari masing-masing variabel \(X_1\) dan \(X_2\) dalam memengaruhi \(Z\). Mari kita lihat output ringkasan modelnya:
model_regresi <- lm(Z ~ X1 + X2, data = data_regresi)
ringkasan_koef <- summary(model_regresi)$coefficients
kable(ringkasan_koef, digits = 3, caption = "Tabel 2. Estimasi Koefisien Model Regresi")| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| (Intercept) | 23.675 | 2.032 | 11.649 | 0.000 |
| X1 | -0.488 | 0.187 | -2.609 | 0.023 |
| X2 | -0.293 | 0.304 | -0.965 | 0.353 |
Dari tabel perhitungan di atas, kita bisa menyusun persamaan regresi linier bergandanya menjadi: \[ \hat{Z} = 23.678 - 0.488X_1 - 0.294X_2 \]
Membaca Makna Persamaan Regresi
Persamaan regresi yang kita dapatkan tadi sebenarnya bercerita banyak hal tentang pola data kita. Bisa kita lihat bahwa nilai konstanta atau intercept (\(b_0\)) adalah 23.678. Angka ini merepresentasikan estimasi awal untuk nilai \(Z\) apabila kedua variabel independen (\(X_1\) dan \(X_2\)) bernilai nol.
Menariknya, kedua variabel independen kita ternyata memberikan dampak yang berlawanan arah (negatif) terhadap \(Z\):
Implementasi Model: Estimasi Nilai Z Baru
Untuk membuktikan kegunaan model ini, mari kita jawab persoalan
bagian c: Berapa estimasi nilai \(Z\) jika kita memiliki data baru di mana
\(X_1 = 10.3\) dan \(X_2 = 5.8\)? Daripada menghitungnya
secara manual, saya langsung menyuntikkan nilai baru tersebut ke dalam
fungsi predict() di R untuk mendapatkan hasil yang lebih
presisi:
data_baru <- data.frame(X1 = 10.3, X2 = 5.8)
estimasi_Z <- predict(model_regresi, newdata = data_baru)
estimasi_Z## 1
## 16.94602
Kesimpulan Akhir: Berdasarkan model regresi linier berganda yang telah dibangun, estimasi nilai Z untuk kombinasi \(X_1 = 10.3\) dan \(X_2 = 5.8\) adalah sebesar 16.946.
Beralih ke persoalan kedua, saya mendapatkan studi kasus dari seorang General Manager yang meminta analisis peramalan (forecasting) penjualan untuk 6 bulan pertama di tahun 2026. Data yang diberikan adalah data historis bulanan selama 5 tahun (2021 hingga 2025). Sesuai instruksi soal, permasalahan ini akan diselesaikan menggunakan metode Single Exponential Smoothing (SES).
Untuk memudahkan pembacaan, proses komputasi dan analisis saya bagi ke dalam tiga tahapan tab di bawah ini:
Langkah krusial pertama dalam analisis deret waktu (time series) adalah menyusun ulang format data. Data laporan dari General Manager yang berbentuk matriks tahunan harus dibentangkan menjadi satu garis waktu yang berurutan dari Januari 2021 hingga Desember 2025 (total 60 bulan observasi).
Data tersebut kemudian saya ubah menjadi objek khusus time
series (ts) di lingkungan R agar sistem memahami bahwa
ini adalah data berkesinambungan dengan frekuensi bulanan.
# Menyusun 60 data penjualan secara kronologis (Jan 2021 - Des 2025)
penjualan <- c(
499.35, 396.26, 523.87, 559.52, 578.45, 602.44, 514.99, 544.99, 590.25, 636.01, 694.34, 813.93,
521.22, 781.89, 596.25, 618.15, 597.22, 808.23, 784.83, 765.42, 776.79, 732.26, 852.20, 770.19,
666.12, 608.54, 636.95, 731.72, 768.36, 814.85, 850.22, 789.31, 729.38, 860.26, 946.79, 1054.60,
808.48, 806.51, 844.53, 786.62, 1036.40, 927.45, 1029.59, 909.87, 1073.03, 1081.46, 1134.69, 924.78,
843.21, 1037.61, 1043.92, 1126.90, 1062.83, 1130.69, 1011.44, 1184.32, 1117.89, 969.68, 1031.34, 1273.54
)
# Konversi vektor menjadi objek Time Series (frekuensi 12 untuk data bulanan)
ts_penjualan <- ts(penjualan, start = c(2021, 1), frequency = 12)Untuk memahami pola dasar pergerakan penjualan sebelum dilakukan peramalan, berikut adalah visualisasi data historis selama 5 tahun terakhir. Terlihat bahwa penjualan mengalami fluktuasi namun memiliki kecenderungan tren yang meningkat secara keseluruhan.
Untuk melakukan peramalan, saya menggunakan fungsi ses()
dari package forecast. Algoritma ini akan secara
otomatis melakukan komputasi iteratif untuk mencari nilai parameter
pemulusan (Alpha / \(\alpha\)) yang
paling optimal, yaitu nilai yang menghasilkan tingkat error
peramalan terkecil pada data historis.
Berdasarkan komputasi R, didapatkan nilai Alpha optimal sebesar 0.3624. Saya menggunakan model ini untuk memproyeksikan penjualan 6 bulan ke depan (horizon = 6):
# Membangun model peramalan SES untuk 6 bulan ke depan (h = 6)
model_ses <- ses(ts_penjualan, h = 6)
tabel_forecast <- data.frame(
Bulan = c("Januari 2026", "Februari 2026", "Maret 2026", "April 2026", "Mei 2026", "Juni 2026"),
Estimasi_Penjualan = as.numeric(model_ses$mean)
)
kable(tabel_forecast, digits = 2, caption = "Tabel 3. Proyeksi Penjualan (Januari - Juni 2026)")| Bulan | Estimasi_Penjualan |
|---|---|
| Januari 2026 | 1129.98 |
| Februari 2026 | 1129.98 |
| Maret 2026 | 1129.98 |
| April 2026 | 1129.98 |
| Mei 2026 | 1129.98 |
| Juni 2026 | 1129.98 |
Catatan Analisis Kritis: Angka proyeksi untuk
bulan Januari hingga Juni 2026 pada tabel di atas menunjukkan nilai
konstan yang sama persis. Hal ini bukanlah sebuah kesalahan komputasi,
melainkan murni karakteristik matematis dari pemodelan Single
Exponential Smoothing (Pemulusan Eksponensial Tunggal).
Metode SES didesain khusus untuk melakukan smoothing pada data stasioner, di mana metode ini tidak mengakomodasi unsur tren (kenaikan/penurunan jangka panjang) atau pola musiman secara eksplisit. Oleh karena itu, proyeksi jangka panjang dari model SES akan selalu berbentuk garis mendatar yang merepresentasikan level estimasi terbaik dari periode pemulusan terakhir.
Untuk mempermudah pemangku kepentingan (General Manager) dalam melihat pola pertumbuhan penjualan historis dan membandingkannya dengan garis estimasi SES, saya memvisualisasikannya ke dalam grafik interaktif di bawah ini. Anda dapat mengarahkan kursor ke atas garis untuk melihat nilai eksaknya secara detail.
plot_ts <- autoplot(model_ses) +
autolayer(model_ses$fitted, series="Data Historis Terhaluskan") +
ggtitle("Tren Historis Penjualan (2021-2025) & Hasil Peramalan SES (2026)") +
xlab("Pergerakan Waktu (Tahun)") +
ylab("Volume Penjualan") +
theme_minimal() +
theme(
legend.position = "bottom",
plot.title = element_text(face = "bold", hjust = 0.5)
)
ggplotly(plot_ts)