Kasus 1

Import Data

sales <- data.frame(
  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)
##        Month Advertising_Expense Product_Quality Product_Price Sales_Promotion
## 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
##   Online_Marketing Offline_Marketing Product_Sales
## 1               76                84           200
## 2               77                85           220
## 3               78                87           210
## 4               79                89           215
## 5               80                89           230
## 6               85                90           240

Month: Waktu Advertising_Expense: Jumlah pengeluaran periklanan (in USD). Product_Quality: Kualitas Produk out of 100. Product_Price: Harga produk (in USD). Sales_Promotion: Pengeluaran untuk promosi (in USD). Online_Marketing: Pengeluaran untuk pemasaran online (in USD). Offline_Marketing: Pengeluaran untuk pemasaran offline (in USD). Product_Sales: Jumlah produk laku.

Exploring Datasets

library(plotly)
library(tidyverse)
fig0 <- plot_ly(sales, type = 'scatter', mode = 'lines') %>%
  add_trace(x = ~Month, y = ~Product_Sales, name = 'Total Penjualan Produk') %>%
  layout(showlegend = F)
options(warn = -1)

fig0 <- fig0 %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6', width = 900)


fig0
fig00 <- plot_ly(sales, type = 'scatter', mode = 'lines') %>%
  add_trace(x = ~Month, y = ~Advertising_Expense, name = 'Total Biaya Iklan') %>%
  layout(showlegend = F)
options(warn = -1)

fig00 <- fig00 %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6', width = 900)


fig00

Dari 2 variabel diatas, menghasilkan Grafik Line yang sama persis dengan bentukan yang bisa idkatakan 100% mirip, ini menjadi suatu indikasi autokorelasi atau multikolinearitas. Berikut akan kita cek korelasi per variabelnya.

library(corrplot)
corsale = cor(sales[,-1])
corrplot(corsale, method = 'number')

Benar saja yang diduga sebelumnya, terdapat korelasi sempurna sehingga antara variabel terdapat Autokorelasi, jika dimasukkan ke model regresi, akan terjadi multikolinearitas. Tapi tetap akan kita lanjutkan ke langkah selanjutnya.

Linear Regression

Karena Korelasi yang terlalu sempurna, perancangan model regresi akan memiliki multikolinearitas. Tapi, akan tetap dilakukan uji asumsi klasik dan pembuatan model regresi.

Asumsi Klasik

Dalam Regresi Linear, ada beberapa asumsi yang harus dipenuhi oleh data yaitu sebagai berikut

Normality

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.

shapiro.test(sales$Advertising_Expense)
## 
##  Shapiro-Wilk normality test
## 
## data:  sales$Advertising_Expense
## W = 0.95871, p-value = 0.0294
shapiro.test(sales$Product_Quality)
## 
##  Shapiro-Wilk normality test
## 
## data:  sales$Product_Quality
## W = 0.95257, p-value = 0.01425
shapiro.test(sales$Product_Price)
## 
##  Shapiro-Wilk normality test
## 
## data:  sales$Product_Price
## W = 0.94649, p-value = 0.007116
shapiro.test(sales$Product_Sales)
## 
##  Shapiro-Wilk normality test
## 
## data:  sales$Product_Sales
## W = 0.96258, p-value = 0.0468
shapiro.test(sales$Sales_Promotion)
## 
##  Shapiro-Wilk normality test
## 
## data:  sales$Sales_Promotion
## W = 0.95356, p-value = 0.01599
shapiro.test(sales$Online_Marketing)
## 
##  Shapiro-Wilk normality test
## 
## data:  sales$Online_Marketing
## W = 0.95051, p-value = 0.01124
shapiro.test(sales$Offline_Marketing)
## 
##  Shapiro-Wilk normality test
## 
## data:  sales$Offline_Marketing
## W = 0.95007, p-value = 0.01069

Karena semua variabel memiliki nilai p-value <0.05 maka Semua data dipastikan berdistribusi Normal.

Heteroskedasitas

Uji heteroskedastisitas digunakan dalam analisis regresi untuk memeriksa apakah variabilitas residual konstan atau tidak sepanjang rentang nilai prediktor. Menggunakan uji Breush Pagan

library(lmtest)
regsales = lm(Product_Sales ~ . -Month, data = sales)

