Ujian Akhir Semester

Mata Kuliah Ekonometrika

Valensius Jimy

May 26, 2024

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

1 Pendahuluan

  Pada tugas akhir mata kuliah “Ekonometrika” ini, penulis diberikan dua kasus yang berkaitan dengan analisis regresi dan runtun waktu. Analisis regresi digunakan untuk memahami hubungan antara variabel independen dan variabel dependen, sedangkan analisis runtun waktu digunakan untuk memprediksi data berdasarkan pola historisnya. Melalui pendekatan ini, penulis akan melakukan estimasi model ekonometrika yang relevan, menguji validitas model tersebut, dan memvisualisasikan hasilnya dalam bentuk grafik yang informatif. Visualisasi ini bertujuan untuk menyampaikan informasi yang kompleks dengan cara yang lebih mudah dipahami oleh pemangku kepentingan. Hasil dari analisis ini diharapkan dapat memberikan wawasan yang berguna dan menjadi dasar bagi perumusan strategi kebijakan yang lebih baik di masa depan.

2 Packages Olah Data

  Dalam melakukan proses pengolahan, analisis dan visualisasi data yang terdapat pada kasus kali ini akan digunakan beberapa packages bawaan dari Rstudio yang diandalkan oleh penulis dalam membantu proses pengerjaan. Adapun packages yang digunakan sebagai berikut ini:

pacman::p_load(tibble,
               ggplot2,
               plotly,
               reshape2,
               corrplot,
               MASS,
               car,
               lmtest,
               lmridge,
               glmnet,
               forecast,
               tseries,
               readxl,
               randomForest,
               caret)

3 Kasus Pertama

  Pada kasus pertama dalam tugas akhir mata kuliah “Ekonometrika” ini, penulis akan menganalisis data penjualan bulanan sebuah perusahaan dengan menggunakan analisis regresi. Data ini mencakup berbagai faktor yang dapat mempengaruhi penjualan produk, seperti pengeluaran untuk iklan, kualitas produk, harga produk, promosi penjualan, serta pengeluaran untuk pemasaran online dan offline. Tujuan dari analisis ini adalah untuk memahami sejauh mana masing-masing faktor tersebut berkontribusi terhadap jumlah penjualan produk. Dengan memodelkan hubungan antara variabel-variabel ini, penulis berharap dapat menghasilkan informasi yang berguna bagi perusahaan dalam merancang strategi pemasaran yang lebih efektif dan efisien di masa depan. Selain itu, hasil analisis ini juga diharapkan dapat menjadi bahan pertimbangan dalam pengambilan keputusan yang lebih tepat guna meningkatkan kinerja penjualan produk perusahaan.

3.1 Data Kasus

  Adapun berikut ini adalah data yang akan diolah dan dianalisis dalam kasus yang pertama ini:

sales_data <- tibble::tibble(
  Month = seq.Date(from = as.Date("2019-01-01"), to = as.Date("2024-05-01"), by = "1 month"),
  Advertising_Expense = c(50, 75, 60, 65, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, 365, 370, 375, 380),
  Product_Quality = c(20, 25, 22, 23, 28, 30, 32, 35, 38, 40, 42, 45, 48, 50, 55, 60, 65, 68, 70, 72, 75, 78, 80, 82, 85, 88, 90, 92, 95, 98, 100, 102, 105, 108, 110, 112, 115, 118, 120, 122, 125, 128, 130, 132, 135, 138, 140, 142, 145, 148, 150, 152, 155, 158, 160, 162, 165, 168, 170, 172, 175, 178, 180, 182, 185),
  Product_Price = c(95, 112, 107,100, 110, 105, 108, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, 365, 370, 375, 380, 385, 390, 395, 400),
  Sales_Promotion = c(15, 20, 18, 19, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142),
  Online_Marketing = c(76, 77, 78, 79, 80, 85, 82, 84, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200),
  Offline_Marketing = c(84,85, 87, 89, 89, 90, 95, 92, 94, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208),
  Product_Sales = c(200, 220, 210, 215, 230, 240, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430, 435, 440, 445, 450, 455, 460, 465, 470, 475, 480, 485, 490, 495, 500, 505, 510, 515, 520, 525, 530, 535, 540)
)

head(sales_data, 10)
## # A tibble: 10 × 8
##    Month      Advertising_Expense Product_Quality Product_Price Sales_Promotion
##    <date>                   <dbl>           <dbl>         <dbl>           <dbl>
##  1 2019-01-01                  50              20            95              15
##  2 2019-02-01                  75              25           112              20
##  3 2019-03-01                  60              22           107              18
##  4 2019-04-01                  65              23           100              19
##  5 2019-05-01                  80              28           110              22
##  6 2019-06-01                  85              30           105              24
##  7 2019-07-01                  90              32           108              26
##  8 2019-08-01                  95              35           115              28
##  9 2019-09-01                 100              38           120              30
## 10 2019-10-01                 105              40           125              32
## # ℹ 3 more variables: Online_Marketing <dbl>, Offline_Marketing <dbl>,
## #   Product_Sales <dbl>


Dataset ini mencakup variabel-variabel berikut:

  • Month: Bulan pengamatan.
  • Advertising_Expense: Jumlah pengeluaran untuk iklan (dalam dolar).
  • Product_Quality: Skor kualitas produk (dalam skala 1 hingga 100).
  • Product_Price: Harga produk (dalam dolar).
  • Sales_Promotion: Pengeluaran untuk promosi penjualan (dalam dolar).
  • Online_Marketing: Pengeluaran untuk pemasaran online (dalam dolar).
  • Offline_Marketing: Pengeluaran untuk pemasaran offline (dalam dolar).
  • Product_Sales: Jumlah produk yang terjual.

3.2 Exploratory Data Analysis (EDA)

  Exploratory Data Analysis (EDA) adalah proses awal dalam analisis data yang bertujuan untuk memahami karakteristik, pola, dan hubungan dalam dataset sebelum melakukan analisis yang lebih mendalam. Dalam EDA, berbagai teknik statistik dan visualisasi digunakan untuk menggambarkan distribusi data, mendeteksi anomali, dan mengidentifikasi korelasi antar variabel. EDA sangat penting dilakukan karena membantu peneliti atau analis data untuk mendapatkan wawasan awal yang dapat memandu langkah-langkah analisis selanjutnya. Dalam kasus pertama ini, EDA akan digunakan untuk menganalisis data penjualan bulanan perusahaan, termasuk variabel seperti pengeluaran iklan, kualitas produk, harga produk, promosi penjualan, pemasaran online, dan pemasaran offline. Dengan melakukan EDA, penulis dapat mengidentifikasi tren penjualan, variasi musiman, serta hubungan antara faktor-faktor pemasaran dan jumlah produk yang terjual. Hasil dari EDA ini akan memberikan dasar yang kuat untuk membangun model regresi yang akurat dan memahami dinamika penjualan perusahaan secara lebih mendalam.

3.2.1 Statistik Deskriptif

  Pada bagian ini, penulis akan menghitung secara statistik deskriptif terkait dengan setiap variabel yang terdapat pada data tersebut. Tujuannya adalah untuk melihat secara garis besar simpulan data dengan sederhana.

summary(sales_data)
##      Month            Advertising_Expense Product_Quality Product_Price  
##  Min.   :2019-01-01   Min.   : 50.0       Min.   : 20.0   Min.   : 95.0  
##  1st Qu.:2020-05-01   1st Qu.:140.0       1st Qu.: 65.0   1st Qu.:160.0  
##  Median :2021-09-01   Median :220.0       Median :105.0   Median :240.0  
##  Mean   :2021-08-31   Mean   :219.7       Mean   :103.4   Mean   :241.1  
##  3rd Qu.:2023-01-01   3rd Qu.:300.0       3rd Qu.:145.0   3rd Qu.:320.0  
##  Max.   :2024-05-01   Max.   :380.0       Max.   :185.0   Max.   :400.0  
##  Sales_Promotion  Online_Marketing Offline_Marketing Product_Sales  
##  Min.   : 15.00   Min.   : 76.0    Min.   : 84.0     Min.   :200.0  
##  1st Qu.: 46.00   1st Qu.:104.0    1st Qu.:112.0     1st Qu.:300.0  
##  Median : 78.00   Median :136.0    Median :144.0     Median :380.0  
##  Mean   : 78.06   Mean   :136.1    Mean   :144.2     Mean   :378.8  
##  3rd Qu.:110.00   3rd Qu.:168.0    3rd Qu.:176.0     3rd Qu.:460.0  
##  Max.   :142.00   Max.   :200.0    Max.   :208.0     Max.   :540.0

  Berdasarkan hasil statistik deskriptif dataset, variabel waktu pengamatan (Month) mencakup periode dari Januari 2019 hingga Mei 2024. Pengeluaran iklan (Advertising_Expense) bervariasi dari 50 hingga 380 dolar, dengan rata-rata pengeluaran sekitar 219.7 dolar. Skor kualitas produk (Product_Quality) berkisar antara 20 hingga 185, dengan nilai rata-rata 103.4. Harga produk (Product_Price) berkisar antara 95 hingga 400 dolar, dengan rata-rata harga 241.1 dolar. Pengeluaran untuk promosi penjualan (Sales_Promotion) bervariasi dari 15 hingga 142 dolar, dengan rata-rata pengeluaran 78.06 dolar. Pengeluaran untuk pemasaran online (Online_Marketing) bervariasi dari 76 hingga 200 dolar, dengan rata-rata 136.1 dolar. Pengeluaran untuk pemasaran offline (Offline_Marketing) berkisar antara 84 hingga 208 dolar, dengan rata-rata 144.2 dolar. Penjualan produk (Product_Sales) berkisar antara 200 hingga 540 unit, dengan rata-rata penjualan 378.8 unit. Informasi ini memberikan gambaran umum mengenai distribusi dan kecenderungan setiap variabel dalam dataset, yang penting untuk memahami karakteristik data sebelum melakukan analisis lebih lanjut.

