Tugas Pertemuan 12

Mata Kuliah Ekonometrika

Valensius Jimy

May 06, 2024

Kontak \(\downarrow\)
Email
Instagram https://www.instagram.com/valjimy_/
RPubs https://rpubs.com/valensiusjimy/

1 Pendahuluan

  Dalam praktikum ini, tujuan utama kita adalah untuk mengembangkan pemahaman yang mendalam tentang faktor-faktor yang mempengaruhi pendapatan penjualan suatu perusahaan. Kita akan menggunakan dua pendekatan utama untuk mencapai tujuan ini. Pertama, kita akan membangun sebuah model regresi yang akan membantu kita mengidentifikasi dan memahami hubungan antara pendapatan penjualan dengan variabel-variabel prediktor, seperti pengeluaran promosi, harga produk, dan kondisi eksternal seperti cuaca. Dengan model ini, kita berharap dapat mengidentifikasi faktor-faktor yang memiliki dampak signifikan terhadap pendapatan penjualan, sehingga memungkinkan perusahaan untuk mengoptimalkan strategi pemasaran dan penetapan harga.


  Selain itu, kita juga akan membangun model deret waktu yang canggih untuk menganalisis pola dan tren dalam pendapatan penjualan seiring waktu. Model deret waktu ini akan memperhitungkan musiman, pola tahunan, dan faktor-faktor lain yang berkaitan dengan waktu yang mungkin mempengaruhi perilaku penjualan. Dengan memiliki pemahaman yang lebih baik tentang pola dan tren dalam data penjualan, perusahaan dapat membuat perkiraan yang lebih akurat dan merencanakan strategi jangka panjang yang lebih efektif. Dengan menggabungkan kedua pendekatan ini, kita berharap dapat memberikan wawasan yang komprehensif tentang dinamika pendapatan penjualan perusahaan dan mendukung pengambilan keputusan yang lebih baik di masa depan.

2 Import Library

  Proses ini melibatkan penggunaan beberapa paket perangkat lunak dalam bahasa pemrograman R, yaitu ‘tidyverse’, ‘lubridate’, dan ‘ggplot2’, yang digerakkan oleh perintah ‘p_load’ dari paket ‘pacman’. Penggunaan paket-paket ini memungkinkan kita untuk melakukan analisis data, manipulasi data, dan visualisasi data dengan lebih efisien dan efektif dalam lingkungan R. Secara spesifik, paket ‘tidyverse’ menyediakan seperangkat alat yang kuat untuk manipulasi dan visualisasi data, sementara ‘lubridate’ membantu dalam pengolahan data tanggal dan waktu, dan ‘ggplot2’ adalah paket yang sangat berguna untuk membuat grafik dan visualisasi data yang menarik. Dengan menggunakan paket-paket ini, kita dapat memperoleh wawasan yang lebih dalam dari data dan membuat presentasi yang informatif dan menarik dari hasil analisis tersebut.

pacman::p_load(tidyverse,
               lubridate,
               ggplot2,
               plotly,
               forecast,
               reshape2,
               lmtest,
               hrbrthemes,
               corrplot,
               tint,
               tufte,
               prettydoc,
               rmdformats,
               tseries)

3 Import Data

set.seed(10)

n <- 100

start_date <- ymd("2022-01-01")
end_date <- ymd("2022-04-10")
dates <- seq(start_date, end_date, by = "day")

promotional_spending <- runif(n, min = 5000, max = 10000)  
price <- rnorm(n, mean = 100, sd = 30)  
weather_conditions <- sample(c("sunny", "sunny", "sunny", "cloudy", "rainy", "rainy"), size = n, replace = TRUE)

# Simulate sales revenue
sales_trend <- 0.3 * seq(1, n)  
seasonal_pattern <- sin(seq(1, n) * 2 * pi / 365 * 7) * 200  
sales_noise <- rnorm(n, mean = 0, sd = 20)  
sales_revenue <- 2000 + sales_trend + seasonal_pattern + promotional_spending * 2 + price * 4  

simulated_data <- tibble(
  Date = dates,
  Promotional_Spending = promotional_spending,
  Price = price,
  Weather_Conditions = weather_conditions,
  Sales_Revenue = sales_revenue
)