bptest(regsales)
## 
##  studentized Breusch-Pagan test
## 
## data:  regsales
## BP = 40.3, df = 6, p-value = 3.977e-07

Berdasarkan hasil uji BP di atas, diketahui bahwa p-value yang didapatkan sebesar kurang dari 0.05. Artinya, data residual pada model ini bersifat heteroskedasitas.

Multikolinearitas

Multikolinearitas adalah kondisi dalam regresi berganda di mana dua atau lebih variabel independen memiliki korelasi yang sangat tinggi satu sama lain. Karena korelasi yang gerlalu tinggi, mengakibatkan variabel tersebut terlalu menonjol dalam model sehingga mangacaukan variabel lainnya. Menggunakan VIF Test dimana yang memiliki nilai diatas 10 dikatakan memiliki Multikolinearitas dengan variabel lainnya dalam Model Regresi.

library(car)
vif(regsales)
## 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.

Model Linear Regression

regsales = lm(Product_Sales ~ . -Month, data = sales)
summary(regsales)
## 
## Call:
## lm(formula = Product_Sales ~ . - Month, data = sales)
## 
## 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

Dari SUmmary MOdel Regresi tersebut didapatkan model yaitu \[ Y = 297.58588 + 0.46830X1 + 0.12252X2 - 0.82782X3 + 4.68575X4 - 0.85343X5 - 0.58501X6 \]

Yang dimana kenaikan pada variabel Advertising_Expense, Product_Quality, Sales_Promotion meningkatkan angka Produk Sales. Sedangkan Kenaikan pada Variabel Product_Price, Online_Marketing, dan Offline_MArketing mengurangi angka Produk Sales. Serta, pada p-value yang dimana semua variabel < 0.05 artinya, semua variabel berpengaruh signifikan dalam model regresi.

Pada kasus ini walaupun data memiliki multilkolinearitas, tetapi memiliki tingkat r-squared yang sempurna dengan seluruh peubah bebas dapat memberikan pengaruh yang sama-sama signifikan terhadpa variabel dependennya.

Regression Forecasting

Dikarenakan R-SQuared yang hampir sempurna, maka pada grafik perbandingan aktual vs prediksi, diharapkan model Regresi Linear akan menyerupai garis yang sama persis.

library(plotly)
salespredictions = predict(regsales)

start = ymd("2019-01-01")
end = ymd("2024-05-01")
months = seq(start, end, by = "month")

actualplot = plot_ly(x = months, y = sales$Product_Sales, type = 'scatter', mode = 'lines', name = 'Actual') %>%
  add_trace(y =salespredictions , name ='Predicted') %>%
  layout(title ='Regression Model Forecasting', 
         xaxis = list(title = 'Date'), 
         yaxis = list(title = 'Product Sales'))

actualplot

Sesuai yang digambarkan oleh R-Squared sempurna, garis prediksi yang dihasilkan juga membentuk gari syang dapat dikatakan sama persis antar aaktual dan prediksi. Atau bisa dibilang, model regresi yang dimodelkan termasuk Berhasil walau tidak lolos beberapa uji asumsi.

Time Series Analysis

Analisis runtun waktu merupakan analisis sekumpulan data dalam suatu periode waktu yang lampau yang berguna untuk mengetahui atau meramalkan kondisi masa mendatang (Soejoeti,1987). Menggunakan variabel Product_Sales sebagai prediktor, akan diteliti hubungannya terhadap waktu apakah ada trend seasond atau lainnya.

Decomposing

Dengan Decompositioin, dapat diketahui bentukan data secara trend atau season, sehingga dapat digunakan model yang tepat, seperti ARIMA jika Stasioner atau Holts-Winter jika Seasonal.

library(MASS)
library(reshape2)

tssales <- ts(sales$Product_Sales, start = c(month(sales$Month[1]), day(sales$Month[1])), frequency = 30)

decomposing <- decompose(tssales)

trend <- decomposing$trend
seasonal <- decomposing$seasonal
cycle <- decomposing$random

decomposition_data <- data.frame(Date = time(tssales), Trend = trend, Seasonal = seasonal, Cycle = cycle)
melted_data <- melt(decomposition_data, id.vars = "Date")
head(melted_data)
##       Date variable value
## 1 1.000000    Trend    NA
## 2 1.033333    Trend    NA
## 3 1.066667    Trend    NA
## 4 1.100000    Trend    NA
## 5 1.133333    Trend    NA
## 6 1.166667    Trend    NA
melted_data = na.omit(melted_data)
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()