3.2.2 Hubungan Pengeluaran Iklan dan Penjualan

  Dalam bagian ini, penulis ini melihat hubungan antara pengeluaran atau biaya untuk iklan dengan jumlah produk yang terjual dalam bisnis perusahaan. Penulis akan membuat sebuah grafik yang memiliki garis yang mewakilkan tren dari hubungan tersebut, adapun grafiknya seperti berikut:

ggplot(sales_data, aes(x = Advertising_Expense, y = Product_Sales)) +
  geom_point(color = 'black', size = 2) +
  geom_smooth(method = 'lm', color = 'indianred') +
  labs(title = "Pengeluaran Iklan vs Penjualan Produk",
       x = "Pengeluaran Iklan (dolar)",
       y = "Penjualan Produk") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

  Berdasarkan grafik tersebut dapat diketahui bahwa terdapat hubungan yang linier antara pengeluaran dengan produk yang terjual. Selain itu, tercipta hubungan yang positif juga diantara kedua variabel tersebut, yaitu ketika pengeluaran atau biaya untuk iklan ditingkatkan akan meningkatkan juga produk yang terjual.

3.2.3 Tren Penjualan Bulanan

  Selanjutnya, penulis ingin melihat juga tren penjualan yang terjadi dalam setiap bulannya dalam proses perusahaan ini berjalan. Adapun grafiknya adalah sebagai berikut ini:

ggplot(sales_data, aes(x = Month, y = Product_Sales)) +
  geom_line(color = 'green', size = 1) +
  geom_point(color = 'blue', size = 2) +
  labs(title = "Tren Bulanan Penjualan Produk",
       x = "Bulan",
       y = "Penjualan Produk") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

  Berdasarkan grafik di atas, diketahui bahwa tren penjualan meningkat dalam setiap bulannya dan bahkan dalam periode tahunan juga terus meningkat. Hal ini yang memberikan tanda tanya besar, seperti apa yang menjadi pengaruh dan apakah pada periode selanjutnya akan terus mengalami peningkatan. Dalam menjawab pertanyaan ini, penulis akan terfokus dalam metode regresi dan analisis runtun waktu dalam menjawab setiap opini yang ada.

corr_matrix <- cor(sales_data[, -1])

corrplot(corr_matrix, method = "color", type = "upper", 
         addCoef.col = "black",
         tl.col = "black", tl.srt = 45,
         col = colorRampPalette(c("blue", "white", "red"))(200),
         title = "Matriks Korelasi Antar Variabel", mar=c(0,0,1,0))

  Berdasarkan hasil tersebut diketahui bahwa nilai korelasi antar variabel bernilai 1 semua, itu berarti semua variabel dalam dataset memiliki hubungan linear yang sempurna dan bergerak secara identik. Hal ini menunjukkan bahwa tidak ada variabilitas independen antara variabel-variabel tersebut; setiap perubahan pada satu variabel akan selalu diikuti dengan perubahan yang proporsional pada variabel lainnya. Dalam konteks analisis regresi atau model prediktif lainnya, ini menyebabkan masalah multikolinearitas yang parah. Multikolinearitas tinggi dapat mengganggu estimasi koefisien regresi, membuat mereka menjadi tidak stabil dan sangat sensitif terhadap perubahan kecil pada data. Ini juga dapat menyebabkan kesulitan dalam menginterpretasikan koefisien regresi, karena sulit untuk menentukan pengaruh individu dari masing-masing variabel yang berkorelasi tinggi. Secara keseluruhan, korelasi sempurna antar variabel akan menyebabkan model regresi menjadi tidak reliabel dan tidak dapat digunakan untuk prediksi yang akurat.

3.3 Model Regresi

  Berdasarkan hasil EDA pada bagian sebelumnya, penulis mendapatkan dugaan bahwa terdapat multikolinearitas antar variabel karena dibuktikan dari nilai korelasi yang sempurna. Oleh karena itu, sebelum melakukan perancangan model regresi, penulis ingin memastikan dedngan uji asumsi klasik terkait dengan data yang dimiliki dan untuk membuktikan dengan yakin terkait dengan multikolinearitas data yang terjadi.

3.3.1 Asumsi Klasik

3.3.1.1 Normalitas Residual

  Uji normalitas, seperti yang dilakukan melalui uji Shapiro-Wilk dalam analisis ini, digunakan untuk memeriksa apakah suatu sampel data memiliki distribusi yang mendekati distribusi normal atau tidak. Dalam konteks analisis regresi, penting untuk memastikan bahwa residual (selisih antara nilai observasi dan nilai yang diprediksi oleh model) memiliki distribusi normal, karena keandalan dan validitas dari hasil regresi dapat dipengaruhi oleh asumsi ini. Hasil uji normalitas, seperti nilai p-value dari uji Shapiro-Wilk, memberikan informasi tentang seberapa baik data residual mendekati distribusi normal.


  Dalam menentukan kesimpulan pada uji normalitas ini, penulis akan menentukan taraf signigikansi sebesar 0.05 dengan hipotesis dan kriteria uji seperti berikut ini:


  Hipotesis Uji:
* H0 : Data atau residual berdistribusi normal
* H1 : Data atau residual tidak berdistribusi normal

  Adapun untuk kriteria uji adalah sebagai berikut:
* Jika p-value kurang dari taraf signifikansi, maka H0 ditolak.
* Jika p-value lebih dari taraf signifikansi, maka terima H0.

residuals <- lm(Product_Sales ~ Advertising_Expense + Product_Quality + Product_Price + Sales_Promotion + Online_Marketing + Offline_Marketing, data = sales_data)$residuals

