Ekonometrika
Final Test
| Kontak | : \(\downarrow\) |
| mugemisausan05@gmail.com | |
| https://www.instagram.com/saram.05/ | |
| RPubs | https://rpubs.com/sausanramadhani/ |
Data for Sales Analysis
The dataset below represents the monthly sales data of a company, including various factors that might influence product sales. The data is presented in a tabular format with each row representing a month and each column representing a variable.
library(tibble)
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)Dataset ini mencakup variabel-variabel berikut:
- Month: Bulan pengamatan.
- Advertising_Expense: Jumlah yang dihabiskan untuk iklan (dalam dolar).
- Product_Quality: Nilai kualitas produk (dalam skala dari 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.
Translated with DeepL.com (free version)
Regression Analysis
# Regression Analysis
reg_model <- lm(Product_Sales ~ Advertising_Expense + Product_Quality + Product_Price + Sales_Promotion + Online_Marketing + Offline_Marketing, data = sales_data)
# Summary of the regression model
summary(reg_model)##
## 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
Didapatkan nilai p-value < 2.2e-16. Artinya, model ini memiliki pengaruh signifikan terhadap penjualan. Terlebih nilai multiple R-squared sebesar 0,9999 menunjukkan bahwa 99,99% variasi dalam penjualan dapat dijelaskan oleh model ini. Dengan begitu, menunjukkan model yang sangat baik.
Time Series Analysis
# Load necessary libraries for time series analysis
library(forecast)
library(tseries)
# Convert the sales data to a time series object
sales_ts <- ts(sales_data$Product_Sales, start = c(2019, 1), frequency = 12)
# Decompose the time series
decomposed_ts <- decompose(sales_ts)
# Plot the decomposed components
plot(decomposed_ts)# Fit an ARIMA model
arima_model <- auto.arima(sales_ts)
# Summary of the ARIMA model
summary(arima_model)## Series: sales_ts
## ARIMA(2,1,2) with drift
##
## Coefficients:
## ar1 ar2 ma1 ma2 drift
## -1.3317 -0.9433 1.8308 0.8406 5.2913
## s.e. 0.1659 0.0541 0.2004 0.2023 0.2992
##
## sigma^2 = 4.932: log likelihood = -144.16
## AIC=300.32 AICc=301.79 BIC=313.27
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.01087948 2.115745 1.02334 0.02892078 0.3669924 0.01663712
## ACF1
## Training set -0.3067911
# Forecast future sales
forecast_sales <- forecast(arima_model, h = 12)
# Plot the forecast
plot(forecast_sales)Comparission Forecasting
# Split the data into training and test sets
train_ts <- window(sales_ts, end = c(2022, 12))
test_ts <- window(sales_ts, start = c(2023, 1))
# Fit various models
arima_model <- auto.arima(train_ts)
ets_model <- ets(train_ts)
tbats_model <- tbats(train_ts)
# Forecast using the models
forecast_arima <- forecast(arima_model, h = length(test_ts))
forecast_ets <- forecast(ets_model, h = length(test_ts))
forecast_tbats <- forecast(tbats_model, h = length(test_ts))
# Calculate RMSE for each model
rmse_arima <- sqrt(mean((forecast_arima$mean - test_ts)^2))
rmse_ets <- sqrt(mean((forecast_ets$mean - test_ts)^2))
rmse_tbats <- sqrt(mean((forecast_tbats$mean - test_ts)^2))
# Print RMSE values
cat("RMSE of ARIMA model:", rmse_arima, "\n")## RMSE of ARIMA model: 3.810461
cat("RMSE of ETS model:", rmse_ets, "\n")## RMSE of ETS model: 3.285274
cat("RMSE of TBATS model:", rmse_tbats, "\n")## RMSE of TBATS model: 8.801739
# Compare models based on RMSE
best_model <- ifelse(min(rmse_arima, rmse_ets, rmse_tbats) == rmse_arima, "ARIMA",
ifelse(min(rmse_arima, rmse_ets, rmse_tbats) == rmse_ets, "ETS", "TBATS"))
cat("The best model based on RMSE is:", best_model, "\n")## The best model based on RMSE is: ETS
Setelah membuat model ARIMA, ETS, dan TBATS, didapatkan nilai RMSE masing-masing yaitu sebesar 3.810461, 3.285274, 8.801739. Model dengan nilai RMSE terendah adalah yang paling akurat. Dalam kasus ini, model ETS memiliki RMSE paling rendah (3.285274), sehingga model ETS adalah model terbaik untuk memprediksi penjualan dalam dataset ini.
Study Case (Data BPS)
Collect dataset from BPS to analyse the relationship between monthly economic indicators, including :
- Inflation Rate
- GDP Growth Rate
- Unemployment Rate
- Interest Rate
- Consumer Confidence
- Stock Market Index
- Exchange Rate
Data Collection
library(readxl)
final_eko <- read_xlsx("final_test_eko.xlsx")
final_ekoData Exploration
# Melihat struktur dataset
str(final_eko)## tibble [144 × 9] (S3: tbl_df/tbl/data.frame)
## $ Tahun : num [1:144] 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
## $ Bulan : chr [1:144] "Januari" "Februari" "Maret" "April" ...
## $ Inflation_Rate : num [1:144] 0.84 1.14 0.99 1.15 1.44 2.42 4.02 4.82 5.28 5.35 ...
## $ GDP_Growth_Rate : num [1:144] 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 ...
## $ Unemployment_Rate : num [1:144] 1.19 1.24 1.24 1.24 1.24 ...
## $ Interest_Rate : num [1:144] 6.5 6.5 6.5 6.5 6.5 6.5 6.5 6.5 6.5 6.5 ...
## $ Consumer_Confidence: num [1:144] 107 102 102 106 106 ...
## $ Stock_Market_Index : num [1:144] 2611 2549 2777 2971 2797 ...
## $ Exchange_Rate : num [1:144] 9365 9335 9115 9012 918 ...
# Melihat nama kolom
names(final_eko)## [1] "Tahun" "Bulan" "Inflation_Rate"
## [4] "GDP_Growth_Rate" "Unemployment_Rate" "Interest_Rate"
## [7] "Consumer_Confidence" "Stock_Market_Index" "Exchange_Rate"
Dataset kasus 2 final_eko memiliki 144 baris dan 9
kolom. Berikut ini variabel yang ada di dalamnya :
- Tahun (num): tahun data dari 2010 hingga 2021
- Bulan (chr): nama bulan (Januari, Februari, Maret, dll)
- Inflation_Rate (num): tingkat inflasi bulanan
- GDP_Growth_Rate (num): tingkat pertumbuhan GDP (Gross Domestic Product) per bulan
- Unemployment_Rate (num): tingkat pengangguran per bulan
- Interest_Rate (num): tingkat suku bunga bulanan
- Consumer_Confidence (num): indeks kepercayaan konsumen per bulan
- Stock_Market_Index (num): indeks pasar saham bulanan
- Exchange_Rate (num): nilai tukar mata uang per bulan
# Menghitung statistik deskriptif
summary(final_eko)## Tahun Bulan Inflation_Rate GDP_Growth_Rate
## Min. :2010 Length:144 Min. :-0.610 Min. :0.1700
## 1st Qu.:2013 Class :character 1st Qu.: 0.890 1st Qu.:0.4075
## Median :2016 Mode :character Median : 1.710 Median :0.4150
## Mean :2016 Mean : 2.112 Mean :0.4125
## 3rd Qu.:2018 3rd Qu.: 2.663 3rd Qu.:0.4700
## Max. :2021 Max. : 8.380 Max. :0.5300
## Unemployment_Rate Interest_Rate Consumer_Confidence Stock_Market_Index
## Min. :0.8233 Min. :3.500 Min. : 77.3 Min. :2549
## 1st Qu.:0.9096 1st Qu.:4.750 1st Qu.:106.8 1st Qu.:4272
## Median :0.9850 Median :5.750 Median :114.3 Median :5078
## Mean :1.0033 Mean :5.788 Mean :111.9 Mean :5008
## 3rd Qu.:1.0667 3rd Qu.:6.750 3rd Qu.:120.2 3rd Qu.:5949
## Max. :1.2467 Max. :7.750 Max. :128.2 Max. :6606
## Exchange_Rate
## Min. : 918
## 1st Qu.: 9669
## Median :13310
## Mean :12215
## 3rd Qu.:14103
## Max. :16367
Seperti yang diminta, dataset terdiri dari tahun 2010 sampai 2021. Besaran nilai dari tiap variabel sebagai berikut :
Inflation_Rateberkisar dari -0.610 hingga 8.380 dengan rata-rata 2.112. Inflasi rendah artinya harga stabil, sedangkan inflasi tinggi bisa dikatakan kenaikan harga cepat.GDP_Growth_Rateberada antara 0.170 hingga 0.530 dengan rata-rata 0.413. Hal ini menunjukkan bahwa pertumbuhan ekonomi yang stabil dengan varian kecil.Unemployment_Ratebervariasi dari 0.823 hingga 1.247 dengan rata-rata 1.003. Tingkat pengangguran rendah artinya lebih banyak orang yang bekerja.Interest_Rateberkisar dari 3.500 hingga 7.750 dengan rata-rata 5.788. Suku bunga yang lebih rendah bisa mempermudah pinjaman, sedangkan suku bunga tinggi bisa membuat pinjaman lebih mahal.Consumer_Confidenceberkisar dari 77.3 hingga 128.2 dengan rata-rata 111.9. Dilihat dari rata-ratanya yang terbilang tinggi, menunjukkan konsumen lebih percaya diri dan cenderung lebih banyak berbelanja.Stock_Market_Indexberkisar dari 2549 hingga 6606 dengan rata-rata 5008. Dapat dikatakan bahwa harga saham cenderung naik dilihat dari index yang tinggi. Artinya, perusahaan-perusahaan berkinerja baik.Exchange_Rateberkisar dari 918 hingga 16367 dengan rata-rata 12215. Tingginya exchange rate mengartikan bahwa mata uang lokal lebih kuat daripada mata uang asing.
Correlation Analysis
Calculate the correlation matrix to examine the relationships between pairs of economic indicators.
# Memuat pustaka yang dibutuhkan
library(ggplot2)
library(ggcorrplot)
library(plotly)
# Menghitung matriks korelasi
correlation_matrix <- cor(final_eko[, -c(1, 2)], use = "complete.obs")
# Menampilkan matriks korelasi
print(correlation_matrix)## Inflation_Rate GDP_Growth_Rate Unemployment_Rate
## Inflation_Rate 1.0000000 0.3422833 0.1521063
## GDP_Growth_Rate 0.3422833 1.0000000 0.2789882
## Unemployment_Rate 0.1521063 0.2789882 1.0000000
## Interest_Rate 0.3067269 0.5377455 0.1606966
## Consumer_Confidence 0.1123706 0.4045857 -0.4495206
## Stock_Market_Index -0.2534055 -0.5406636 -0.6656832
## Exchange_Rate -0.2583942 -0.7202913 -0.6461256
## Interest_Rate Consumer_Confidence Stock_Market_Index
## Inflation_Rate 0.3067269 0.11237064 -0.2534055
## GDP_Growth_Rate 0.5377455 0.40458566 -0.5406636
## Unemployment_Rate 0.1606966 -0.44952057 -0.6656832
## Interest_Rate 1.0000000 0.21135648 -0.5449807
## Consumer_Confidence 0.2113565 1.00000000 0.3017572
## Stock_Market_Index -0.5449807 0.30175721 1.0000000
## Exchange_Rate -0.4266062 0.02842479 0.7989091
## Exchange_Rate
## Inflation_Rate -0.25839419
## GDP_Growth_Rate -0.72029134
## Unemployment_Rate -0.64612561
## Interest_Rate -0.42660619
## Consumer_Confidence 0.02842479
## Stock_Market_Index 0.79890906
## Exchange_Rate 1.00000000
# Visualisasi matriks korelasi menggunakan ggcorrplot
ggcorrplot(correlation_matrix,
method = "circle",
type = "lower",
lab = TRUE,
lab_size = 3,
colors = c("red", "white", "blue"),
title = "Correlation Matrix Heatmap",
ggtheme = theme_minimal())Correlation Matrix Heatmap di atas menunjukkan seberapa kuat hubungan linear antara setiap pasangan variabel. Tujuannya untuk mengidentifikasi pasangan variabel yang memiliki hubungan signifikan.
Berikut ini hasil dari correlation matrix heatmap di atas :
- Korelasi Kuat Positif : ditandai dengan lingkaran
besar dan penuh warna biru yaitu pasangan variabel
Stock_Market_IndexdenganExchange_Rateyang mana berkorelasi sebesar 0.8. Artinya ketika nilai tukar naik, maka indeks pasar saham juga cenderung naik. - Korelasi Kuat Negatif : ditandai dengan lingkaran
besar dan penuh warna merah yaitu pasangan variabel
GDP_Growth_RatedenganExchange_Rateyang mana berkorelasi sebesar -0,72. Artinya ketika pertumbuhan GDP naik, maka nilai tukar cenderung turun. Begitu pula korelasi pasangan variabelUnemployment_RatedenganStock_Market_Index(-0,67),Unemployment_RatedenganExchange_Rate(-0,65),GDP_Growth_RatedenganStock_Market_Index(-0,54). - Korelasi Lemah Positif : ditandai dengan lingkaran
kecil dan warna biru pudar, dimana pasangan variabel dengan korelasi
positif paling lemah yaitu
Consumer_ConfidencedenganExchange_Ratesebesar 0,03. Artinya hampir tidak ada hubungan antara kepercayaan konsumen dengan nilai tukar. - Korelasi Lemah Negatif : ditandai dengan lingkaran
kecil dan warna merah pudar, dimana pasangan variabel dengan korelasi
negatif paling lemah yaitu
Inflation_RatedenganStock_Market_Indexsebesar -0,25. Artinya hubungan antara tingkat inflasi dengan indeks pasar saham sangat lemah.
Visualize the correlations using a heatmap or correlation plot.
library(plotly)
# Mengonversi matriks korelasi ke format dataframe
correlation_df <- as.data.frame(as.table(correlation_matrix))
# Membuat heatmap interaktif menggunakan plotly
heatmap_plot <- plot_ly(
x = colnames(correlation_matrix),
y = rownames(correlation_matrix),
z = correlation_matrix,
type = "heatmap",
colorscale = "RdBu",
reversescale = TRUE
) %>% layout(
title = "Correlation Matrix Heatmap",
xaxis = list(title = ""),
yaxis = list(title = "")
)
# Menampilkan heatmap
heatmap_plotHeatmap di atas menunjukkan hubungan antara variabel-variabel, sama halnya dengan matriks korelasi. Tiap sel heatmap mewakili hubungan 2 variabel, berikut penjelasan tiap warnanya :
- Warna Biru : menunjukkan korelasi positif. Semakin gelap warna biru, semakin kuat korelasi positifnya.
- Warna Merah : menunjukkan korelasi negatif. Semakin gelap warna merah, semakin kuat korelasi negatifnya.
- Warna Putih : menunjukkan tidak ada korelasi atau korelasi yang sangat lemah.
Time Series Analysis
Conduct time series analysis for each economic indicator, including:
Checking for stationarity using appropriate tests (e.g., Augmented Dickey-Fuller test).
# Fungsi untuk memeriksa stasioneritas menggunakan ADF test
check_stationarity <- function(series) {
adf_result <- adf.test(series)
cat("ADF Statistic:", adf_result$statistic, "\n")
cat("p-value:", adf_result$p.value, "\n")
cat("Critical Values:", paste(adf_result$critical, collapse = ", "), "\n")
cat("Result:", ifelse(adf_result$statistic < adf_result$critical[2], "Stationary", "Non-Stationary"), "\n")
}
# Melakukan uji stasioneritas untuk setiap variabel
variables <- colnames(final_eko)[-c(1, 2)] # Excluding 'Tahun' and 'Bulan'
for (var in variables) {
cat("Stationarity Test for", var, "\n")
check_stationarity(final_eko[[var]])
cat("\n")
}## Stationarity Test for Inflation_Rate
## ADF Statistic: -6.205589
## p-value: 0.01
## Critical Values:
## Result:
##
## Stationarity Test for GDP_Growth_Rate
## ADF Statistic: -2.803017
## p-value: 0.2420838
## Critical Values:
## Result:
##
## Stationarity Test for Unemployment_Rate
## ADF Statistic: -2.080191
## p-value: 0.5430416
## Critical Values:
## Result:
##
## Stationarity Test for Interest_Rate
## ADF Statistic: -2.435042
## p-value: 0.3952948
## Critical Values:
## Result:
##
## Stationarity Test for Consumer_Confidence
## ADF Statistic: -2.343315
## p-value: 0.4334868
## Critical Values:
## Result:
##
## Stationarity Test for Stock_Market_Index
## ADF Statistic: -2.782476
## p-value: 0.2506362
## Critical Values:
## Result:
##
## Stationarity Test for Exchange_Rate
## ADF Statistic: -1.294441
## p-value: 0.8701992
## Critical Values:
## Result:
Berdasarkan hasil Augmented Dickey-Fuller test (ADF test),
hanya terdapat 1 variabel yang stasioner yaitu
Inflation_Rate. Dimana memiliki nilai p-value 0.01
(lebih kecil dari 0.05 = H0 ditolak) artinya data stasioner. Seharusnya
bisa juga dilihat dari nilai ADF Statistic untuk menentukan data
stasioner atau tidak. Jika nilai ADF Statistic lebih kecil dari Critical
Values, maka data tersebut stasioner (H0 ditolak).
Identifying trends, seasonality, and autocorrelation patterns.
library(plotly)
# Konversi data frame menjadi time series
final_eko_ts <- ts(final_eko[, c("Inflation_Rate", "GDP_Growth_Rate", "Unemployment_Rate", "Interest_Rate", "Consumer_Confidence", "Stock_Market_Index", "Exchange_Rate")], start = c(2010, 1), frequency = 12)
# Fungsi untuk mengidentifikasi tren, musiman, dan pola autokorelasi
identify_patterns <- function(series, var_name) {
plot_ly(
data = data.frame(Time = time(series), Value = as.vector(series)),
x = ~Time,
y = ~Value,
type = 'scatter',
mode = 'lines'
) %>%
layout(
title = paste("Time Series Plot for", var_name),
xaxis = list(title = "Time"),
yaxis = list(title = "Value")
)
}
# Melakukan analisis visual untuk setiap variabel
for (var in colnames(final_eko_ts)) {
cat("Patterns Identification for", var, "\n")
print(identify_patterns(final_eko_ts[, var], var)) # Menggunakan print untuk menampilkan plot
cat("\n\n")
}## Patterns Identification for Inflation_Rate
##
##
## Patterns Identification for GDP_Growth_Rate
##
##
## Patterns Identification for Unemployment_Rate
##
##
## Patterns Identification for Interest_Rate
##
##
## Patterns Identification for Consumer_Confidence
##
##
## Patterns Identification for Stock_Market_Index
##
##
## Patterns Identification for Exchange_Rate
Cara baca plot time series tiap variabel di atas, yaitu tahun sesuai dengan data tetapi time untuk bulan tiap tahunnya diwakilkan dengan angka sebagai berikut :
- Tanpa angka artinya bulan Januari, contohnya “2010, 0.84” artinya Januari 2010 dengan nilai 0.84.
- Angka 5 tanpa angka tambahan sebelum koma artinya bulan Juli, contohnya “2,020.5, 0.17” artinya Juli 2020 dengan nilai 0.17.
- Angka
0=Februari,1=Maret,2=April,3=Mei,4=Juni,5=Agustus,6=September,7=Oktober,8=November,9=Desemberyang mana dengan tambahan dua angka setelahnya (sebelum koma), contohnya “2,0100.083,1.14” artinya Februari 2010 dengan nilai 1.14.
library(forecast)
library(ggplot2)
# Fungsi untuk membuat plot ACF dan PACF menggunakan plotly
plot_acf_pacf <- function(series, var_name) {
# Plot ACF
acf_plot <- ggAcf(series, main = paste("ACF of", var_name)) + theme_minimal()
acf_plotly <- ggplotly(acf_plot)
# Plot PACF
pacf_plot <- ggPacf(series, main = paste("PACF of", var_name)) + theme_minimal()
pacf_plotly <- ggplotly(pacf_plot)
list(acf_plot = acf_plotly, pacf_plot = pacf_plotly)
}
# Loop melalui setiap variabel dan buat plot
for (var in colnames(final_eko_ts)) {
cat("Patterns Identification for", var, "\n")
plots <- plot_acf_pacf(final_eko_ts[, var], var)
print(plots$acf_plot) # Menampilkan plot ACF
print(plots$pacf_plot) # Menampilkan plot PACF
cat("\n\n")
}## Patterns Identification for Inflation_Rate
##
##
## Patterns Identification for GDP_Growth_Rate
##
##
## Patterns Identification for Unemployment_Rate
##
##
## Patterns Identification for Interest_Rate
##
##
## Patterns Identification for Consumer_Confidence
##
##
## Patterns Identification for Stock_Market_Index
##
##
## Patterns Identification for Exchange_Rate
Untuk penentuan trend, tren terlihat sebagai garis yang terus naik atau turun dalam plot deret waktu. Untuk musiman, merupakan pola berulang yang terjadi pada interval waktu yang tetap, seperti bulanan, kuartalan, atau tahunan. Plot Autocorrelation Function (ACF) dan Partial Autocorrelation Function (PACF) dapat membantu mengidentifikasi pola musiman dan siklus.
Berdasarkan 3 plot tiap variabel (keseluruhan = 21 plot), diketahui
bahwa semua variabel merupakan data musiman (seasonal).
Variabel yang memiliki tren menurun diantaranya yaitu
Inflation_Rate, GDP_Growth_Rate,
Unemployment_Rate, dan Interest_Rate.
Sedangkan variabel lainnya memiliki tren naik.
Applying transformations if necessary to achieve stationarity (e.g., first differencing).
# Menerapkan differencing untuk mencapai stasioneritas
final_eko_diff <- diff(final_eko[[var]], lag = 1)Tujuan dari differencing adalah untuk membuat data menjadi lebih stabil dan menghilangkan tren sehingga lebih mudah untuk dianalisis dan diprediksi menggunakan model deret waktu seperti ARIMA.
Building time series models (e.g., ARIMA, GARCH) to forecast future values of each indicator.
# Membangun model ARIMA untuk meramalkan nilai di masa depan
var <- "Exchange_Rate"
model <- auto.arima(final_eko[[var]])
forecast_result <- forecast(model)
# Menampilkan hasil ramalan
print(forecast_result)## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 145 14504.69 13435.29 15574.10 12869.18 16140.20
## 146 14547.27 13447.98 15646.56 12866.05 16228.49
## 147 14589.85 13461.46 15718.24 12864.13 16315.57
## 148 14632.43 13475.67 15789.18 12863.32 16401.53
## 149 14675.01 13490.56 15859.45 12863.55 16486.46
## 150 14717.58 13506.08 15929.08 12864.76 16570.41
## 151 14760.16 13522.20 15998.12 12866.86 16653.46
## 152 14802.74 13538.87 16066.61 12869.81 16735.67
## 153 14845.32 13556.06 16134.58 12873.56 16817.07
## 154 14887.90 13573.73 16202.06 12878.06 16897.73
- Point Forecast: Nilai yang diperkirakan untuk periode tertentu. Misalnya, pada periode 145, nilai yang diperkirakan adalah 14504.69.
- Lo 80 dan Hi 80: Rentang kepercayaan 80%, yang berarti ada 80% kemungkinan bahwa nilai sebenarnya akan berada dalam rentang ini. Untuk periode 145, rentangnya adalah antara 13435.29 dan 15574.10.
- Lo 95 dan Hi 95: Rentang kepercayaan 95%, yang berarti ada 95% kemungkinan bahwa nilai sebenarnya akan berada dalam rentang ini. Untuk periode 145, rentangnya adalah antara 12869.18 dan 16140.20.
Regression Analysis
Formulate a regression model with one or more economic indicators as dependent variables and other indicators as independent variables.
# Merumuskan model regresi dengan beberapa variabel independen
model_formula <- "Inflation_Rate ~ GDP_Growth_Rate + Unemployment_Rate + Interest_Rate + Consumer_Confidence + Stock_Market_Index + Exchange_Rate"Check for multicollinearity among independent variables.
# Matriks korelasi antara variabel independen
correlation_matrix <- cor(final_eko[, -c(1, 2)]) # Exclude 'Tahun' and 'Bulan'
print(correlation_matrix)## Inflation_Rate GDP_Growth_Rate Unemployment_Rate
## Inflation_Rate 1.0000000 0.3422833 0.1521063
## GDP_Growth_Rate 0.3422833 1.0000000 0.2789882
## Unemployment_Rate 0.1521063 0.2789882 1.0000000
## Interest_Rate 0.3067269 0.5377455 0.1606966
## Consumer_Confidence 0.1123706 0.4045857 -0.4495206
## Stock_Market_Index -0.2534055 -0.5406636 -0.6656832
## Exchange_Rate -0.2583942 -0.7202913 -0.6461256
## Interest_Rate Consumer_Confidence Stock_Market_Index
## Inflation_Rate 0.3067269 0.11237064 -0.2534055
## GDP_Growth_Rate 0.5377455 0.40458566 -0.5406636
## Unemployment_Rate 0.1606966 -0.44952057 -0.6656832
## Interest_Rate 1.0000000 0.21135648 -0.5449807
## Consumer_Confidence 0.2113565 1.00000000 0.3017572
## Stock_Market_Index -0.5449807 0.30175721 1.0000000
## Exchange_Rate -0.4266062 0.02842479 0.7989091
## Exchange_Rate
## Inflation_Rate -0.25839419
## GDP_Growth_Rate -0.72029134
## Unemployment_Rate -0.64612561
## Interest_Rate -0.42660619
## Consumer_Confidence 0.02842479
## Stock_Market_Index 0.79890906
## Exchange_Rate 1.00000000
- Nilai Korelasi: Nilai korelasi berkisar dari -1 hingga 1. Nilai 1 menunjukkan hubungan positif sempurna, -1 menunjukkan hubungan negatif sempurna, dan 0 menunjukkan tidak ada hubungan.
- Hubungan Positif: Misalnya, GDP_Growth_Rate memiliki korelasi positif yang cukup kuat dengan Interest_Rate (0.54). Artinya, ketika tingkat pertumbuhan GDP naik, tingkat suku bunga cenderung naik juga.
- Hubungan Negatif: Misalnya, Unemployment_Rate memiliki korelasi negatif kuat dengan Stock_Market_Index (-0.67). Ini berarti ketika tingkat pengangguran naik, indeks pasar saham cenderung turun.
- Hubungan Lemah: Korelasi antara Consumer_Confidence dan Exchange_Rate adalah sangat lemah (0.03), menunjukkan hampir tidak ada hubungan antara kedua variabel ini.
Estimate the regression model using appropriate techniques (e.g., Ordinary Least Squares).
# Mengestimasi model regresi menggunakan Ordinary Least Squares (OLS)
regression_model <- lm(formula = model_formula, data = final_eko)
summary(regression_model)##
## Call:
## lm(formula = model_formula, data = final_eko)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.0505 -1.0637 -0.2038 0.7319 5.8080
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.854e+00 4.138e+00 -0.931 0.3533
## GDP_Growth_Rate 5.218e+00 2.981e+00 1.750 0.0824 .
## Unemployment_Rate 1.463e+00 1.867e+00 0.784 0.4347
## Interest_Rate 2.314e-01 1.599e-01 1.447 0.1501
## Consumer_Confidence 3.953e-03 2.101e-02 0.188 0.8511
## Stock_Market_Index -7.690e-05 3.344e-04 -0.230 0.8185
## Exchange_Rate 7.765e-05 1.398e-04 0.555 0.5796
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.738 on 137 degrees of freedom
## Multiple R-squared: 0.1437, Adjusted R-squared: 0.1062
## F-statistic: 3.831 on 6 and 137 DF, p-value: 0.001458
Inflation_Rate=−3.854 + 5.218⋅GDP_Growth_Rate + 1.463⋅Unemployment_Rate + 0.2314⋅Interest_Rate + 0.00395⋅Consumer_Confidence − 0.0000769⋅Stock_Market_Index + 0.00007765⋅Exchange_Rate
Assess the significance and interpret the coefficients of the independent variables.
Didapatkan p-value 0.001458 (>0.05) menunjukkan bahwa sebagian
besar variabel independen tidak signifikan secara statistik dalam
memprediksi Inflation_Rate
Hasil dari summary(regression_model) akan memberikan informasi tentang signifikansi dan interpretasi koefisien dari variabel independen dalam model regresi.
Model Evaluation
Evaluate the performance of time series and regression models using appropriate metrics (e.g., Mean Absolute Error for forecasting, R-squared for regression).
# Memuat pustaka yang diperlukan
library(forecast)
# Evaluasi performa model ARIMA menggunakan MAE
mae <- accuracy(forecast_result)[, "MAE"]
print(paste("Mean Absolute Error (MAE):", mae))## [1] "Mean Absolute Error (MAE): 376.965013023657"
# Evaluasi performa model regresi menggunakan R-squared
rsquared <- summary(regression_model)$r.squared
print(paste("R-squared:", rsquared))## [1] "R-squared: 0.143671583771379"
Compare the accuracy and goodness-of-fit of different models.
# Menampilkan hasil perbandingan
cat("Comparison of Model Performance:\n")## Comparison of Model Performance:
cat("ARIMA MAE:", mae, "\n")## ARIMA MAE: 376.965
cat("Regression R-squared:", rsquared, "\n")## Regression R-squared: 0.1436716
# Membandingkan model berdasarkan metrik evaluasi
if (mae < 0.2) { # Misalnya, threshold untuk MAE
cat("Model ARIMA memberikan perkiraan yang lebih akurat.\n")
} else {
cat("Model Regresi memberikan kecocokan yang lebih baik.\n")
}## Model Regresi memberikan kecocokan yang lebih baik.
- Mean Absolute Error (MAE) dari model ARIMA: Nilai MAE adalah 376.965. MAE adalah ukuran seberapa besar kesalahan perkiraan model ARIMA rata-rata, semakin kecil nilai MAE, semakin akurat modelnya.
- R-squared dari model regresi: Nilai R-squared adalah 0.144. R-squared mengukur seberapa baik model regresi menjelaskan variabilitas dalam data, dengan nilai mendekati 1 menunjukkan model yang lebih baik.
Seperti pada hasil comparison, dinyatakan bahwa model regresi memberikan kecocokan yang lebih baik.