Data Penjuealan Produk cenderung meningkat secara terus menurus dengen beberapa lanjakan Seasonal. Menandakan bahwa penjualan terus meningkat seperti yang digambarkan Pada Exploratory Data Analysis.

Time Series Model and Forecasting

library(forecast)
library(tseries)

tsssales <- ts(sales$Product_Sales, frequency = 12, start = c(2019, 1))

arima_model <- auto.arima(tsssales)
arima_forecasting <- forecast(arima_model, h = 24) 
plot(arima_forecasting, main = "Forecasting",
     xlab = "Date", ylab = "Produk Sold", xlim = c(2019, 2026))
lines(sales, col = "pink", lwd = 2)  

Menggunakan Metode Time Series ARIMA, diprediksi berdasarkan trend, diforecasting pada 2 tahun ke depan (2025-2026) pemjualan produk akan terus meningkat signifikan seperti pada trend yang terjadi sebeluymnya (Data Historis)

LASSO Alternative Model

Metode Ordinary Least Square (OLS) merupakan salah satu metode untuk mengestimasi model regresi linear. Pada metode OLS terdapat asumsi yang harus dipenuhi yaitu asumsi linearitas, normalitas, homoskedastisitas, dan multikolinearitas. Dalam praktiknya, sering dijumpai keadaan dimana asumsi multikolinearitas ini tidak terpenuhi. Hal ini mengakibatkan model OLS menjadi memiliki variansi yang tinggi dan dinilai kurang akurat. Guna mengatasi masalah multikolinearitas, digunakanlah metode regresi terpenalti seperti Lasso dan Adaptive Lasso yang mampu menyusutkan nilai koefisien regresi dan menyeleksi variabel yang masuk model.

library(glmnet)
library(MASS)


# Memisahkan fitur (X) dan target (y)
X <- as.matrix(sales[, c(-1, -8)])  # Semua kolom kecuali yang terakhir (target)
y <- sales[, 8]  # Kolom terakhir adalah target (harga rumah)

# Membagi data menjadi set pelatihan dan set pengujian
set.seed(123)
train_indices <- sample(1:nrow(sales), nrow(sales)*0.8)
X_train <- X[train_indices, ]
y_train <- y[train_indices]
X_test <- X[-train_indices, ]
y_test <- y[-train_indices]

# Melatih model LASSO dengan cross-validation
lasso_model <- cv.glmnet(X_train, y_train, alpha = 1)

# Menampilkan lambda terbaik
best_lambda <- lasso_model$lambda.min
print(paste("Best lambda:", best_lambda))
## [1] "Best lambda: 1.34466269109473"
# Melakukan prediksi pada set pengujian
predictions <- predict(lasso_model, s = best_lambda, newx = X_test)

# Mengukur Mean Squared Error (MSE)
mse <- mean((abs(predictions - y_test))/y_test)
print(paste("Mean Absolute Percentage Error:", mse))
## [1] "Mean Absolute Percentage Error: 0.00526101365678064"
# Menampilkan koefisien
coef(lasso_model, s = best_lambda)
## 7 x 1 sparse Matrix of class "dgCMatrix"
##                               s1
## (Intercept)         1.588001e+02
## Advertising_Expense 1.001102e+00
## Product_Quality     3.248838e-05
## Product_Price       .           
## Sales_Promotion     .           
## Online_Marketing    .           
## Offline_Marketing   .
# R-SQuared

mean_y <- mean(y)
R_squared <- (1-sum((y_test - predictions)^2) / sum((y - mean_y)^2))

print(paste('Nilai R-SQuared' , R_squared))
## [1] "Nilai R-SQuared 0.999851436263276"

Berdasarkan Metode Lasso, Model yang diperlukan dalam melakukan FOrecasting Penjualan Produk hanyalah variabel Advertising_Expense, dan Product_Quality Dengan Model \[ 158.88 + 1.001 Advertising + 0.000324 Product Quality\]

Yang mana Metode LASSO Mereduksi model sehingga hanya memiliki 2 variabel prediktor yang penting dan signifikan serta mengeliminasi efek Multikolinearitas