head(simulated_data, 5)
## # A tibble: 5 × 5
##   Date       Promotional_Spending Price Weather_Conditions Sales_Revenue
##   <date>                    <dbl> <dbl> <chr>                      <dbl>
## 1 2022-01-01                7537.  88.0 rainy                     17451.
## 2 2022-01-02                6534.  90.0 cloudy                    15476.
## 3 2022-01-03                7135. 141.  cloudy                    16905.
## 4 2022-01-04                8466. 164.  cloudy                    19681.
## 5 2022-01-05                5426. 115.  rainy                     13427.

  Berdasarkan data yang ada di atas menyajikan data pada rentang tanggal tertentu dengan beberapa variabel independen dan satu variabel dependen. Variabel independen termasuk Pengeluaran Promosi, Harga, dan Kondisi Cuaca, sedangkan variabel dependen adalah Pendapatan Penjualan. Setiap baris dalam DataFrame mewakili data untuk satu hari tertentu, dengan nilai-nilai yang sesuai untuk setiap variabel pada tanggal tersebut. Misalnya, pada tanggal 2022-01-01, Pengeluaran Promosi sebesar 7537.391, Harga sebesar 87.98087, kondisi cuaca adalah hujan, dan Pendapatan Penjualan sebesar 17451.05. Dengan menggunakan DataFrame ini, kita dapat melakukan berbagai analisis statistik dan pemodelan untuk memahami hubungan antara variabel-variabel independen dan variabel dependen, serta untuk membuat perkiraan dan merencanakan strategi bisnis yang lebih baik.

4 Visualisasi Data

4.1 Penjualan Harian

ggplot(simulated_data, aes(x = Date, y = Sales_Revenue)) +
  geom_line(color = "blue") +
  labs(title = "Tren Penjualan Harian",
       x = "Tanggal",
       y = "Pendapatan Penjualan") +
  theme_minimal()

  Grafik di atas menjelaskan bagaimana pergerakan dari tren penjualan secara harian

4.2 Pengeluaran Promosi

ggplot(simulated_data, aes(x = Promotional_Spending)) +
  geom_histogram(binwidth = 500, fill = "orange", color = "black") +
  labs(title = "Distribusi Pengeluaran Promosi",
       x = "Pengeluaran Promosi",
       y = "Frekuensi") +
  theme_minimal()

  Dalam histogram ini, nilai-nilai pengeluaran promosi dibagi menjadi beberapa interval, dan tinggi dari setiap batang menunjukkan jumlah observasi yang jatuh ke dalam interval tersebut. Dengan melihat histogram ini, kita dapat melihat pola distribusi pengeluaran promosi, termasuk apakah distribusinya simetris atau cenderung miring ke kiri atau kanan, serta apakah terdapat outlier atau tidak. Histogram ini memberikan wawasan yang berguna tentang bagaimana pengeluaran promosi tersebar dalam dataset dan membantu dalam pemahaman statistik deskriptif dari variabel tersebut.

4.3 Pembagian Cuaca

ggplot(simulated_data, aes(x = Weather_Conditions)) +
  geom_bar(fill = "indianred") +
  labs(title = "Jumlah Observasi Berdasarkan Kondisi Cuaca",
       x = "Kondisi Cuaca",
       y = "Jumlah Observasi") +
  theme_minimal()

  Berdasarkan grafik di atas disimpulkan bahwa cuaca yang paling banyak dalam data tersebut adalah sunny atau cerah.

5 Regresi

5.1 Matriks Korelasi

  Dalam proses kali ini, kita akan melihat nilai korelasi atau hubungan antara variabel satu dengan yang lainnya untuk nantinya dapat membantu dalam mengecek apakah terdapat multikolinearitas dalam model ini.

correlation_matrix <- cor(simulated_data[, c("Promotional_Spending", "Price", "Sales_Revenue")])

plot_ly(z = correlation_matrix, 
        type = "heatmap", 
        colorscale = "Viridis",
        x = colnames(correlation_matrix), 
        y = colnames(correlation_matrix),
        zmax = 1, zmin = -1, 
        showscale = TRUE) %>%
  layout(title = "Heatmap Korelasi antara Variabel",
         xaxis = list(title = ""),
         yaxis = list(title = ""))

5.2 Model Regresi

model <- lm(Sales_Revenue ~ Promotional_Spending + Price + Weather_Conditions, data = simulated_data)