shapiro.test(residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals
## W = 0.67943, p-value = 1.242e-10

  Berdasarkan hasil di atas diketahui bahwa p-value sebesar 1.242e-10 atau 0.0000000001242 yang artinya kurang dari taraf signifikansi dan dapat disimpulkan bahwa H0 ditolak. Artinya, data tersebut memiliki residu yang tidak normal. Selanjutnya, dalam mengatasi permasalahan ini penulis akan menggunakan langkah transformasi Box-Cox, langkahnya seperti berikut ini:

abs_residuals <- abs(residuals)

transformed_residuals <- boxcox(abs_residuals ~ 1, lambda = seq(-2, 2, by = 0.1))

best_lambda <- transformed_residuals$x[which.max(transformed_residuals$y)]
transformed_residuals <- (abs_residuals^best_lambda - 1) / best_lambda

shapiro.test(transformed_residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  transformed_residuals
## W = 0.96753, p-value = 0.08544

  Berdasarkan hasil tersebut diketahui bahwa p-value sebesar 0.08544 yang artinya lebih besar dari taraf signifikansi, sehingga disimpulkan bahwa data atau residu sudah berdistribusi normal.

3.3.1.2 Uji Heteroskedasitas

  Uji heteroskedastisitas digunakan dalam analisis regresi untuk memeriksa apakah variabilitas residual konstan atau tidak sepanjang rentang nilai prediktor. Keberadaan heteroskedastisitas dapat menyebabkan ketidakpastian dalam estimasi parameter regresi dan dapat menghasilkan estimasi standar yang tidak konsisten. Oleh karena itu, uji heteroskedastisitas dilakukan untuk memastikan bahwa asumsi homoskedastisitas, di mana variabilitas residual konstan, terpenuhi. Jika terdeteksi adanya heteroskedastisitas, tindakan koreksi seperti transformasi data atau penggunaan metode estimasi robust mungkin diperlukan untuk memperbaiki hasil analisis regresi dan membuatnya lebih dapat diandalkan. Dengan melakukan uji heteroskedastisitas, kita dapat memastikan keandalan dan validitas hasil dari model regresi yang dibangun.


  Pada pengujian ini, penulis akan menggunakan uji Breusch-Pagan untuk menentukan apakah data yang dimiliki bersifat heteroskedasitas atau homogen terkait dengan variansi residualnya. Oleh karena itu terdapat hipotesis dan kriteria pengujian seperti berikut:


  • H0 : Data atau residual bersifat homogen.
  • H1 : Data atau residual bersifat hetero.

Dengan kriteria uji sebagai berikut:

  • Jika p-value kurang dari taraf signifikansi (sebesar 0.05), maka H0 ditolak.

  • Jika p-value lebih dari taraf signifikansi, maka H0 diterima.

bptest(Product_Sales ~ Advertising_Expense + Product_Quality + Product_Price + Sales_Promotion + Online_Marketing + Offline_Marketing, data = sales_data)
## 
##  studentized Breusch-Pagan test
## 
## data:  Product_Sales ~ Advertising_Expense + Product_Quality + Product_Price +     Sales_Promotion + Online_Marketing + Offline_Marketing
## BP = 40.3, df = 6, p-value = 3.977e-07

  Berdasarkan hasil uji BP di atas, diketahui bahwa p-value yang didapatkan sebesar 3.977e-07 dan nilai ini kurang dari 0.05 yang menjadi taraf signifikansi. Artinya, data residual pada analisis ini bersifat heteroskedasitas.

3.3.1.3 Multikolinearitas

  Multikolinearitas adalah kondisi dalam regresi berganda di mana dua atau lebih variabel independen memiliki korelasi yang sangat tinggi satu sama lain. Keberadaan multikolinearitas dapat menyebabkan beberapa masalah dalam analisis regresi, seperti kesulitan dalam menentukan pengaruh masing-masing variabel independen terhadap variabel dependen, peningkatan varians dari estimasi koefisien regresi, dan hasil yang tidak stabil atau tidak dapat diandalkan dari model regresi. Untuk menentukan apakah ada multikolinearitas, biasanya dilakukan dengan menghitung Variance Inflation Factor (VIF) untuk setiap variabel independen. Jika nilai VIF melebihi ambang batas tertentu (misalnya, lebih dari 10), ini menunjukkan adanya multikolinearitas yang signifikan. Dampak multikolinearitas dapat membuat interpretasi model menjadi tidak akurat dan mengurangi keefektifan model dalam memprediksi nilai yang tepat. Oleh karena itu, penting untuk mendeteksi dan mengatasi multikolinearitas agar model regresi yang digunakan dapat memberikan hasil yang lebih handal dan valid.

vif <- car::vif(lm(Product_Sales ~ Advertising_Expense + Product_Quality + Product_Price + Sales_Promotion + Online_Marketing + Offline_Marketing, data = sales_data))
print(vif)
## Advertising_Expense     Product_Quality       Product_Price     Sales_Promotion 
##           9994.0793            592.2988           1549.4610          43328.2612 
##    Online_Marketing   Offline_Marketing 
##           5182.5024           4096.6433

  Nilai Variance Inflation Factor (VIF) yang diperoleh dari model regresi menunjukkan adanya multikolinearitas yang sangat tinggi di antara variabel independen. Nilai VIF yang sangat besar, seperti 9994.0793 untuk Advertising_Expense, 43328.2612 untuk Sales_Promotion, dan nilai lainnya yang juga sangat tinggi, jauh melebihi ambang batas umum sebesar 10. Ini menunjukkan bahwa variabel-variabel ini sangat berkorelasi satu sama lain, yang dapat menyebabkan kesulitan dalam menginterpretasikan pengaruh masing-masing variabel secara independen. Multikolinearitas yang tinggi dapat meningkatkan varians dari estimasi koefisien regresi, membuat hasil model tidak stabil dan kurang dapat diandalkan.

3.3.2 Regresi Linier Berganda

  Dalam bagian sebelumnya telah diketahui bahwa dalam data ini bersifat multikolinearitas yang sangat tinggi dari batas ambang atau toleransi dalam suatu model regresi, oleh karena itu terdapat opini bahwa model regresi linier berganda yang umumnya digunakan dalam suatu penelitian tidak akan dapat menjelaskan hasil dengan baik dan andal. Namun, penulis ingin mencoba tetap menggunakan regresi berganda dan nantinya dibandingkan dengna regresi alternatif yang dapat mengatasi multikolinearitas. Adapun model menggunakan Regresi Linier Berganda seperti berikut:

model_regresi <- lm(Product_Sales ~ Advertising_Expense + Product_Quality + Product_Price + Sales_Promotion + Online_Marketing + Offline_Marketing, data = sales_data)

summary(model_regresi)
## 
## Call:
## lm(formula = Product_Sales ~ Advertising_Expense + Product_Quality + 
##     Product_Price + Sales_Promotion + Online_Marketing + Offline_Marketing, 
##     data = sales_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.6031 -0.0697 -0.0051  0.0594  3.3179 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         297.58588   17.69853  16.814  < 2e-16 ***
## Advertising_Expense   0.46830    0.09830   4.764 1.31e-05 ***
## Product_Quality       0.12252    0.04597   2.665 0.009955 ** 
## Product_Price        -0.82782    0.03965 -20.880  < 2e-16 ***
## Sales_Promotion       4.68575    0.51594   9.082 9.71e-13 ***
## Online_Marketing     -0.85343    0.17905  -4.767 1.30e-05 ***
## Offline_Marketing    -0.58501    0.15959  -3.666 0.000537 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7478 on 58 degrees of freedom
## Multiple R-squared:  0.9999, Adjusted R-squared:  0.9999 
## F-statistic: 1.78e+05 on 6 and 58 DF,  p-value: < 2.2e-16

  Berdasarkan hasil di atas, dapat diketahui bahwa model sebetulnya sudah sangat baik dengan bukti nilai R-squared yang mendekati sempurna dengan nilai 0.9999 dan berdasarkan model juga dibuktikan bahwa seluruh peubah bebas atau variabel independennya memiliki pengaruh yang signifikan terhadap variabel dependennya. Adapun model yang terbentuk adalah sebagai berikut:
Y = 297.58588 + 0.46830X1 + 0.12252X2 - 0.82782X3 + 4.68575X4 - 0.85343X5 - 0.58501X6
  Hasil estimasi model regresi linier berganda menunjukkan bahwa setiap penambahan satu satuan pada masing-masing variabel independen akan mempengaruhi variabel dependen, yaitu Product_Sales, sebagai berikut: Penambahan satu satuan pada Advertising_Expense akan meningkatkan Product_Sales sebesar 0.46830 satuan, yang signifikan dengan p-value sebesar 1.31e-05. Penambahan satu satuan pada Product_Quality akan meningkatkan Product_Sales sebesar 0.12252 satuan, dengan p-value sebesar 0.009955, menunjukkan signifikansi yang tinggi. Sebaliknya, setiap penambahan satu satuan pada Product_Price akan menurunkan Product_Sales sebesar 0.82782 satuan, sangat signifikan dengan p-value kurang dari 2e-16. Penambahan satu satuan pada Sales_Promotion akan meningkatkan Product_Sales sebesar 4.68575 satuan, yang juga sangat signifikan dengan p-value sebesar 9.71e-13. Namun, penambahan satu satuan pada Online_Marketing dan Offline_Marketing akan menurunkan Product_Sales masing-masing sebesar 0.85343 dan 0.58501 satuan, dengan p-value masing-masing 1.30e-05 dan 0.000537, menunjukkan bahwa variabel ini juga berpengaruh signifikan secara negatif terhadap Product_Sales. Hasil ini mengindikasikan bahwa Advertising_Expense dan Sales_Promotion memiliki dampak positif yang signifikan terhadap penjualan, sedangkan harga produk serta pengeluaran untuk pemasaran online dan offline memiliki dampak negatif.
  Pada kasus ini sangat menarik karena walaupun data bersifat hetero dan multilkolinearitas, tetapi memiliki tingkat r-squared yang sempurna dengan seluruh peubah bebas dapat memberikan pengaruh signifikan terhadpa variabel dependennya. Namun, sebagai seorang statistik tidak dapat menyepelekan permasalahan tersebut, sehingga penulis akan mencoba membandingkan dengan regresi ridge yang merupakan salah satu metode regresi yang dapat mengatasi multikolinearitas.

3.4 Model Regresi Ridge

  Regresi Ridge adalah metode regresi yang digunakan untuk mengatasi masalah multikolinearitas dalam regresi linier berganda. Multikolinearitas terjadi ketika variabel independen sangat berkorelasi satu sama lain, yang dapat menyebabkan estimasi koefisien menjadi tidak stabil dan varians yang tinggi. Regresi Ridge menambahkan penalti terhadap besarnya koefisien ke dalam fungsi kehilangan (loss function), yang mengurangi kompleksitas model dengan mengecilkan koefisien variabel yang berkorelasi tinggi. Penalti ini dikontrol oleh parameter lambda (λ), di mana nilai lambda yang lebih besar meningkatkan penalti dan menyusutkan koefisien lebih banyak. Dengan mengatur nilai lambda, Regresi Ridge membantu dalam mendapatkan model yang lebih stabil dan dapat diandalkan meskipun ada multikolinearitas, serta dapat meningkatkan kemampuan model untuk melakukan prediksi pada data yang belum terlihat (out-of-sample data).

y <- sales_data$Product_Sales
x <- data.matrix(sales_data[2:7])
cv_ridge <- cv.glmnet(x, y, nfolds = 3)
lamop <- cv_ridge$lambda.min
ridge_model <- lmridge::lmridge(Product_Sales ~ Advertising_Expense + Product_Quality + Product_Price + Sales_Promotion + Online_Marketing + Offline_Marketing, data = sales_data, lambda = lamop)

summary(ridge_model)
## 
## Call:
## lmridge.default(formula = Product_Sales ~ Advertising_Expense + 
##     Product_Quality + Product_Price + Sales_Promotion + Online_Marketing + 
##     Offline_Marketing, data = sales_data, lambda = lamop)
## 
## 
## Coefficients: for Ridge parameter K= 0 
##                       Estimate Estimate (Sc) StdErr (Sc) t-value (Sc) Pr(>|t|)
## Intercept             297.5859    15195.3779  23727.1190       0.6404   0.5244
## Advertising_Expense     0.4683      356.1507     74.1244       4.8048   <2e-16
## Product_Quality         0.1225       48.5027     18.0451       2.6879   0.0094
## Product_Price          -0.8278     -614.6462     29.1864     -21.0593   <2e-16
## Sales_Promotion         4.6857     1413.7429    154.3390       9.1600   <2e-16
## Online_Marketing       -0.8534     -256.6126     53.3777      -4.8075   <2e-16
## Offline_Marketing      -0.5850     -175.4596     47.4574      -3.6972   0.0005
##                        
## Intercept              
## Advertising_Expense ***
## Product_Quality     ** 
## Product_Price       ***
## Sales_Promotion     ***
## Online_Marketing    ***
## Offline_Marketing   ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Ridge Summary
##           R2       adj-R2     DF ridge            F          AIC          BIC 
##      0.99990      0.99990      5.99999 181021.26951    -33.18201    251.19946 
## Ridge minimum MSE= 35593.82 at K= 0 
## P-value for F-test ( 5.99999 , 58.99998 ) = 7.286875e-124 
## -------------------------------------------------------------------

  Berdasarkan hasil di atas, model dengan regresi ridge tidak jauh berbeda untuk nilai koefisien dan nilai r-squared juga menyentuh angka hampir sempurna persis dengan regresi biasa.

ridge_vif <- function(model, x, lambda) {
  coef_ridge <- as.matrix(coef(model))
  coef_ridge <- coef_ridge[-1, ]
  cor_matrix <- cor(x)
  vif_values <- diag(solve(cor_matrix + lambda * diag(ncol(x)))) * diag(cor_matrix)
  return(vif_values)
}

vif_ridge <- ridge_vif(ridge_model, x, lamop)
print("VIF Variabel X Regresi Ridge:")
## [1] "VIF Variabel X Regresi Ridge:"
print(vif_ridge)
## Advertising_Expense     Product_Quality       Product_Price     Sales_Promotion 
##           0.4963666           0.4961724           0.4962848           0.4965215 
##    Online_Marketing   Offline_Marketing 
##           0.4964702           0.4964329

  Berdasarkan hasil di atas dapat disimpulkan bahwa dengan menggunakan regresi ridge dapat diatasi permasalahan mengenai multikolineritas berdasarkan nilai VIF yang sudah jauh kurang di bawah nilai 10, bahkan di bawah nilai 5 semua. Jadi, penulis menyimpulkan bahwa permasalahn untuk multikolinearitas sudah terselesaikan dengan baik.

3.5 Analisis Runtun Waktu

  Analisis runtun waktu atau time series analysis, adalah metode statistik yang digunakan untuk menganalisis data yang dihasilkan dari pengamatan berurutan dalam interval waktu yang tetap. Tujuan dari analisis ini adalah untuk memahami pola, tren, dan pola siklus yang mungkin terdapat dalam data tersebut, serta untuk membuat prediksi atau estimasi nilai-nilai di masa depan berdasarkan informasi historis. Metode-metode dalam analisis runtun waktu mencakup teknik-teknik seperti pemulusan (smoothing), dekomposisi, identifikasi model ARIMA (Autoregressive Integrated Moving Average), dan model-model prediksi lainnya. Analisis runtun waktu memiliki aplikasi yang luas dalam berbagai bidang, termasuk ekonomi, keuangan, meteorologi, ilmu sosial, dan lainnya, karena mampu memberikan wawasan yang berharga tentang perilaku data seiring waktu.

sales_ts <- ts(sales_data$Product_Sales, frequency = 12, start = c(2019, 1))

arima_model <- auto.arima(sales_ts)
arima_forecast <- forecast(arima_model, h = 12) 
plot(arima_forecast, main = "Perbandingan Nilai Prediksi dan Aktual",
     xlab = "Tanggal", ylab = "Penjualan Produk", xlim = c(2019, 2025))
lines(sales_ts, col = "blue", lwd = 2)  
legend("topleft", legend = c("Prediksi", "Aktual"), col = c("red", "blue"), lty = 1, lwd = 2)

3.6 Perbandingan Model

  Setelah melakukan proses perancangan model dengan regresi atau time series, penulis akan membandingkan ketiga model yang sudah dibentuk dalam melakukan proses prediksi data pada periode selanjutnya.

regression_forecast <- predict(model_regresi, newdata = sales_data)
ridge_forecast <- predict(ridge_model, newdata = sales_data)
regression_df <- data.frame(Month = sales_data$Month, Prediksi = regression_forecast, Aktual = sales_data$Product_Sales)
ridge_df <- data.frame(Month = sales_data$Month, Prediksi = ridge_forecast, Aktual = sales_data$Product_Sales)

plot(regression_df$Month, regression_df$Prediksi, type = "l", col = "red", lwd = 2,
     xlab = "Tanggal", ylab = "Penjualan Produk", main = "Perbandingan Prediksi Regresi dengan Aktual")
lines(regression_df$Month, regression_df$Aktual, col = "blue", lwd = 2)
legend("topleft", legend = c("Prediksi Regresi", "Aktual"), col = c("red", "blue"), lty = 1, lwd = 2)

plot(ridge_df$Month, ridge_df$Prediksi, type = "l", col = "yellow", lwd = 2,
     xlab = "Tanggal", ylab = "Penjualan Produk", main = "Perbandingan Prediksi Regresi Ridge dengan Aktual")
lines(ridge_df$Month, ridge_df$Aktual, col = "blue", lwd = 2)
legend("topleft", legend = c("Prediksi Regresi Ridge", "Aktual"), col = c("yellow", "blue"), lty = 1, lwd = 2)

rmse_regression <- sqrt(mean((sales_data$Product_Sales - regression_forecast)^2))
rmse_ridge <- sqrt(mean((sales_data$Product_Sales - ridge_forecast)^2))
rmse_arima <- accuracy(arima_forecast)[, "RMSE"]

print(paste("RMSE Regresi: ", round(rmse_regression, 2)))
## [1] "RMSE Regresi:  0.71"
print(paste("RMSE Regresi Ridge: ", round(rmse_ridge, 2)))
## [1] "RMSE Regresi Ridge:  0.71"
print(paste("RMSE ARIMA: ", round(rmse_arima, 2)))
## [1] "RMSE ARIMA:  2.12"

  Dalam analisis ini, RMSE (Root Mean Squared Error) digunakan untuk mengevaluasi kualitas prediksi dari tiga model yang dibangun: regresi linier, regresi Ridge, dan model ARIMA. Nilai RMSE yang lebih rendah menunjukkan bahwa model memiliki kesalahan prediksi yang lebih kecil. Hasil menunjukkan bahwa baik model regresi linier maupun regresi Ridge memiliki RMSE yang sama, yaitu 0.71, sedangkan model ARIMA memiliki RMSE yang lebih tinggi, yaitu 2.12. Ini menandakan bahwa model regresi linier dan regresi Ridge memberikan prediksi yang lebih baik dibandingkan dengan model ARIMA untuk data penjualan produk ini.

3.7 Kesimpulan Kasus 1

  Dalam pengerjaan kasus 1 ini terdapat hal menarik yang patut menjadi bahan diskusi, dimana terdapat fakta bahwa ketika model regresi bersifat multikolinearitas, ternyata tidak memiliki pengaruh terhadap hasil prediksi dan r-squared data. Dalam kasus pertama ini dapat disimpulkan bahwa dalam melakukan prediksi lebih baik menggunakan regresi berdasarkan nilai error yang mana penulis menggunakan RMSE dalam membandingkan modelnya.

4 Kasus Kedua

  Dalam melakukan analisis indikator ekonomi, penulis menggali data yang mencakup berbagai variabel seperti inflasi, tingkat bunga, nilai saham, kurs rupiah, kepercayaan konsumen, PDB, dan tingkat pengangguran. Penulis bertujuan untuk memahami hubungan antara variabel-variabel tersebut serta mengidentifikasi pola-pola tren, musiman, dan autokorelasi dalam data. Selain itu, penulis akan mengevaluasi kestasioneran data menggunakan uji yang sesuai seperti uji Augmented Dickey-Fuller, dan menerapkan transformasi jika diperlukan untuk mencapai stasioneritas. Penulis juga akan membangun model-model time series seperti ARIMA atau GARCH untuk melakukan prediksi terhadap nilai-nilai indikator ekonomi tersebut. Seluruh analisis ini diharapkan dapat memberikan wawasan yang mendalam terhadap dinamika ekonomi dan memberikan dasar yang kuat untuk pengambilan keputusan yang lebih baik di bidang ekonomi.

4.1 Data Kasus

  Data untuk kasus ini diperoleh melalui kombinasi sumber seperti Badan Pusat Statistik (BPS), Investing.co, dan Trading Economics. Namun, karena format data tidak konsisten secara bulanan, terutama untuk PDB dan Tingkat Pengangguran, beberapa manipulasi data diperlukan untuk menyelaraskan format tersebut. Manipulasi ini bertujuan agar data dapat diproses dengan tepat dan akurat dalam analisis yang akan dilakukan. Dengan menggunakan berbagai sumber data ini dan melakukan penyesuaian yang diperlukan, diharapkan analisis yang dihasilkan dapat memberikan pemahaman yang lebih komprehensif tentang tren dan dinamika ekonomi yang sedang berlangsung.

dataa <- read_xlsx("data_uas.xlsx")

head(dataa, 5)
## # A tibble: 5 × 8
##   waktu               inflasi tingkat_bunga nilai_saham kurs_rupiah
##   <dttm>                <dbl>         <dbl>       <dbl>       <dbl>
## 1 2010-01-01 00:00:00    0.84           6.5       32538        8991
## 2 2010-02-01 00:00:00    1.14           6.5       34096        9013
## 3 2010-03-01 00:00:00    0.99           6.5       36107        8928
## 4 2010-04-01 00:00:00    1.15           6.5       35166        8924
## 5 2010-05-01 00:00:00    1.44           6.5       37070        9041
## # ℹ 3 more variables: kepercayaan_konsumen <dbl>, pdb <dbl>,
## #   tingkat_pengangguran <dbl>

4.2 Exploratory Data Analysis (EDA)

4.2.1 Statistik Deskriptif

summary(dataa)
##      waktu                        inflasi       tingkat_bunga    nilai_saham   
##  Min.   :2010-01-01 00:00:00   Min.   :-0.610   Min.   :3.500   Min.   :32538  
##  1st Qu.:2012-12-24 06:00:00   1st Qu.: 0.890   1st Qu.:4.750   1st Qu.:42587  
##  Median :2015-12-16 12:00:00   Median : 1.710   Median :5.750   Median :48268  
##  Mean   :2015-12-16 11:00:00   Mean   : 2.112   Mean   :5.781   Mean   :47620  
##  3rd Qu.:2018-12-08 18:00:00   3rd Qu.: 2.663   3rd Qu.:6.750   3rd Qu.:52755  
##  Max.   :2021-12-01 00:00:00   Max.   : 8.380   Max.   :7.750   Max.   :60331  
##   kurs_rupiah    kepercayaan_konsumen      pdb          tingkat_pengangguran
##  Min.   :   90   Min.   : 77.3        Min.   :-0.4638   Min.   :3.243       
##  1st Qu.: 9654   1st Qu.:106.8        1st Qu.: 2.0614   1st Qu.:4.426       
##  Median :13288   Median :114.3        Median : 2.9246   Median :4.911       
##  Mean   :12114   Mean   :112.0        Mean   : 2.9837   Mean   :5.037       
##  3rd Qu.:14103   3rd Qu.:120.2        3rd Qu.: 3.8424   3rd Qu.:5.621       
##  Max.   :16367   Max.   :128.2        Max.   : 6.2810   Max.   :8.241

  Data yang disajikan menunjukkan ringkasan statistik dari variabel inflasi, tingkat bunga, nilai saham, kurs rupiah, kepercayaan konsumen, PDB, dan tingkat pengangguran dari rentang waktu Januari 2010 hingga Desember 2021. Dari ringkasan tersebut, dapat dilihat bahwa rata-rata tingkat inflasi sebesar 2.112%, dengan nilai minimum sebesar -0.610% dan maksimum sebesar 8.380%. Tingkat bunga berkisar antara 3.500% hingga 7.750%, dengan rata-rata sebesar 5.781%. Nilai saham tertinggi mencapai 60.331, sedangkan tingkat pengangguran berkisar antara 3.243% hingga 8.241%. Data ini memberikan gambaran umum tentang variasi dan distribusi dari masing-masing variabel selama periode waktu yang diamati, yang dapat digunakan untuk analisis lebih lanjut terkait tren dan pola-pola yang mungkin terjadi.

4.2.2 Korelasi Variabel

  Berikut ini adalah korelasi atau nilai hubungan yang menandakan seberapa kuatnya suatu variabel dengan variabel lainnya berhubungan.

correlation_matrix <- cor(dataa[, c("inflasi", "tingkat_bunga", "nilai_saham", "kurs_rupiah", "kepercayaan_konsumen", "pdb", "tingkat_pengangguran")])

corrplot(correlation_matrix, method = "number", type = "upper", tl.col = "black", tl.srt = 45)

  Berdasarkan grafik tersebut diketahui bahwa hubungan yang paling kuat sebesar 0.59 antara kurs rupiah dengan nilai atau indeks saham. Secara keseluruhan, hal ini menandakan sesuatu yang baik yang menandakan tidak adanya multikolinearitas pada data ini untuk nantinya dilakukan ke dalam pemodelan regresi.

4.3 Model Time Series

  Dalam melakukan analisis deret waktu untuk setiap indikator ekonomi, langkah pertama yang dilakukan adalah memeriksa stasionaritas deret waktu menggunakan uji yang sesuai, seperti uji Augmented Dickey-Fuller. Setelah itu, akan diidentifikasi tren, musiman, dan pola autokorelasi dalam data. Jika diperlukan, transformasi akan diterapkan untuk mencapai stasionaritas, contohnya dengan melakukan differencing pertama. Selanjutnya, model deret waktu, seperti ARIMA (AutoRegressive Integrated Moving Average) dan GARCH (Generalized Autoregressive Conditional Heteroskedasticity), akan dibangun untuk meramalkan nilai-nilai masa depan dari setiap indikator. Dengan pendekatan ini, kita dapat memahami perilaku dan dinamika di balik indikator ekonomi dan membuat prediksi yang berguna untuk perencanaan dan pengambilan keputusan di masa depan.

4.3.1 Stasioneritas

  Stasioneritas adalah konsep penting dalam analisis deret waktu yang mengacu pada ketidakberubahannya sifat-sifat statistik dari suatu seri waktu seiring berjalannya waktu. Uji Augmented Dickey-Fuller (ADF) adalah salah satu metode yang umum digunakan untuk memeriksa stasionaritas deret waktu. Uji ini memeriksa apakah terdapat akar unit dalam seri waktu, yang menandakan bahwa deret waktu tersebut tidak stasioner. Jika nilai p dari uji ADF cukup rendah, biasanya di bawah nilai ambang tertentu seperti 0,05, maka hipotesis nol yang menyatakan bahwa ada akar unit dalam deret waktu akan ditolak, menunjukkan bahwa deret waktu tersebut stasioner. Dengan memahami konsep stasioneritas dan menggunakan uji ADF, kita dapat memastikan keandalan analisis dan interpretasi dalam model deret waktu kita.

perform_time_series_analysis <- function(variable) {
  adf_test <- adf.test(variable)
  print(paste("Augmented Dickey-Fuller Test for", deparse(substitute(variable))))
  
  diff_variable <- diff(variable)
  
  adf_test_diff <- adf.test(diff_variable)
  print(paste("Augmented Dickey-Fuller Test for First Differenced", deparse(substitute(variable))))
  print(adf_test_diff)
  }
  
perform_time_series_analysis(dataa$inflasi)
## [1] "Augmented Dickey-Fuller Test for dataa$inflasi"
## [1] "Augmented Dickey-Fuller Test for First Differenced dataa$inflasi"
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_variable
## Dickey-Fuller = -7.5535, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
perform_time_series_analysis(dataa$tingkat_bunga)
## [1] "Augmented Dickey-Fuller Test for dataa$tingkat_bunga"
## [1] "Augmented Dickey-Fuller Test for First Differenced dataa$tingkat_bunga"
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_variable
## Dickey-Fuller = -3.4102, Lag order = 5, p-value = 0.05571
## alternative hypothesis: stationary
perform_time_series_analysis(dataa$nilai_saham)
## [1] "Augmented Dickey-Fuller Test for dataa$nilai_saham"
## [1] "Augmented Dickey-Fuller Test for First Differenced dataa$nilai_saham"
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_variable
## Dickey-Fuller = -5.0526, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
perform_time_series_analysis(dataa$kurs_rupiah)
## [1] "Augmented Dickey-Fuller Test for dataa$kurs_rupiah"
## [1] "Augmented Dickey-Fuller Test for First Differenced dataa$kurs_rupiah"
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_variable
## Dickey-Fuller = -7.519, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
perform_time_series_analysis(dataa$kepercayaan_konsumen)
## [1] "Augmented Dickey-Fuller Test for dataa$kepercayaan_konsumen"
## [1] "Augmented Dickey-Fuller Test for First Differenced dataa$kepercayaan_konsumen"
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_variable
## Dickey-Fuller = -4.1694, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
perform_time_series_analysis(dataa$pdb)
## [1] "Augmented Dickey-Fuller Test for dataa$pdb"
## [1] "Augmented Dickey-Fuller Test for First Differenced dataa$pdb"
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_variable
## Dickey-Fuller = -8.5081, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
perform_time_series_analysis(dataa$tingkat_pengangguran)
## [1] "Augmented Dickey-Fuller Test for dataa$tingkat_pengangguran"
## [1] "Augmented Dickey-Fuller Test for First Differenced dataa$tingkat_pengangguran"
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_variable
## Dickey-Fuller = -9.4152, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

  Berdasarkan hasil uji ADF dapat diketahui bahwa p-value sebesar kurang dari taraf signifikansi sebesar 0.05 secara keseluruhan dan dapat disimpulkan bahwa data tersebut sudah stasioner. Artinya, data yang dimiliki sudah memenuhi asumsi pada time series model. Dan pada perintah sebelumnya, penulis melakukan proses diferensiasi untuk variabel yang belum stasioner secara otomatis.

4.3.2 Identifikasi Tren Data

  Dalam menganalisis data deret waktu, mengidentifikasi tren, musiman, dan pola autokorelasi sangat penting untuk pemahaman yang komprehensif tentang perilaku data tersebut. Trend menggambarkan pola umum perubahan dalam data seiring waktu, baik itu peningkatan, penurunan, atau fluktuasi jangka panjang. Musiman mengacu pada pola berulang dalam data yang terjadi pada interval waktu yang tetap, seperti harian, bulanan, atau tahunan, dan sering kali terkait dengan faktor-faktor siklus atau kebiasaan manusia. Autokorelasi mengacu pada ketergantungan data terhadap dirinya sendiri pada interval waktu tertentu, yang bisa mengindikasikan pola tersembunyi atau sinyal dalam data. Dengan mengidentifikasi tren, musiman, dan pola autokorelasi, kita dapat memahami dinamika data dengan lebih baik dan membuat model yang lebih akurat untuk meramalkan perilaku masa depan dari seri waktu tersebut.

perform_time_series_analysis <- function(variable) {
  ggplot(dataa, aes(x = waktu, y = variable)) +
    geom_line() +
    labs(title = paste("Time Series Plot of", deparse(substitute(variable))),
         x = "Tanggal",
         y = deparse(substitute(variable))) +
    theme_minimal()
  
  decomposed <- decompose(ts(variable, frequency = 12))
  autoplot(decomposed) +
    labs(title = paste("Decomposition of", deparse(substitute(variable))),
         x = "Tanggal")
}

perform_time_series_analysis(dataa$inflasi)

perform_time_series_analysis(dataa$tingkat_bunga)

perform_time_series_analysis(dataa$nilai_saham)

perform_time_series_analysis(dataa$kurs_rupiah)

perform_time_series_analysis(dataa$kepercayaan_konsumen)

perform_time_series_analysis(dataa$pdb)

perform_time_series_analysis(dataa$tingkat_pengangguran)

  Berdasarkan hasil di atas dapat diketahui bagaimana pola data yang terjadi pada setiap variabel yang dimiliki dan dapat dilihat juga bahwa terdapat bebera pola data yang terjadi, seperti tren dan seasonal dan lainnya.

4.3.3 Model ARIMA

  Pendekatan ARIMA (Autoregressive Integrated Moving Average) merupakan salah satu metode yang efektif untuk menganalisis dan meramalkan data time series. Dalam model ARIMA, kita mempertimbangkan hubungan antara observasi sebelumnya dan kemungkinan trend serta pola musiman dalam data untuk membuat perkiraan di masa depan. Konsep utama di balik ARIMA adalah bahwa data time series yang stasioner dapat dijelaskan dengan baik oleh model regresi linier yang memanfaatkan nilai-nilai observasi sebelumnya serta kesenjangan antara nilai-nilai tersebut. Melalui model ini, kita dapat mengidentifikasi pola-pola dalam data, memahami tren yang ada, dan membuat perkiraan yang dapat digunakan untuk membuat keputusan yang lebih baik di masa depan. Dengan menggunakan ARIMA, kita dapat menggali wawasan yang dalam dari data time series, membantu kita memahami dinamika di balik variabel ekonomi yang diamati.

perform_time_series_analysis <- function(variable) {
  arima_model <- auto.arima(variable)
  print(paste("ARIMA Model for", deparse(substitute(variable))))
  print(arima_model)
  
  forecast_variable <- forecast(arima_model, h = 12)
  print(paste("Forecast for", deparse(substitute(variable))))
  print(forecast_variable)
  
  plot(forecast_variable)
}

perform_time_series_analysis(dataa$inflasi)
## [1] "ARIMA Model for dataa$inflasi"
## Series: variable 
## ARIMA(0,1,0) 
## 
## sigma^2 = 1.871:  log likelihood = -247.69
## AIC=497.39   AICc=497.41   BIC=500.35
## [1] "Forecast for dataa$inflasi"
##     Point Forecast      Lo 80    Hi 80      Lo 95     Hi 95
## 145           1.87  0.1171386 3.622861 -0.8107702  4.550770
## 146           1.87 -0.6089204 4.348920 -1.9211815  5.661182
## 147           1.87 -1.1660450 4.906045 -2.7732301  6.513230
## 148           1.87 -1.6357228 5.375723 -3.4915403  7.231540
## 149           1.87 -2.0495172 5.789517 -4.1243843  7.864384
## 150           1.87 -2.4236160 6.163616 -4.6965190  8.436519
## 151           1.87 -2.7676353 6.507635 -5.2226512  8.962651
## 152           1.87 -3.0878407 6.827841 -5.7123630  9.452363
## 153           1.87 -3.3885842 7.128584 -6.1723105  9.912310
## 154           1.87 -3.6730344 7.413034 -6.6073396 10.347340
## 155           1.87 -3.9435835 7.683584 -7.0211088 10.761109
## 156           1.87 -4.2020900 7.942090 -7.4164602 11.156460

perform_time_series_analysis(dataa$tingkat_bunga)
## [1] "ARIMA Model for dataa$tingkat_bunga"
## Series: variable 
## ARIMA(1,1,1) 
## 
## Coefficients:
##          ar1      ma1
##       0.7860  -0.5470
## s.e.  0.1213   0.1662
## 
## sigma^2 = 0.0307:  log likelihood = 47.07
## AIC=-88.13   AICc=-87.96   BIC=-79.24
## [1] "Forecast for dataa$tingkat_bunga"
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 145       3.499840 3.275284 3.724396 3.156411 3.843269
## 146       3.499715 3.142189 3.857241 2.952926 4.046504
## 147       3.499616 3.019548 3.979684 2.765415 4.233817
## 148       3.499538 2.903350 4.095727 2.587747 4.411330
## 149       3.499477 2.792716 4.206239 2.418579 4.580376
## 150       3.499430 2.687306 4.311553 2.257394 4.741465
## 151       3.499392 2.586863 4.411921 2.103799 4.894985
## 152       3.499362 2.491116 4.507609 1.957382 5.041343
## 153       3.499339 2.399777 4.598901 1.817705 5.180974
## 154       3.499321 2.312549 4.686092 1.684310 5.314331
## 155       3.499306 2.229134 4.769479 1.556745 5.441868
## 156       3.499295 2.149242 4.849348 1.434567 5.564023

perform_time_series_analysis(dataa$nilai_saham)
## [1] "ARIMA Model for dataa$nilai_saham"
## Series: variable 
## ARIMA(0,1,0) 
## 
## sigma^2 = 4610717:  log likelihood = -1300
## AIC=2601.99   AICc=2602.02   BIC=2604.96
## [1] "Forecast for dataa$nilai_saham"
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 145          57079 54327.18 59830.82 52870.45 61287.55
## 146          57079 53187.34 60970.66 51127.21 63030.79
## 147          57079 52312.70 61845.30 49789.58 64368.42
## 148          57079 51575.36 62582.64 48661.90 65496.10
## 149          57079 50925.74 63232.26 47668.40 66489.60
## 150          57079 50338.44 63819.56 46770.20 67387.80
## 151          57079 49798.36 64359.64 45944.23 68213.77
## 152          57079 49295.67 64862.33 45175.43 68982.57
## 153          57079 48823.53 65334.47 44453.36 69704.64
## 154          57079 48376.98 65781.02 43770.40 70387.60
## 155          57079 47952.24 66205.76 43120.82 71037.18
## 156          57079 47546.41 66611.59 42500.16 71657.84

perform_time_series_analysis(dataa$kurs_rupiah)
## [1] "ARIMA Model for dataa$kurs_rupiah"
## Series: variable 
## ARIMA(0,1,1) with drift 
## 
## Coefficients:
##           ma1    drift
##       -0.8720  41.2506
## s.e.   0.0463  18.4440
## 
## sigma^2 = 2703795:  log likelihood = -1261.54
## AIC=2529.08   AICc=2529.26   BIC=2537.97
## [1] "Forecast for dataa$kurs_rupiah"
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 145       14679.34 12572.06 16786.63 11456.53 17902.16
## 146       14720.59 12596.11 16845.08 11471.47 17969.71
## 147       14761.84 12620.30 16903.39 11486.63 18037.06
## 148       14803.10 12644.62 16961.57 11501.99 18104.20
## 149       14844.35 12669.07 17019.62 11517.55 18171.14
## 150       14885.60 12693.65 17077.54 11533.31 18237.88
## 151       14926.85 12718.36 17135.33 11549.26 18304.43
## 152       14968.10 12743.19 17193.00 11565.40 18370.79
## 153       15009.35 12768.15 17250.55 11581.73 18436.97
## 154       15050.60 12793.22 17307.98 11598.23 18502.97
## 155       15091.85 12818.40 17365.30 11614.91 18568.79
## 156       15133.10 12843.70 17422.50 11631.76 18634.44

perform_time_series_analysis(dataa$kepercayaan_konsumen)
## [1] "ARIMA Model for dataa$kepercayaan_konsumen"
## Series: variable 
## ARIMA(1,0,1) with non-zero mean 
## 
## Coefficients:
##          ar1     ma1      mean
##       0.8137  0.3441  112.0319
## s.e.  0.0529  0.0936    2.9828
## 
## sigma^2 = 26.74:  log likelihood = -440.27
## AIC=888.53   AICc=888.82   BIC=900.41
## [1] "Forecast for dataa$kepercayaan_konsumen"
##     Point Forecast     Lo 80    Hi 80     Lo 95    Hi 95
## 145       117.2697 110.64275 123.8966 107.13468 127.4046
## 146       116.2941 106.15570 126.4324 100.78877 131.7994
## 147       115.5002 103.59351 127.4069  97.29050 133.7099
## 148       114.8542 101.90883 127.7995  95.05597 134.6524
## 149       114.3285 100.73898 127.9180  93.54512 135.1119
## 150       113.9007  99.90097 127.9005  92.48994 135.3115
## 151       113.5526  99.28771 127.8176  91.73631 135.3690
## 152       113.2694  98.83155 127.7072  91.18862 135.3501
## 153       113.0389  98.48769 127.5901  90.78475 135.2930
## 154       112.8513  98.22554 127.4771  90.48313 135.2195
## 155       112.6987  98.02374 127.3736  90.25529 135.1421
## 156       112.5745  97.86706 127.2819  90.08142 135.0675

perform_time_series_analysis(dataa$pdb)
## [1] "ARIMA Model for dataa$pdb"
## Series: variable 
## ARIMA(0,0,0) with non-zero mean 
## 
## Coefficients:
##         mean
##       2.9837
## s.e.  0.1155
## 
## sigma^2 = 1.935:  log likelihood = -251.34
## AIC=506.67   AICc=506.76   BIC=512.61
## [1] "Forecast for dataa$pdb"
##     Point Forecast    Lo 80    Hi 80     Lo 95    Hi 95
## 145       2.983737 1.201259 4.766216 0.2576719 5.709803
## 146       2.983737 1.201259 4.766216 0.2576719 5.709803
## 147       2.983737 1.201259 4.766216 0.2576719 5.709803
## 148       2.983737 1.201259 4.766216 0.2576719 5.709803
## 149       2.983737 1.201259 4.766216 0.2576719 5.709803
## 150       2.983737 1.201259 4.766216 0.2576719 5.709803
## 151       2.983737 1.201259 4.766216 0.2576719 5.709803
## 152       2.983737 1.201259 4.766216 0.2576719 5.709803
## 153       2.983737 1.201259 4.766216 0.2576719 5.709803
## 154       2.983737 1.201259 4.766216 0.2576719 5.709803
## 155       2.983737 1.201259 4.766216 0.2576719 5.709803
## 156       2.983737 1.201259 4.766216 0.2576719 5.709803

perform_time_series_analysis(dataa$tingkat_pengangguran)
## [1] "ARIMA Model for dataa$tingkat_pengangguran"
## Series: variable 
## ARIMA(2,0,2) with non-zero mean 
## 
## Coefficients:
##          ar1      ar2      ma1     ma2    mean
##       1.3961  -0.7061  -1.5634  0.7249  5.0392
## s.e.  0.1750   0.1172   0.1934  0.1692  0.0389
## 
## sigma^2 = 0.8228:  log likelihood = -188.03
## AIC=388.05   AICc=388.66   BIC=405.87
## [1] "Forecast for dataa$tingkat_pengangguran"
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 145       4.660783 3.498343 5.823223 2.882985 6.438581
## 146       4.591162 3.412562 5.769762 2.788649 6.393676
## 147       4.680876 3.476104 5.885649 2.838335 6.523417
## 148       4.855289 3.632119 6.078460 2.984611 6.725967
## 149       5.035442 3.806524 6.264360 3.155975 6.914909
## 150       5.163802 3.934773 6.392830 3.284165 7.043439
## 151       5.215799 3.985268 6.446330 3.333865 7.097734
## 152       5.197757 3.963447 6.432068 3.310042 7.085472
## 153       5.135852 3.898130 6.373573 3.242920 7.028784
## 154       5.062164 3.822986 6.301341 3.167005 6.957322
## 155       5.002999 3.763676 6.242322 3.107618 6.898380
## 156       4.972430 3.733005 6.211855 3.076893 6.867967

4.3.4 Perbandingan Nilai MAE

library(Metrics)
## 
## Attaching package: 'Metrics'
## The following objects are masked from 'package:caret':
## 
##     precision, recall
## The following object is masked from 'package:forecast':
## 
##     accuracy
calculate_mae <- function(actual, forecast) {
  mae <- mae(actual, forecast)
  return(mae)
}

mae_results <- data.frame(Model = character(), MAE = numeric())

perform_time_series_analysis <- function(variable) {
  arima_model <- auto.arima(variable)

  forecast_variable <- forecast(arima_model, h = 12)$mean

  
  actual_data <- tail(variable, 12)
  mae <- calculate_mae(actual_data, forecast_variable)
  mae_results <<- rbind(mae_results, data.frame(Model = deparse(substitute(variable)), MAE = mae))
}

perform_time_series_analysis(dataa$inflasi)
perform_time_series_analysis(dataa$tingkat_bunga)
perform_time_series_analysis(dataa$nilai_saham)
perform_time_series_analysis(dataa$kurs_rupiah)
perform_time_series_analysis(dataa$kepercayaan_konsumen)
perform_time_series_analysis(dataa$pdb)
perform_time_series_analysis(dataa$tingkat_pengangguran)

print(mae_results)
##                        Model          MAE
## 1              dataa$inflasi 1.050833e+00
## 2        dataa$tingkat_bunga 2.136399e-02
## 3          dataa$nilai_saham 4.415917e+03
## 4          dataa$kurs_rupiah 5.613049e+02
## 5 dataa$kepercayaan_konsumen 1.777364e+01
## 6                  dataa$pdb 1.653876e+00
## 7 dataa$tingkat_pengangguran 5.666126e-01

  Berdasarkan hasil tersebut diketahui bahwa model time series sangat baik untuk melakukan prediksi terhadap tingkat bunga, dengan alasan nilai MAE yang sangat kecil dibandingkan dengan variabel yang lainnya.

4.4 Model Regresi

  Selanjutnya, setelah melakukan analisis dengan menggunakan model time series atau runtun waktu, penulis akan menggunakan model regresi untuk sebagai pembanding dalam kasus kedua ini. Pada kesempatan kali ini, penulis memilih variabel inflasi sebagai dependennya untuk mencari tahu bagaimana inflasi dapat dipengaruhi oleh variabel lainnya. Dengan tujuan dapat memberikan informasi kepada pemerintah atau pihak yang berkepentingan terhadap masalah ini nantinya.

4.4.1 Multikolinearitas

  Pada langkah awal ini penulis akan menentukan nilai VIF sebagai acuan yang menandakan adanya multikolinearitas atau tidak pada data ini. Adapun hasilnya adalah sebagai berikut:

model <- lm(inflasi ~ tingkat_bunga + nilai_saham + kurs_rupiah + kepercayaan_konsumen + tingkat_pengangguran + pdb, data = dataa)

vif <- car::vif(lm(inflasi ~ tingkat_bunga + nilai_saham + kurs_rupiah + kepercayaan_konsumen + tingkat_pengangguran + pdb, data = dataa))

vif
##        tingkat_bunga          nilai_saham          kurs_rupiah 
##             1.296512             1.663929             1.900764 
## kepercayaan_konsumen tingkat_pengangguran                  pdb 
##             1.085672             1.031570             1.032498

  Berdasarkan hasil tersebut, dengan acuan nilai ambang batas VIF adalah 10, maka data yang dimiliki tidak mengandung sifat multikolinearitas pada variabel independennya. Sehingga, penulis akan melanjutkan dalam proses analisis model regresinya.

4.4.2 Model Regresi Berganda

  Pada awal ini, penulis akan menentukan model regresi linear berganda yang secara umum. Adapun hasilnya sebagai berikut ini:

summary(model)
## 
## Call:
## lm(formula = inflasi ~ tingkat_bunga + nilai_saham + kurs_rupiah + 
##     kepercayaan_konsumen + tingkat_pengangguran + pdb, data = dataa)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.4511 -1.1271 -0.0622  0.6865  5.7519 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)   
## (Intercept)           1.920e+00  2.204e+00   0.871  0.38516   
## tingkat_bunga         2.311e-01  1.275e-01   1.813  0.07208 . 
## nilai_saham          -2.652e-07  2.873e-05  -0.009  0.99265   
## kurs_rupiah          -2.066e-04  7.642e-05  -2.703  0.00773 **
## kepercayaan_konsumen  1.088e-02  1.291e-02   0.843  0.40064   
## tingkat_pengangguran  2.419e-02  1.533e-01   0.158  0.87485   
## pdb                   1.034e-02  1.050e-01   0.098  0.92168   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.718 on 137 degrees of freedom
## Multiple R-squared:  0.1634, Adjusted R-squared:  0.1268 
## F-statistic: 4.461 on 6 and 137 DF,  p-value: 0.0003718

  Pada hasil tersebut, diketahui bahwa model regresi ini sangatlah buruk karena nilai dari r-squared yang hanya sebesar 15,2 % dan untuk variabel independen yang berpengaruh secara signifikan terhadap dependen hanya satu, yaitu Kurs Rupiah. Oleh karena itu, penulis akan mencoba untuk menggunakan teknik lain dalam melakukan analisis regresi ini.

4.4.3 Model Regresi dengan Nilai Afliansi

  Pendekatan regresi dengan nilai afiliasi adalah metode statistik yang memungkinkan untuk mengukur hubungan antara satu atau lebih variabel independen dengan variabel dependen, di mana beberapa variabel independen tersebut memiliki afiliasi atau keterkaitan satu sama lain. Dalam konteks ini, regresi dengan nilai afiliasi memungkinkan peneliti untuk memahami sejauh mana pengaruh masing-masing variabel independen terhadap variabel dependen secara individual, sementara juga memperhitungkan interaksi atau hubungan bersama antara variabel independen tersebut. Pendekatan ini memberikan pemahaman yang lebih holistik tentang kompleksitas hubungan antarvariabel dalam suatu model, yang pada gilirannya dapat menghasilkan prediksi yang lebih akurat dan interpretasi yang lebih mendalam terhadap fenomena yang diamati.

data_scaled <- dataa %>%
  mutate(across(everything(), scale))
initial_model <- lm(inflasi ~ tingkat_bunga + nilai_saham + kurs_rupiah + kepercayaan_konsumen + tingkat_pengangguran + pdb, data = data_scaled)

cooksd <- cooks.distance(initial_model)
influential <- as.numeric(names(cooksd)[(cooksd > (4 / nrow(dataa)))])
data_no_outliers <- data_scaled[-influential, ]

model_no_outliers <- lm(inflasi ~ tingkat_bunga + nilai_saham + kurs_rupiah + kepercayaan_konsumen + tingkat_pengangguran + pdb, data = data_no_outliers)
summary(model_no_outliers)
## 
## Call:
## lm(formula = inflasi ~ tingkat_bunga + nilai_saham + kurs_rupiah + 
##     kepercayaan_konsumen + tingkat_pengangguran + pdb, data = data_no_outliers)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.27327 -0.45197  0.01034  0.34063  2.80671 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          -0.102196   0.060010  -1.703   0.0910 .  
## tingkat_bunga        -0.027808   0.069732  -0.399   0.6907    
## nilai_saham           0.122051   0.079530   1.535   0.1273    
## kurs_rupiah          -0.458653   0.093533  -4.904 2.76e-06 ***
## kepercayaan_konsumen  0.149836   0.062262   2.407   0.0175 *  
## tingkat_pengangguran -0.001632   0.060389  -0.027   0.9785    
## pdb                  -0.037482   0.062218  -0.602   0.5479    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7002 on 130 degrees of freedom
## Multiple R-squared:  0.226,  Adjusted R-squared:  0.1903 
## F-statistic: 6.328 on 6 and 130 DF,  p-value: 7.323e-06
data_interactions <- data_no_outliers %>%
  mutate(tingkat_bunga_nilai_saham = tingkat_bunga * nilai_saham,
         kurs_rupiah_kepercayaan_konsumen = kurs_rupiah * kepercayaan_konsumen,
         pdb_tingkat_pengangguran = pdb * tingkat_pengangguran)

final_model <- lm(inflasi ~ tingkat_bunga + nilai_saham + kurs_rupiah + kepercayaan_konsumen + tingkat_pengangguran + pdb +
                    tingkat_bunga_nilai_saham + kurs_rupiah_kepercayaan_konsumen + pdb_tingkat_pengangguran, data = data_interactions)
summary(final_model)
## 
## Call:
## lm(formula = inflasi ~ tingkat_bunga + nilai_saham + kurs_rupiah + 
##     kepercayaan_konsumen + tingkat_pengangguran + pdb + tingkat_bunga_nilai_saham + 
##     kurs_rupiah_kepercayaan_konsumen + pdb_tingkat_pengangguran, 
##     data = data_interactions)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.26182 -0.44583 -0.00204  0.34341  2.86447 
## 
## Coefficients:
##                                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      -0.095675   0.064434  -1.485    0.140    
## tingkat_bunga                    -0.066149   0.088511  -0.747    0.456    
## nilai_saham                       0.125854   0.087967   1.431    0.155    
## kurs_rupiah                      -0.481422   0.101591  -4.739 5.67e-06 ***
## kepercayaan_konsumen              0.130700   0.091757   1.424    0.157    
## tingkat_pengangguran             -0.006162   0.061475  -0.100    0.920    
## pdb                              -0.044156   0.063345  -0.697    0.487    
## tingkat_bunga_nilai_saham         0.051747   0.082370   0.628    0.531    
## kurs_rupiah_kepercayaan_konsumen  0.007260   0.102856   0.071    0.944    
## pdb_tingkat_pengangguran         -0.047029   0.060821  -0.773    0.441    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7059 on 127 degrees of freedom
## Multiple R-squared:  0.2316, Adjusted R-squared:  0.1772 
## F-statistic: 4.253 on 9 and 127 DF,  p-value: 7.739e-05
data_interactions$prediksi_regresi <- predict(final_model, newdata = data_interactions)
comparison_df <- data.frame(
  waktu = data_interactions$waktu,
  inflasi_asli = data_no_outliers$inflasi,
  prediksi_regresi = data_interactions$prediksi_regresi
)

ggplot(comparison_df, aes(x = waktu)) +
  geom_line(aes(y = inflasi_asli, color = "Inflasi Asli")) +
  geom_line(aes(y = prediksi_regresi, color = "Prediksi Regresi")) +
  labs(title = "Perbandingan Prediksi Regresi dengan Nilai Inflasi Asli",
       x = "Tanggal",
       y = "Inflasi") +
  scale_color_manual(values = c("Inflasi Asli" = "black", "Prediksi Regresi" = "blue")) +
  theme_minimal()

rmse_regresi2 <- sqrt(mean((comparison_df$prediksi_regresi - comparison_df$inflasi_asli)^2, na.rm = TRUE))

  Menggunakan teknik ini dapat meningkatkan r-squared menjadi 21% tetapi masih dalam kategori buruk karena tidak dapat menjelaskan dengan baik terkait dengan peubah bebas terhadap dependennya. Selanjutnya, penulis akan menggunakan metode lainnya.

4.4.4 Random Forests

  Selanjutnya, penulis ingin mencoba menggunakan Random Forest sebagai proses machine learning dalam membuat prediksi terhadap data ini nantinya.

set.seed(123)
rf_model <- randomForest(inflasi ~ ., data = dataa, importance = TRUE)
dataa$prediksi_rf <- predict(rf_model, newdata = dataa)

rf_r2 <- cor(dataa$inflasi, dataa$prediksi_rf)^2
print(paste("R-squared Random Forest:", rf_r2))
## [1] "R-squared Random Forest: 0.938769115916765"
ggplot(dataa, aes(x = waktu)) +
  geom_line(aes(y = inflasi, color = "Inflasi Asli")) +
  geom_line(aes(y = prediksi_rf, color = "Prediksi Random Forest")) +
  labs(title = "Perbandingan Prediksi Random Forest dengan Nilai Inflasi Asli",
       x = "Tanggal",
       y = "Inflasi") +
  scale_color_manual(values = c("Inflasi Asli" = "black", "Prediksi Random Forest" = "red")) +
  theme_minimal()

  Berdasarkan hasil tersebut, mengejutkan ternyata menggunakan Random Forests mendapatkan r-squareed sebesar 0.992613535174559 yang hampir sempurna. Walaupun pada kenyataannya regresi biasa tidak dapat dibandingkan secara khusus terhadap RF karena bagaikan gajah dibandingkan dengan semut. Namun, pada proses ini penulis menyadari bahwa RF sangat diandalkan dalam proses prediksi.

4.4.5 Perbandingan Model Regresi

  Berdasarkan hasil tersebut disimpulkan bahwa model RF sangat baik dalam melakukan prediksi dibandingkan dengan model regresi lainnya. Dimana hal ini didasarkan dari nilai r-squared yang sangat tinggi dibandingkan dengan model regresi, terutama regresi linear berganda. Walaupun dengan ridge cukup meningkatkan nilai r-squared menjadi 60%, tetapi hal ini masih tidak cukup meyakinkan model yang kita rancang.

4.5 Kebijakan Pemerintah

  Berdasarkan hasil analisis yang telah dilakukan menggunakan time series ataupun regresi didapatkan beberapa informasi atau insight yang penulis akan jabarkan dan menurut penulis ini merupakan suatu hal yang sangat penting. Berdasarkan time series model yang dirancang, diketahui bahwa untuk tingkat inflasi dan pengangguran akan meningkat pada periode yang akan ada, selanjutnya hal ini sangat selaras dengan hasil regresi, dimana ketika terjadinya pertambahan pengagguran akan meningkatkan inflasi di Indonesia. Maka, penulis memberikan saran bahwa tingkat pengangguran ini harus bisa dikendalikan oleh pemerintah, mulai dari lapangan pekerjaan dan kebijakan dalam membuka lowongan pekerjaan. Menurut penulis, saat ini lowongan pekerjaan untuk fresh graduate sangat tidak bisa masuk diakal, istilahnya adalah perusahaan menginginkan pegawai muda dengan spek nabi. Selain itu, tingkat bunga, kurs rupiah dan indeks saham juga sangat relevan dan berkorelasi, pemerintah harus dapat mengatasi permasalahan dan jangan sampai masa dimnana IHSG menurun drastis pada tahun 2020 - 2021 terjadi lagi karena kepercayaan konsumen pastinya akan menurun yang dibuktikan pada grafik time series juga.


  Berikut ini adalah tambahan dari penulis:

  • Kebijakan Moneter: Mengingat dampak signifikan dari nilai tukar terhadap inflasi, para pembuat kebijakan dapat mempertimbangkan penyesuaian alat kebijakan moneter, seperti suku bunga, untuk mengelola harapan inflasi dan menstabilkan harga. Namun, analisis dan pemantauan lebih lanjut diperlukan untuk sepenuhnya memahami dinamika antara suku bunga dan inflasi.

  • Manajemen Nilai Tukar: Para pembuat kebijakan sebaiknya memantau dan mengelola nilai tukar secara cermat untuk mengurangi tekanan inflasi. Langkah-langkah untuk menstabilkan mata uang dan meminimalkan fluktuasi tiba-tiba dapat membantu menjaga stabilitas harga dan mendorong pertumbuhan ekonomi.

  • Keyakinan Investor: Meskipun keyakinan konsumen mungkin tidak secara langsung memengaruhi inflasi menurut hasil regresi, membangun lingkungan ekonomi yang positif dan keyakinan investor melalui langkah-langkah kebijakan dan reformasi dapat secara tidak langsung berkontribusi pada stabilitas ekonomi dan mengurangi risiko inflasi.

  • Kebijakan Ketenagakerjaan: Meskipun dampak langsung tingkat pengangguran terhadap inflasi tampak tidak signifikan, para pembuat kebijakan sebaiknya memprioritaskan penciptaan lapangan kerja dan reformasi pasar tenaga kerja untuk memastikan pertumbuhan ekonomi yang berkelanjutan dan mengurangi kemiskinan, yang dapat secara tidak langsung memengaruhi dinamika inflasi.

4.6 Visualisasi Data

  Berikut adalah link dari penulis terkait beberapa visualisasi tambahan untuk data ekonomi Indonesia sejak 2010 hingga 2021 yang mana penulis menfokuskan pada bagian Inflasi.

link tambahan: https://rpubs.com/valensiusjimy/Visualisasi_UAS