Summary Kasus 1

library(forecast)
mape_regression <- mean((abs(sales$Product_Sales - salespredictions))/sales$Product_Sales)
mape_lasso <- mean((abs(sales$Product_Sales - predict(lasso_model, s = best_lambda, newx = X)))/sales$Product_Sales)

arima_forecast_values <- arima_forecasting[1:length(tssales)]
arima_mape <- accuracy(arima_forecasting)[, "MAPE"]


print(paste("MAPE Regresi: ", (mape_regression)))
## [1] "MAPE Regresi:  0.00129741555807151"
print(paste("MAPE Regresi LASSO:" ,(mape_lasso)))
## [1] "MAPE Regresi LASSO: 0.00609573275414783"
print(paste("MAPE ARIMA: ", (arima_mape)))
## [1] "MAPE ARIMA:  0.366992439972355"

Kesimpulan Berdasarkan MAPE YANG ADA, Model terbaik masih dipegang oleh Regresi dengan MAPE sebesar 0.001% disusul oleh Model LASSO dengan MAPE 0.006% Lalu Model Time Series Dengan MAPE 3.66%. hasil Regresi kemungkinan yang tebraik karena data berbentuk linear dengan variabel yang sangat berpengaruh signifikan satu sama lain.

Kasus 2

Dalam melakukan analisis terkait kekuatan ekonomi suatu negara. Dapat dinilai dari variabel yang menunjang pertumbuhan ekonomi negara tersebut. Nilai Stabilittas Mata Uang Suatu Negara terhadap USD, dinilai dapat menjadi salah satu tolak ukur keberhasilan suatu negara dalam menjalankan ekonominya. Penurunan nilai PDB atau Inflasi contohnya, dapat menurunkan Harga Rupiah terhadap Valuta Asing. Indikator ekonomi berupa data historis dalam konteks ekonomi, biasanya dalam skala makroekonomi , yang digunakan oleh analis untuk menafsirkan kemungkinan investasi saat ini atau masa depan. Indikator-indikator ini juga membantu menilai kesehatan perekonomian secara keseluruhan. Dalam Analisis Kasus ini, Akan mencoba memprediksi Kurs USD sebagai ukuran stabilitas mata uang indonesia dalam segala aspek baik ekonomi maupun lainnya. Akan tetapi Mungkin tidak memprediksi masa depan secara akurat dikarenakan banyak asumsi, beberapa di antaranya mungkin tidak dapat diprediksi diluar variabel indikator ekonomi yang digunakan.

Kurs USD ke IDR secara tidak langsung mempengaruhi segala aspek dalam negara Indonesia, pengaruh pada tolak ukur Index Harga Saham BEI, nilai inflasi/deflasi pada devisa serta kekuatan n ilai jual produk domestik (PDB).Karena ketika rupiah menjadi lebih bernilai terhadap mata uang asing, maka barang-barang impor akan menjadi lebih murah bagi penduduk Indonesia dan barang-barang ekspor Indonesia akan menjadi lebih mahal bagi penduduk asing (Miskhin, 2008).

Import Data

Data yang diimport merupakan Data Indikator Ekonomi Indonesia dari Januari 2010 sampai Desember 2021 yang memuat variabel berikut sebagai indikator Ekonomi Indonesia :

-> Bulan : Waktu
-> Inflasi : Tingkat Persen Inflasi yang dikeluarkan oleh Bank Indonesia
-> Suku Bunga : Besarnya bunga yang ditetapkan secara berkala oleh bank sentral, dalam hal ini yaitu Bank Indonesia.
-> Index Harga Saham Gabungan : Indeks Harga Saham Gabungan, yaitu grafik saham yang menunjukkan pergerakan rata-rata seluruh saham di dalam bursa efek.
-> GDP Growth : Pertumbuhan Pendapatan Domestik Bruto secara YoY dibandingkan periode sebelumnya dalam persen.
-> Kurs USD : Nilai Kurs USD 1 ke Rupiah.
-> Angka Pengangguran : adalah persentase jumlah pengangguran terhadap jumlah angkatan kerja. Angkatan Kerja adalah penduduk usia kerja (15 tahun ke atas) sampai usia pensiun.

library(readxl)
indikator = read_excel("datauasekono'.xlsx")