summary(model)
## 
## Call:
## lm(formula = Sales_Revenue ~ Promotional_Spending + Price + Weather_Conditions, 
##     data = simulated_data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -231.609 -136.577    7.772  137.205  230.541 
## 
## Coefficients:
##                           Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             2025.06737   95.63994  21.174  < 2e-16 ***
## Promotional_Spending       1.99294    0.01114 178.914  < 2e-16 ***
## Price                      4.31363    0.51005   8.457 3.24e-13 ***
## Weather_Conditionsrainy   42.00590   39.10184   1.074    0.285    
## Weather_Conditionssunny   -6.69959   36.36440  -0.184    0.854    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 142.6 on 95 degrees of freedom
## Multiple R-squared:  0.9971, Adjusted R-squared:  0.997 
## F-statistic:  8244 on 4 and 95 DF,  p-value: < 2.2e-16

  Model regresi yang disajikan menunjukkan bahwa variabel independen yang signifikan secara statistik adalah Promotional_Spending dan Price, dengan nilai p-value yang jauh lebih kecil dari tingkat signifikansi yang sebesar 0.05. Hal ini mengindikasikan bahwa terdapat hubungan yang signifikan antara pengeluaran promosi dan harga terhadap pendapatan penjualan. Namun, variabel Weather_Conditions tidak signifikan secara statistik karena p-value nya lebih besar dari 0.05. Nilai R-squared yang sangat tinggi (0.997) menunjukkan bahwa model dapat menjelaskan variasi dalam data penjualan dengan sangat baik. Persamaan modelnya adalah: Sales Revenue = 2025.06737 + 1.99294 Promotional + 4.31 Price + 42 Rainy - 6.69 Sunny.

5.3 Prediksi Menggunakan Regresi

  Prediksi dilakukan untuk memperkirakan atau mengestimasi nilai yang mungkin terjadi di masa depan berdasarkan data historis dan model yang telah dibangun. Tujuan utama dari prediksi adalah untuk membantu dalam pengambilan keputusan dengan memberikan informasi tentang kemungkinan hasil di masa mendatang. Dengan melakukan prediksi, kita dapat merencanakan strategi atau tindakan yang lebih baik, mengantisipasi perubahan pasar, mengelola risiko, serta meningkatkan efisiensi dan efektivitas dalam perencanaan dan pengelolaan sumber daya. Hal ini memungkinkan perusahaan atau organisasi untuk membuat keputusan yang lebih tepat dan adaptif dalam menghadapi kondisi yang tidak pasti di masa depan.

new_promotional_spending <- c(6000, 7000, 8000)  
new_price <- c(90, 95, 100)  
new_weather_conditions <- c("sunny", "rainy", "cloudy") 

new_data <- data.frame(Promotional_Spending = new_promotional_spending,
                       Price = new_price,
                       Weather_Conditions = new_weather_conditions)

predicted_sales <- predict(model, newdata = new_data)
predicted_sales <- predict(model, newdata = simulated_data)
predicted_data <- cbind(simulated_data, Predicted_Sales = predicted_sales)

ggplot(predicted_data, aes(x = Date)) +
  geom_line(aes(y = Sales_Revenue, color = "Actual Sales")) +
  geom_line(aes(y = Predicted_Sales, color = "Predicted Sales"), linetype = "dashed") +
  labs(title = "Perbandingan Sales Revenue Asli dan Prediksi",
       x = "Tanggal",
       y = "Sales Revenue") +
  scale_color_manual(name = "Data", values = c("Actual Sales" = "blue", "Predicted Sales" = "red")) +
  theme_minimal()

  Plot yang menunjukkan bahwa nilai prediksi dan nilai asli memiliki titik-titik yang sama menunjukkan tingkat akurasi yang tinggi dalam model prediksi. Hal ini berarti bahwa model yang dibangun mampu dengan baik dalam memperkirakan nilai sebenarnya berdasarkan data yang tersedia. Dalam konteks ini, plot tersebut mengindikasikan bahwa model prediksi secara efektif mampu menangkap pola dan tren dari data historis sehingga mampu menghasilkan prediksi yang sangat dekat dengan nilai sebenarnya. Hasil ini memberikan keyakinan bahwa model tersebut dapat diandalkan dalam memprediksi nilai di masa depan, sehingga memungkinkan pengguna untuk membuat keputusan yang lebih tepat dan akurat.

5.4 Heteroskedasitas

  Uji heteroskedastisitas menggunakan Breusch-Pagan (BP) test dilakukan untuk memeriksa apakah ada pola variansi yang tidak konstan dalam residu model regresi. Hal ini penting karena asumsi homoskedastisitas harus terpenuhi agar estimasi koefisien regresi dan uji hipotesis yang dilakukan melalui model regresi menjadi konsisten dan efisien. Dengan mengidentifikasi keberadaan heteroskedastisitas, kita dapat menyesuaikan model regresi secara tepat, misalnya, dengan melakukan transformasi data atau menggunakan metode estimasi yang robust terhadap pelanggaran asumsi tersebut. Dengan demikian, uji heteroskedastisitas memberikan informasi kritis dalam meningkatkan keandalan dan akurasi hasil analisis regresi, serta membantu dalam membuat keputusan yang lebih baik berdasarkan model yang lebih baik disesuaikan dengan kondisi sebenarnya dari data yang diamati.

