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)
fig0fig00 <- 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)
fig00Dari 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.
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-Wilk normality test
##
## data: sales$Advertising_Expense
## W = 0.95871, p-value = 0.0294
##
## Shapiro-Wilk normality test
##
## data: sales$Product_Quality
## W = 0.95257, p-value = 0.01425
##
## Shapiro-Wilk normality test
##
## data: sales$Product_Price
## W = 0.94649, p-value = 0.007116
##
## Shapiro-Wilk normality test
##
## data: sales$Product_Sales
## W = 0.96258, p-value = 0.0468
##
## Shapiro-Wilk normality test
##
## data: sales$Sales_Promotion
## W = 0.95356, p-value = 0.01599
##
## Shapiro-Wilk normality test
##
## data: sales$Online_Marketing
## W = 0.95051, p-value = 0.01124
##
## 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
##
## 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.
## 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
##
## 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'))
actualplotSesuai 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"
## 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"
## [1] "MAPE Regresi LASSO: 0.00609573275414783"
## [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.
## # 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
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)
figiPada Grafik di atas, Menunjukkan adanya Seasonal pada Variabel Inflasi, dimana inflasi akan cenderung meningkat sepanjang tahun, lalu turun pada awal tahun. (Adjusting)
## 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)
figiiPada 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)
figiiiIndeks 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)
figivPertumbuhan 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)
figvValuta 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)
figviAngka 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)
figviiSetelah 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-Wilk normality test
##
## data: indikator$Inflasi
## W = 0.83733, p-value = 2.461e-11
##
## Shapiro-Wilk normality test
##
## data: indikator$Suku_Bunga
## W = 0.93621, p-value = 4.182e-06
##
## Shapiro-Wilk normality test
##
## data: indikator$KursUSD
## W = 0.85843, p-value = 1.939e-10
##
## Shapiro-Wilk normality test
##
## data: indikator$IHSG
## W = 0.96468, p-value = 0.0009088
##
## Shapiro-Wilk normality test
##
## data: indikator$GDP_Growth
## W = 0.57591, p-value < 2.2e-16
##
## 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
## 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
##
## 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
##
## 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'))
actualplotTime 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)")##
## 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
##
## 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_seriesBerdasarkan 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"
## [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.