head(indikator)
## # A tibble: 6 × 7
##   Bulan               Inflasi Suku_Bunga  IHSG GDP_Growth KursUSD Pengangguran
##   <dttm>                <dbl>      <dbl> <dbl>      <dbl>   <dbl>        <dbl>
## 1 2010-01-01 00:00:00    0.84        6.5 2611.       6.22   9350          7.41
## 2 2010-02-01 00:00:00    1.14        6.5 2549.       6.22   9337          7.43
## 3 2010-03-01 00:00:00    0.99        6.5 2777.       6.22   9090          7.4 
## 4 2010-04-01 00:00:00    1.15        6.5 2971.       6.22   9012.         7.51
## 5 2010-05-01 00:00:00    1.44        6.5 2797.       6.22   9175          7.28
## 6 2010-06-01 00:00:00    2.42        6.5 2914.       6.22   9060          7.2

Exploratory Data Analysis

library(dplyr)
library(ggplot2)
library(plotly)
library(tidyverse)

Pergerakan Inflasi

figi <- plot_ly(indikator, type = 'scatter', mode = 'lines') %>%
  add_trace(x = ~Bulan, y = ~Inflasi, name = 'Inflasi Rate (Persen)') %>%
  layout(showlegend = F)
options(warn = -1)

figi <- figi %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6', width = 900)


figi

Pada Grafik di atas, Menunjukkan adanya Seasonal pada Variabel Inflasi, dimana inflasi akan cenderung meningkat sepanjang tahun, lalu turun pada awal tahun. (Adjusting)

summary(indikator$Inflasi)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -0.610   0.890   1.710   2.112   2.663   8.380

Suku Bunga

figii <- plot_ly(indikator, type = 'scatter', mode = 'lines', line = list(color = 'rgb(205, 12, 24)', width = 1.5))%>%
  add_trace(x = ~Bulan, y = ~Suku_Bunga, name = 'Suku Bunga BI (Persen)')%>%
  layout(showlegend = F)
options(warn = -1)

figii <- figii %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6', width = 900)


figii

Pada Grafik Suku Bunga BI, cenderung stabil di angka 4-7% dengan beberapa kenaikan dan penurunan yang cukup tinggi secara rata-rata.

Index Harga Saham Gabungan

figiii <- plot_ly(indikator, type = 'scatter', mode = 'lines', line = list(color = 'rgb(0, 12, 24)', width = 1.5))%>%
  add_trace(x = ~Bulan, y = ~IHSG, name = 'IHSG')%>%
  layout(showlegend = F)
options(warn = -1)

figiii <- figiii %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6', width = 900)


figiii

Indeks Harga Saham Gabungan (IHSG) adalah indeks yang mengukur kinerja harga semua saham yang tercatat di Bursa Efek Indonesia. IHSG untuk melihat perkembangan kondisi ekonomi suatu negara seperti aliran modal, pertumbuhan ekonomi, dan penerimaan pajak negara. IHSG berperan besar karena semakin tinggi investasi yang ada dalam negara, maka aliran modal juga akan semakin besar. Dengan modal besar tersebut, perekonomian akan bergerak dan meningkatkan pertumbuhan ekonomi maupun penerimaan negara lewat pajak yang dibayar oleh perusahaan. Dari pajak itulah pemerintah bisa membuat kebijakan baru untuk mensejahterakan masyarakat.

Pada Grafik Di Atas, IHSG di BEI cenderug mengalami kenaikan pertahunnya, dengan beberapa fluktuasi yang ada sepanjang tahun.

GDP Growth

figiv <- plot_ly(indikator, type = 'scatter', mode = 'lines', line = list(color = 'rgb(205, 12, 24)', width = 1.5))%>%
  add_trace(x = ~Bulan, y = ~GDP_Growth, name = 'Pertumbuhan PDB (Persen)')%>%
  layout(showlegend = F)
options(warn = -1)

figiv <- figiv %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6', width = 900)


figiv

Pertumbuhan PDB Mengindikasikan adanya Pertumbuhan ekonomi yaitu dalam peningkatan kemampuan dari suatu perekonomian dalam memproduksi barang dan atau jasa. Dapat dilihat, bahwa Grafik pertumbuhan PDB Indonesia secara YearOnYear cenderung terus bertumbuh sekian persen, namun terdampak pada 2020 akibat pandemi global COVID yang menurunkan PDB sampai 2% yang mana relatif tinggi.