bptest(model)
## 
##  studentized Breusch-Pagan test
## 
## data:  model
## BP = 3.4969, df = 4, p-value = 0.4783

  Dari hasil uji Breusch-Pagan (BP) dengan p-value sebesar 0.4783, dapat disimpulkan bahwa tidak terdapat cukup bukti statistik untuk menolak asumsi homoskedastisitas pada model regresi. Hal ini menunjukkan bahwa variansi dari residu regresi tidak bergantung pada nilai-nilai prediktor atau independen dalam model. Dengan kata lain, kita tidak memiliki cukup bukti untuk menyatakan adanya heteroskedastisitas dalam model tersebut, sehingga asumsi homoskedastisitas dapat dianggap terpenuhi.

6 Time Series

  Dalam bagian ini, kita akan membangun sebuah model deret waktu untuk menangkap pola temporal dan tren dalam pendapatan penjualan, dengan mempertimbangkan musiman dan efek lain yang berkaitan dengan waktu. Pendekatan ini penting karena pendapatan penjualan sering dipengaruhi oleh faktor-faktor musiman seperti perubahan musim atau hari libur tertentu, yang dapat memengaruhi pola dan tren dari data sepanjang waktu. Dengan membangun model deret waktu yang memperhitungkan efek-efek ini, kita dapat lebih baik dalam meramalkan pendapatan penjualan di masa depan, serta memahami dinamika dan faktor-faktor yang memengaruhinya secara lebih mendalam.

6.1 Model Time Series

  Dalam upaya untuk memodelkan dan memprediksi data deret waktu dengan lebih baik, kami akan menggunakan metode ARIMA (Autoregressive Integrated Moving Average). Pada proses ini, kami akan melakukan dekomposisi tren dari data time series yang ada. Melalui dekomposisi ini, kami akan memisahkan data menjadi komponen tren, musiman, dan siklus, yang akan membantu kami memahami pola dan struktur intrinsik dari data tersebut. Dengan memahami pola-pola ini, kami dapat memperoleh wawasan yang lebih mendalam tentang perilaku data seiring waktu dan menghasilkan prediksi yang lebih akurat menggunakan model ARIMA.

simulated_data$Date <- as.Date(simulated_data$Date)
ts_data <- ts(simulated_data$Sales_Revenue, start = c(year(simulated_data$Date[1]), month(simulated_data$Date[1])), frequency = 12)

arima_model <- auto.arima(ts_data)

summary(arima_model)
## Series: ts_data 
## ARIMA(0,0,0) with non-zero mean 
## 
## Coefficients:
##             mean
##       16875.6029
## s.e.    259.2597
## 
## sigma^2 = 6789446:  log likelihood = -927.94
## AIC=1859.87   AICc=1859.99   BIC=1865.08
## 
## Training set error measures:
##                        ME     RMSE     MAE       MPE     MAPE      MASE
## Training set -4.32931e-12 2592.596 2170.41 -2.430615 13.28417 0.6883129
##                    ACF1
## Training set 0.01634766

  Plot ACF (Autocorrelation Function) adalah alat yang berguna untuk menganalisis struktur keterkaitan antara observasi dalam data time series. Pada grafik ACF, sumbu horizontal mewakili lag (waktu antara pengamatan), sedangkan sumbu vertikal menunjukkan nilai korelasi antara observasi yang dipisahkan oleh lag tersebut. Puncak-puncak yang signifikan di atas interval abu-abu menunjukkan autocorrelation yang signifikan pada lag-lag tersebut. Dengan menganalisis plot ACF, kita dapat mengidentifikasi pola-pola musiman, tren, atau efek lain dalam data, serta memperkirakan parameter-model untuk model time series yang lebih kompleks. Kesimpulannya, plot ACF adalah alat penting dalam memahami struktur dan dinamika dari data time series, membantu dalam pengambilan keputusan terkait peramalan dan analisis tren.

acf(ts_data)

plot(acf(ts_data), main = "Autocorrelation Function (ACF)")

forecast_arima <- forecast(arima_model, h = 12)

plot_time_series <- plot_ly(x = ~time(ts_data), y = ~as.numeric(ts_data), type = 'scatter', mode = 'lines', name = 'Actual') %>%
  add_trace(x = time(forecast_arima$mean), y = forecast_arima$mean, mode = 'lines', name = 'Predicted (ARIMA)') %>%
  layout(title = 'Actual vs. Predicted Values - ARIMA Model',
         xaxis = list(title = 'Time'),
         yaxis = list(title = 'Sales Revenue'))

plot_time_series
plot(forecast_arima, main = "Forecasted Sales Revenue using ARIMA Model")

decomposed <- decompose(ts_data)

trend <- decomposed$trend
seasonal <- decomposed$seasonal
cycle <- decomposed$random

decomposition_data <- data.frame(Date = time(ts_data), Trend = trend, Seasonal = seasonal, Cycle = cycle)
melted_data <- melt(decomposition_data, id.vars = "Date")
melted_data
##         Date variable       value
## 1   2022.000    Trend          NA
## 2   2022.083    Trend          NA
## 3   2022.167    Trend          NA
## 4   2022.250    Trend          NA
## 5   2022.333    Trend          NA
## 6   2022.417    Trend          NA
## 7   2022.500    Trend 16602.59334
## 8   2022.583    Trend 16574.06615
## 9   2022.667    Trend 16679.46481
## 10  2022.750    Trend 16543.93417
## 11  2022.833    Trend 16423.42884
## 12  2022.917    Trend 16424.88623
## 13  2023.000    Trend 16495.51057
## 14  2023.083    Trend 16779.71216
## 15  2023.167    Trend 17111.01967
## 16  2023.250    Trend 17282.47724
## 17  2023.333    Trend 17394.99698
## 18  2023.417    Trend 17349.18699
## 19  2023.500    Trend 17367.31190
## 20  2023.583    Trend 17520.95377
## 21  2023.667    Trend 17741.68185
## 22  2023.750    Trend 17823.51748
## 23  2023.833    Trend 18007.32776
## 24  2023.917    Trend 18325.48912
## 25  2024.000    Trend 18409.55687
## 26  2024.083    Trend 18140.56339
## 27  2024.167    Trend 17526.50468
## 28  2024.250    Trend 17346.49468
## 29  2024.333    Trend 17315.56462
## 30  2024.417    Trend 17321.57642
## 31  2024.500    Trend 17652.63315
## 32  2024.583    Trend 17928.45455
## 33  2024.667    Trend 17959.39136
## 34  2024.750    Trend 17994.21441
## 35  2024.833    Trend 17890.21400
## 36  2024.917    Trend 17616.56581
## 37  2025.000    Trend 17328.81082
## 38  2025.083    Trend 17376.94494
## 39  2025.167    Trend 17680.25027
## 40  2025.250    Trend 17395.91621
## 41  2025.333    Trend 16902.20955
## 42  2025.417    Trend 16624.18834
## 43  2025.500    Trend 16225.43647
## 44  2025.583    Trend 15865.63621
## 45  2025.667    Trend 15674.63983
## 46  2025.750    Trend 15738.51957
## 47  2025.833    Trend 15924.58327
## 48  2025.917    Trend 16034.36379
## 49  2026.000    Trend 16231.16117
## 50  2026.083    Trend 16258.97087
## 51  2026.167    Trend 16304.82888
## 52  2026.250    Trend 16541.15023
## 53  2026.333    Trend 16862.52680
## 54  2026.417    Trend 17066.38657
## 55  2026.500    Trend 17060.25802
## 56  2026.583    Trend 16757.29176
## 57  2026.667    Trend 16539.10859
## 58  2026.750    Trend 16377.78997
## 59  2026.833    Trend 16420.22850
## 60  2026.917    Trend 16805.98174
## 61  2027.000    Trend 17102.31248
## 62  2027.083    Trend 17223.84757
## 63  2027.167    Trend 17021.91959
## 64  2027.250    Trend 16782.67361
## 65  2027.333    Trend 16551.70312
## 66  2027.417    Trend 16416.01053
## 67  2027.500    Trend 16680.52398
## 68  2027.583    Trend 17094.67408
## 69  2027.667    Trend 17072.55409
## 70  2027.750    Trend 16947.35338
## 71  2027.833    Trend 16798.11893
## 72  2027.917    Trend 16665.53386
## 73  2028.000    Trend 16587.85262
## 74  2028.083    Trend 16321.34376
## 75  2028.167    Trend 16517.09830
## 76  2028.250    Trend 16922.01257
## 77  2028.333    Trend 17055.16420
## 78  2028.417    Trend 17120.03872
## 79  2028.500    Trend 16946.52796
## 80  2028.583    Trend 16530.75865
## 81  2028.667    Trend 16615.56378
## 82  2028.750    Trend 16806.10150
## 83  2028.833    Trend 16598.51421
## 84  2028.917    Trend 16177.75229
## 85  2029.000    Trend 15932.25907
## 86  2029.083    Trend 16218.04204
## 87  2029.167    Trend 16286.96922
## 88  2029.250    Trend 16174.59641
## 89  2029.333    Trend 16271.90267
## 90  2029.417    Trend 16442.34180
## 91  2029.500    Trend 16561.25915
## 92  2029.583    Trend 16808.55435
## 93  2029.667    Trend 17016.28442
## 94  2029.750    Trend 16899.14095
## 95  2029.833    Trend          NA
## 96  2029.917    Trend          NA
## 97  2030.000    Trend          NA
## 98  2030.083    Trend          NA
## 99  2030.167    Trend          NA
## 100 2030.250    Trend          NA
## 101 2022.000 Seasonal -1192.87204
## 102 2022.083 Seasonal   888.48798
## 103 2022.167 Seasonal   517.38351
## 104 2022.250 Seasonal   239.20406
## 105 2022.333 Seasonal  -626.88998
## 106 2022.417 Seasonal   106.68209
## 107 2022.500 Seasonal -1081.18038
## 108 2022.583 Seasonal   358.47977
## 109 2022.667 Seasonal   399.35982
## 110 2022.750 Seasonal   222.10877
## 111 2022.833 Seasonal  -862.05074
## 112 2022.917 Seasonal  1031.28713
## 113 2023.000 Seasonal -1192.87204
## 114 2023.083 Seasonal   888.48798
## 115 2023.167 Seasonal   517.38351
## 116 2023.250 Seasonal   239.20406
## 117 2023.333 Seasonal  -626.88998
## 118 2023.417 Seasonal   106.68209
## 119 2023.500 Seasonal -1081.18038
## 120 2023.583 Seasonal   358.47977
## 121 2023.667 Seasonal   399.35982
## 122 2023.750 Seasonal   222.10877
## 123 2023.833 Seasonal  -862.05074
## 124 2023.917 Seasonal  1031.28713
## 125 2024.000 Seasonal -1192.87204
## 126 2024.083 Seasonal   888.48798
## 127 2024.167 Seasonal   517.38351
## 128 2024.250 Seasonal   239.20406
## 129 2024.333 Seasonal  -626.88998
## 130 2024.417 Seasonal   106.68209
## 131 2024.500 Seasonal -1081.18038
## 132 2024.583 Seasonal   358.47977
## 133 2024.667 Seasonal   399.35982
## 134 2024.750 Seasonal   222.10877
## 135 2024.833 Seasonal  -862.05074
## 136 2024.917 Seasonal  1031.28713
## 137 2025.000 Seasonal -1192.87204
## 138 2025.083 Seasonal   888.48798
## 139 2025.167 Seasonal   517.38351
## 140 2025.250 Seasonal   239.20406
## 141 2025.333 Seasonal  -626.88998
## 142 2025.417 Seasonal   106.68209
## 143 2025.500 Seasonal -1081.18038
## 144 2025.583 Seasonal   358.47977
## 145 2025.667 Seasonal   399.35982
## 146 2025.750 Seasonal   222.10877
## 147 2025.833 Seasonal  -862.05074
## 148 2025.917 Seasonal  1031.28713
## 149 2026.000 Seasonal -1192.87204
## 150 2026.083 Seasonal   888.48798
## 151 2026.167 Seasonal   517.38351
## 152 2026.250 Seasonal   239.20406
## 153 2026.333 Seasonal  -626.88998
## 154 2026.417 Seasonal   106.68209
## 155 2026.500 Seasonal -1081.18038
## 156 2026.583 Seasonal   358.47977
## 157 2026.667 Seasonal   399.35982
## 158 2026.750 Seasonal   222.10877
## 159 2026.833 Seasonal  -862.05074
## 160 2026.917 Seasonal  1031.28713
## 161 2027.000 Seasonal -1192.87204
## 162 2027.083 Seasonal   888.48798
## 163 2027.167 Seasonal   517.38351
## 164 2027.250 Seasonal   239.20406
## 165 2027.333 Seasonal  -626.88998
## 166 2027.417 Seasonal   106.68209
## 167 2027.500 Seasonal -1081.18038
## 168 2027.583 Seasonal   358.47977
## 169 2027.667 Seasonal   399.35982
## 170 2027.750 Seasonal   222.10877
## 171 2027.833 Seasonal  -862.05074
## 172 2027.917 Seasonal  1031.28713
## 173 2028.000 Seasonal -1192.87204
## 174 2028.083 Seasonal   888.48798
## 175 2028.167 Seasonal   517.38351
## 176 2028.250 Seasonal   239.20406
## 177 2028.333 Seasonal  -626.88998
## 178 2028.417 Seasonal   106.68209
## 179 2028.500 Seasonal -1081.18038
## 180 2028.583 Seasonal   358.47977
## 181 2028.667 Seasonal   399.35982
## 182 2028.750 Seasonal   222.10877
## 183 2028.833 Seasonal  -862.05074
## 184 2028.917 Seasonal  1031.28713
## 185 2029.000 Seasonal -1192.87204
## 186 2029.083 Seasonal   888.48798
## 187 2029.167 Seasonal   517.38351
## 188 2029.250 Seasonal   239.20406
## 189 2029.333 Seasonal  -626.88998
## 190 2029.417 Seasonal   106.68209
## 191 2029.500 Seasonal -1081.18038
## 192 2029.583 Seasonal   358.47977
## 193 2029.667 Seasonal   399.35982
## 194 2029.750 Seasonal   222.10877
## 195 2029.833 Seasonal  -862.05074
## 196 2029.917 Seasonal  1031.28713
## 197 2030.000 Seasonal -1192.87204
## 198 2030.083 Seasonal   888.48798
## 199 2030.167 Seasonal   517.38351
## 200 2030.250 Seasonal   239.20406
## 201 2022.000    Cycle          NA
## 202 2022.083    Cycle          NA
## 203 2022.167    Cycle          NA
## 204 2022.250    Cycle          NA
## 205 2022.333    Cycle          NA
## 206 2022.417    Cycle          NA
## 207 2022.500    Cycle  -332.87874
## 208 2022.583    Cycle -1578.85231
## 209 2022.667    Cycle  1581.47464
## 210 2022.750    Cycle   155.35825
## 211 2022.833    Cycle  3403.98002
## 212 2022.917    Cycle   768.50746
## 213 2023.000    Cycle -1663.28928
## 214 2023.083    Cycle   934.71816
## 215 2023.167    Cycle -1321.01463
## 216 2023.250    Cycle  -495.47575
## 217 2023.333    Cycle -3578.07944
## 218 2023.417    Cycle -2301.16660
## 219 2023.500    Cycle   325.53852
## 220 2023.583    Cycle  2871.96231
## 221 2023.667    Cycle  3072.93570
## 222 2023.750    Cycle   437.07854
## 223 2023.833    Cycle  2959.25122
## 224 2023.917    Cycle -3370.70533
## 225 2024.000    Cycle  -903.72782
## 226 2024.083    Cycle   587.66391
## 227 2024.167    Cycle  2547.17742
## 228 2024.250    Cycle -2879.11510
## 229 2024.333    Cycle  3232.42159
## 230 2024.417    Cycle -1368.75204
## 231 2024.500    Cycle  1153.03912
## 232 2024.583    Cycle -5104.20368
## 233 2024.667    Cycle -4313.51786
## 234 2024.750    Cycle  3114.88581
## 235 2024.833    Cycle  -514.46061
## 236 2024.917    Cycle  1073.32662
## 237 2025.000    Cycle  4387.27116
## 238 2025.083    Cycle  3760.74308
## 239 2025.167    Cycle   726.45457
## 240 2025.250    Cycle  -425.80626
## 241 2025.333    Cycle -1352.96360
## 242 2025.417    Cycle -2240.18007
## 243 2025.500    Cycle -2757.06793
## 244 2025.583    Cycle  3451.13731
## 245 2025.667    Cycle -1241.96121
## 246 2025.750    Cycle -2240.24172
## 247 2025.833    Cycle -2786.96736
## 248 2025.917    Cycle   221.15687
## 249 2026.000    Cycle -1650.75216
## 250 2026.083    Cycle  3379.18394
## 251 2026.167    Cycle  -982.50402
## 252 2026.250    Cycle  5046.45347
## 253 2026.333    Cycle -1465.24576
## 254 2026.417    Cycle   104.31914
## 255 2026.500    Cycle -1655.44991
## 256 2026.583    Cycle  1290.47499
## 257 2026.667    Cycle   263.16895
## 258 2026.750    Cycle   422.60154
## 259 2026.833    Cycle  1128.31136
## 260 2026.917    Cycle   -68.75066
## 261 2027.000    Cycle -3150.69909
## 262 2027.083    Cycle -4228.08715
## 263 2027.167    Cycle  -293.59650
## 264 2027.250    Cycle  -472.71503
## 265 2027.333    Cycle  5141.74768
## 266 2027.417    Cycle  3716.60324
## 267 2027.500    Cycle  2874.31383
## 268 2027.583    Cycle  -280.09482
## 269 2027.667    Cycle -3883.36059
## 270 2027.750    Cycle -2275.78131
## 271 2027.833    Cycle -2664.05143
## 272 2027.917    Cycle   229.54735
## 273 2028.000    Cycle  3554.23347
## 274 2028.083    Cycle   423.54634
## 275 2028.167    Cycle -4068.78460
## 276 2028.250    Cycle   663.13832
## 277 2028.333    Cycle  -218.53245
## 278 2028.417    Cycle  4687.35229
## 279 2028.500    Cycle  -930.81711
## 280 2028.583    Cycle -2573.26515
## 281 2028.667    Cycle  4128.82463
## 282 2028.750    Cycle    28.21810
## 283 2028.833    Cycle -1431.55510
## 284 2028.917    Cycle  1241.42579
## 285 2029.000    Cycle  -478.52819
## 286 2029.083    Cycle -4763.26018
## 287 2029.167    Cycle  3486.77586
## 288 2029.250    Cycle -1341.97155
## 289 2029.333    Cycle -1664.83991
## 290 2029.417    Cycle -2503.66785
## 291 2029.500    Cycle  1431.33147
## 292 2029.583    Cycle  2030.85061
## 293 2029.667    Cycle   500.44500
## 294 2029.750    Cycle   465.89004
## 295 2029.833    Cycle          NA
## 296 2029.917    Cycle          NA
## 297 2030.000    Cycle          NA
## 298 2030.083    Cycle          NA
## 299 2030.167    Cycle          NA
## 300 2030.250    Cycle          NA
ggplot(melted_data, aes(x = Date, y = value, color = variable)) +
  geom_line() +
  facet_wrap(~ variable, scales = "free_y", nrow = 3) +
  labs(title = "Decomposition of Time Series Data",
       x = "Date",
       y = "Value") +
  theme_minimal()
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.