Kurs USD To IDR

figv <- plot_ly(indikator, type = 'scatter', mode = 'lines', line = list(color = 'rgb(205, 12, 24)', width = 1.5))%>%
  add_trace(x = ~Bulan, y = ~KursUSD, name = 'Kurs USD to IDR')%>%
  layout(showlegend = F)
options(warn = -1)

figv <- figv %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6', width = 900)


figv

Valuta Asing yang menjadi Acuan indikator stabilitas ekonomi dan nilai tukar mata uang suatu negara merupakan USD. Dari 2010-2021 Rupiah cenderung makin melemah terhadap USD dari dibawah 10 Ribu sampai sekarang sekitar 14 Ribu.

Angka Pengangguran

figvi <- plot_ly(indikator, type = 'scatter', mode = 'lines', line = list(color = 'rgb(205, 12, 24)', width = 1.5))%>%
  add_trace(x = ~Bulan, y = ~Pengangguran, name = 'Angka pengangguran(Persen)')%>%
  layout(showlegend = F)
options(warn = -1)

figvi <- figvi %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6', width = 900)


figvi

Angka Pengangguran menjelaskan bahwa semakin banyak angkatan kerja Indonesia yang berkontribusi dalam peningkatan PDB. Tiap tahun, persentase pengangguran cenderung menurun yang man amerupakan hal yang bagus, namun sempat melonjak akibat PHK efek dari Pandemi COvid19

Interaksi Variabel Kurs dan IHSG

figvii <- plot_ly(indikator, type = 'scatter', mode = 'lines', line = list(color = 'rgb(0, 12, 24)', width = 1.5))%>%
  add_trace(x = ~Bulan, y = ~IHSG, name = 'IHSG BEI')%>%
  layout(showlegend = F)
options(warn = -1)

figvii <- figvii %>% add_trace(x = ~Bulan, y = ~KursUSD, name = 'Kurs USD', line = list(color = '#ff5588', width = 1.5)) 

figvii <- figvii %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6', width = 900)


figvii

Setelah Melihat Grafik IHSG Dan Kurs USD, sama sama menunjukkan Trend yang cenderung naik secara pertahunnya. Pada grafik line gabungan diatas, dapat dilihat secara visual bahwa sepertinya USD memiliki interakti langsung secara signifikan terhadap nilai IHSG di BEI.

Correlation Analysis

indikatori = indikator[,2:7]
library(corrplot)
corrr = cor(indikatori)
corrplot(corrr, method = 'number')

Seperti yang digambarkan Grafik, Kurs USD memiliki Hubungan kuat terhadap IHSG. Selai IHSG, Kurs USD juga memiliki hubungan kuat terhadap GDP dan Angka Pengangguran namun dalam arah yang sebaliknya.

Semakin Meningkatnya Angka Pertubuhan GDP, semakin mengecil nilai tukar Kurs USD yang artinya mata uang Rupiah mengalami penguatan yang cukup signifikan. Hal ini dipengaruhi pula oleh ANngka Pengangguran, dimana semakin sedikit persentase pengangguran, Rupiah akan cenderung menguat. Kurs USD juga ternyat amemiliki hubungan terhadap Suku Bunga BI.

Linear Model

Asumsi Klasik

Normalitas

shapiro.test(indikator$Inflasi)
## 
##  Shapiro-Wilk normality test
## 
## data:  indikator$Inflasi
## W = 0.83733, p-value = 2.461e-11
shapiro.test(indikator$Suku_Bunga)
## 
##  Shapiro-Wilk normality test
## 
## data:  indikator$Suku_Bunga
## W = 0.93621, p-value = 4.182e-06
shapiro.test(indikator$KursUSD)
## 
##  Shapiro-Wilk normality test
## 
## data:  indikator$KursUSD
## W = 0.85843, p-value = 1.939e-10
shapiro.test(indikator$IHSG)
## 
##  Shapiro-Wilk normality test
## 
## data:  indikator$IHSG
## W = 0.96468, p-value = 0.0009088
shapiro.test(indikator$GDP_Growth)
## 
##  Shapiro-Wilk normality test
## 
## data:  indikator$GDP_Growth
## W = 0.57591, p-value < 2.2e-16
shapiro.test(indikator$Pengangguran)
## 
##  Shapiro-Wilk normality test
## 
## data:  indikator$Pengangguran
## W = 0.95779, p-value = 0.0002145