7 Perbandingan Model

  Dalam menjalankan perbandingan kinerja dua model yang berbeda untuk meramalkan pendapatan penjualan di masa depan, kita akan mempertimbangkan keunggulan dan kelemahan masing-masing model. Model regresi akan memberikan wawasan tentang hubungan antara variabel prediktor seperti pengeluaran promosi, harga, dan faktor eksternal dengan pendapatan penjualan. Di sisi lain, model deret waktu akan menangkap pola dan tren temporal dari data, mengakomodasi musiman dan efek waktu lainnya. Dengan membandingkan prediksi dari kedua model, kita akan mengevaluasi keakuratannya dan memilih model yang paling sesuai untuk meramalkan pendapatan penjualan di masa mendatang.

regression_forecast_values <- predict(model, newdata = simulated_data)
regression_rmse <- sqrt(mean((simulated_data$Sales_Revenue - regression_forecast_values)^2))

arima_forecast_values <- forecast_arima$mean[1:length(ts_data)]
arima_rmse <- sqrt(mean((as.vector(ts_data) - arima_forecast_values)^2, na.rm = TRUE))

cat("RMSE untuk model regresi:", regression_rmse, "\n")
## RMSE untuk model regresi: 138.9535
cat("RMSE untuk model ARIMA:", arima_rmse, "\n")
## RMSE untuk model ARIMA: 1838.601

  Dalam hasil evaluasi model, RMSE (Root Mean Square Error) digunakan sebagai metrik untuk menilai seberapa baik kedua model, yaitu model regresi dan model ARIMA, dalam memprediksi nilai sales revenue di masa depan. Nilai RMSE yang lebih rendah menunjukkan tingkat kesalahan yang lebih kecil dalam prediksi. Dalam hal ini, model regresi memiliki RMSE sebesar 138.9535, sedangkan model ARIMA memiliki RMSE sebesar 1838.601. Dari hasil tersebut, dapat disimpulkan bahwa model regresi memiliki tingkat kesalahan yang lebih rendah dibandingkan dengan model ARIMA, sehingga dapat dianggap lebih baik dalam memprediksi sales revenue di masa depan. Namun, perlu diingat bahwa nilai RMSE harus dibandingkan dengan konteks dan karakteristik data untuk mendapatkan pemahaman yang lebih mendalam tentang kinerja model.