Hasil Shapiro Wilk menyatakan bahwa, Data semua variabel yang digunakan dalam model prediksi cnderung berdistribusi normal.

Multicolinearity

library(car)
modeleko = lm(KursUSD ~ . , data = indikatori)

vif(modeleko)
##      Inflasi   Suku_Bunga         IHSG   GDP_Growth Pengangguran 
##     1.142712     1.954974     3.578668     1.407367     2.544789

Pada VAriabel yang digunakan juga tidak terdapat multikolinearitas yang terlalu besar yang menganggu variabel lain.

Heterosekdasitas

library(lmtest)
bptest(modeleko)
## 
##  studentized Breusch-Pagan test
## 
## data:  modeleko
## BP = 23.229, df = 5, p-value = 0.0003051

Berdasarkan hasil uji BP di atas, diketahui bahwa p-value yang didapatkan sebesar kurang dari 0.05. Artinya, data residual pada model ini bersifat heteroskedasitas.

Regression Model

modeleko = lm(KursUSD ~ . , data = indikatori)

summary(modeleko)
## 
## Call:
## lm(formula = KursUSD ~ ., data = indikatori)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2910.9  -700.0    61.6   689.2  3305.3 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  7219.4868  2361.8230   3.057  0.00269 ** 
## Inflasi       -48.1580    51.0346  -0.944  0.34701    
## Suku_Bunga    244.3843    95.5876   2.557  0.01165 *  
## IHSG            1.4890     0.1635   9.108 8.60e-16 ***
## GDP_Growth   -403.4219    48.7070  -8.283 9.37e-14 ***
## Pengangguran -312.1069   219.3046  -1.423  0.15694    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1050 on 138 degrees of freedom
## Multiple R-squared:  0.7763, Adjusted R-squared:  0.7682 
## F-statistic: 95.78 on 5 and 138 DF,  p-value: < 2.2e-16

Pada Model Forecasting yang menggunakan Regresi Multivariat, didapatkan Model untuk memprediksi Kurs USD \[ Kurs USD = 7219.487 - 48.158(Infalsi) + 244.38(Suku_Bunga) + 1.489(IHSG) -403.422(GDP_Growth) - 312.10(Pengangguran) \]

Yang berarti bahwa kenaikan inflasi, Pertumbuhan PDB serta Tingkat Pengangguran mempengaruhi Kurs USD kearah sebaliknya. Sehingga yang mempengaruhi secara searah adalah IHSG dan Suku Bunga.

Pada Model yang dihasilkan, menghasilkan R-Squared sebesar 76.8% yang mana cukup signifikan dengan variabel prediktor yang beberapa cukup signifikan dalam memprediksi nilai USD.

Forecasting

library(plotly)
predictions = predict(modeleko)

start = ymd("2010-01-01")
end = ymd("2021-12-01")
dates = seq(start, end, by = "month")

actualplot = plot_ly(x = dates, y = indikator$KursUSD, type = 'scatter', mode = 'lines', name = 'Actual') %>%
  add_trace(y =predictions , name ='Predicted') %>%
  layout(title ='Regression Model Forecasting', 
         xaxis = list(title = 'Date'), 
         yaxis = list(title = 'KURS USD'))

actualplot

MAPE

library()
regression_forecast_values <- predict(modeleko, newdata = indikator)
regression_mape <- (mean((abs(indikator$IHSG - regression_forecast_values)/indikator$IHSG)))

cat('Nilai MAPE Model Regresi', regression_mape, "\n")
## Nilai MAPE Model Regresi 1.47835

Time Series

Dalam melakukan analisis deret waktu untuk setiap indikator ekonomi, langkah pertama yang dilakukan adalah memeriksa stasionaritas deret waktu menggunakan uji yang sesuai

Autocorrelation and Stationarity

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


acf(ts_data)

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

plot(pacf(ts_data))

library(tseries)
adf.test(ts_data)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ts_data
## Dickey-Fuller = -1.1394, Lag order = 5, p-value = 0.9132
## alternative hypothesis: stationary

Karena p-value > 0.05 maka Data KursUSD dinyatakan tidak Stasioner, sehingga perlu adanya differensiasi

train.diff<- diff(ts_data, differences = 1)
adf.test(train.diff)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  train.diff
## Dickey-Fuller = -4.8479, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

Decomposition

library(reshape2)

decomposed <- decompose(train.diff)

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

decomposition_data <- data.frame(Date = time(train.diff), Trend = trend, Seasonal = seasonal, Cycle = cycle)
melted_data <- melt(decomposition_data, id.vars = "Date")
head(melted_data)
##       Date variable value
## 1 2010.083    Trend    NA
## 2 2010.167    Trend    NA
## 3 2010.250    Trend    NA
## 4 2010.333    Trend    NA
## 5 2010.417    Trend    NA
## 6 2010.500    Trend    NA
melted_data = na.omit(melted_data)
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()

Kurs USD cenderung mengalami trend kenaikan dan Seasonal, dimana kenaikan yang signifikan disertai dengan penuruan atau kestabilan rupiah dalam mengejar nilai Kurs USD. Hal tersebut terjadi berulang kali.

Forecasting

library(forecast)
indikator$Bulan <- as.Date(indikator$Bulan)
ts_data <- ts(indikator$KursUSD, start = c(year(indikator$Bulan[1]), month(indikator$Bulan[1])), frequency = 12)

arima_model <- auto.arima(ts_data)

summary(arima_model)
## Series: ts_data 
## ARIMA(0,1,0) 
## 
## sigma^2 = 106390:  log likelihood = -1030.51
## AIC=2063.02   AICc=2063.05   BIC=2065.98
## 
## Training set error measures:
##                    ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
## Training set 34.09271 325.0405 197.5302 0.264925 1.548267 0.2693441 -0.1030007
library(forecast)

forecast_arima <- forecast(arima_model, h = 4)

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. ARIMA Forecast',
         xaxis = list(title = 'Time'),
         yaxis = list(title = 'Sales Revenue'))

plot_time_series

Berdasarkan Grafik Di Atas, Prediksi Kurs USD selama 4 Bulan ke depan yaitu Januari-April 2022 Cenderung stabil di angka 14.250 Rupiah yang mana merupakan sebuah prediksi bukan peramalan cenayang. Hal ini dikarenakan ARIMA hanya cocok untuk peramalan dengan time-span pendek kedepannya.

Summary Kasus 2

library(forecast)
mape_regression <- mean((abs(indikator$KursUSD - predictions))/indikator$KursUSD)

arima_mape <- accuracy(arima_model)[, "MAPE"]


print(paste("MAPE Regresi: ", (mape_regression)))
## [1] "MAPE Regresi:  0.0715554898234531"
print(paste("MAPE ARIMA: ", (arima_mape)))
## [1] "MAPE ARIMA:  1.54826687988029"

Pada Metode Regresi Nilai MAPE adalah sebesar 7.15% sedangkan pada ARIMA hanya sekitar 1.54% yang berarti pada Forecasting Data yang tidak Linear sempurna (Terdapat fluktuasi) Time series masih lebih dapat diandalkan daripada Regresi Linear biasa.

Implications

Berdasarkan hasil analisis time series ataupun regresi, diketahui bahwa Kurs USD terhadap IDR merupakan poin utama sebuah negara di cap stabil dalam Ekonomi. Oleh karena itu, pemerintah harus mendorong laju pertumbuhan ekonomi (PDB) dan menekan angka Pengangguran secara “full-power”. Karena dengan kedua variabel tersebut, nilai Kurs USD dapat diimbangi atau bahkan menguatkan nilai tukar Rupiah. Nilai Kurs USD ini sangat berpengaruh dalam kehidupan berekonomi dalam negara, Seperti variabek suku bunga BI yang jika KURS USD meningkat, maka bunga jug ameningkat yang mengakibatkan lemahnya nilai tukar Rupiah ke depannya. Manajemen Stabilitas Rupiah diperlukan agar mengelola nilai tukar demi mengurangi tekanan inflasi baik dari ekonomi dalam negeri maupun tukar valuta asinng. Langkah-langkah untuk menjaga stabilitas harga tukar dapat mendorong pertumbuhan ekonomi.