Tugas Individu
Pendahuluan
Latar Belakang
National Stock Exchange of India Ltd NSE) adalah bursa saham India yang berlokasi di Mumbai, Maharashtra, India. National Stock Exchange (NSE) didirikan pada tahun 1992 sebagai pertukaran elektronik demutualisasi. Itu dipromosikan oleh lembaga keuangan terkemuka atas permintaan Pemerintah India. Ini adalah pertukaran terbesar di India berdasarkan omset. Pada tahun 1994, diluncurkan perdagangan berbasis layar elektronik. Setelah itu, dilanjutkan untuk meluncurkan indeks berjangka dan perdagangan internet pada tahun 2000, yang merupakan yang pertama dari jenisnya di negara ini.
Pada penelitian ini, akan dilakukan analisis regresi pada data National Stock Exchange selama tahun 2015. Analisis yang dilakukan adalah menganalisis hubungan antara peubah volume (jumlah sekuritas yang diperdagangkan selama periode waktu tertentu. Untuk setiap pembeli, ada penjual dan masing-masing transaksi berkontribusi pada jumlah total volume) dan trades(jumlah beli atau jual saham). Analisis regresi yang dilakukan yaitu dengan menggunakan metode model koyck, distribusi lag, dan model autoregressive.
Tujuan
Menganalisis hubungan antara volume dan trades selama satu tahun 2015. Melakukan penanganan autokorelasi model regresi deret waktu dengan metode distribusi lag serta mambandingkan keakuratan ramalan antara model koyck, distribute lag, dan model autoregressive
Pembahasan
Package
#install.packages("dLagM")
#install.packages("dynlm")
#install.packages("MLmetrics")
library(dLagM) #bisa otomatis timeseries datanya
library(dynlm) #data harus timeseries
library(MLmetrics) #MAPE
library(lmtest)
library(car)
library(readxl)Data
Data yang digunakan merupakan data sekunder National Stock Exchange tahun 2015 yang terdapat pada kaagle.com dengan data sebanyak 248 dan 15 peubah. Peubah yang dipilih yaitu volume(Xt) dan trades(Yt).
data <- readxl::read_xlsx("D:/MPDW/datatugasindividu.xlsx")## New names:
## * `` -> `...4`
## * `` -> `...5`
str(data)## tibble [101 x 5] (S3: tbl_df/tbl/data.frame)
## $ t : num [1:101] 1 2 3 4 5 6 7 8 9 10 ...
## $ Xt : num [1:101] 500691 1694580 2484256 2416829 1812479 ...
## $ Yt : num [1:101] 14908 54166 82694 108209 62463 ...
## $ ...4: logi [1:101] NA NA NA NA NA NA ...
## $ ...5: num [1:101] NA NA NA 11215832 NA ...
data## # A tibble: 101 x 5
## t Xt Yt ...4 ...5
## <dbl> <dbl> <dbl> <lgl> <dbl>
## 1 1 500691 14908 NA NA
## 2 2 1694580 54166 NA NA
## 3 3 2484256 82694 NA NA
## 4 4 2416829 108209 NA 11215832
## 5 5 1812479 62463 NA NA
## 6 6 3391230 92752 NA NA
## 7 7 11215832 359214 NA NA
## 8 8 3189722 107209 NA NA
## 9 9 2200309 66676 NA NA
## 10 10 2480315 53263 NA NA
## # ... with 91 more rows
Korelasi Data
cor(data$Xt,data$Yt)## [1] 0.9201965
Scatter Plot Data
plot(data$Xt,data$Yt, col="red", main="Scatter Plot Volume dan Trades")
Berdasarkan scatter plot terlihat bahwa hubungan antara Peubah Volume
(X) dan Trades (Y) memiliki hubungan linier positif dengan nilai
korelasi 0.9201965.
Split Data
train<-data[1:70,]
test<-data[71:100,]Pada data dilakukan splitting data train dengan jumlah amatan 70 dan data test dengan jumlah amatan 30.
#data time series
train.ts<-ts(train)
test.ts<-ts(test)
data.ts<-ts(data)Model Awal
model <- lm(data$Yt~data$Xt, data=data); summary (model)##
## Call:
## lm(formula = data$Yt ~ data$Xt, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -46453 -10091 756 9819 48290
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.031e+04 3.124e+03 6.502 3.25e-09 ***
## data$Xt 2.742e-02 1.172e-03 23.389 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 17450 on 99 degrees of freedom
## Multiple R-squared: 0.8468, Adjusted R-squared: 0.8452
## F-statistic: 547.1 on 1 and 99 DF, p-value: < 2.2e-16
Berdasarkan output di atas, terlihat bahwa p-value < 0.05 tolak H0, maka dalam tingkat signifikansi 95%, terdapat cukup bukti untuk menyatakan bahwa terdeteksi adanya autokorelasi pada model awal. Autokorelasi tersebut dapat diatasi dengan menambahkan lag peubah tertentu. Terdapat 3 metode yaitu, Koyck, Distributed Lag, dan Autoregressive Distributed Lag Model.
KOYCK
Menurut Gujarati (2013), untuk menaksir parameter model terdistribusi-lag dilakukan dengan pendekatan Koyck. Koyck telah mengusulkan metode cerdas dalam melakukan estimasi model terdistribusi-lag. Dengan mengasumsikan bahwa seluruh β mempunyai tanda yang sama, Koyck mengasumsikan nilai koefisien tersebut akan berkurang secara geometris (Pratami et.al 2016)
Model
#MODEL KOYCK
model.koyck = dLagM::koyckDlm(x = train$Xt, y = train$Yt)
summary(model.koyck)##
## Call:
## "Y ~ (Intercept) + Y.1 + X.t"
##
## Residuals:
## Min 1Q Median 3Q Max
## -36315 -10601 -1534 8425 82878
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.154e+04 1.158e+04 2.722 0.00828 **
## Y.1 1.843e-03 7.737e-02 0.024 0.98107
## X.t 2.181e-02 7.065e-03 3.087 0.00295 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 18450 on 66 degrees of freedom
## Multiple R-Squared: 0.789, Adjusted R-squared: 0.7826
## Wald test: 9.316 on 2 and 66 DF, p-value: 0.000273
##
## Diagnostic tests:
## NULL
##
## alpha beta phi
## Geometric coefficients: 31593.38 0.02181113 0.001842578
Berdasarkan output di atas, peubah x.t berpengaruh terhadap model dalam kepercayaan 95%. Berdasarkan model DLM, trades saat ini dipengaruhi oleh volume saat ini. Model ini mengindikasikan performa yang cukup baik yaitu dengan R-Squared 0.789.
AIC(model.koyck)## [1] 1556.308
BIC(model.koyck)## [1] 1565.244
Forecasting
#ramalan
(fore.koyck <- forecast(model = model.koyck, x=test$Xt, h=30))## $forecasts
## [1] 80761.12 66856.15 101592.39 80152.06 99030.09 96561.04 269266.03
## [8] 140119.86 88466.85 76896.60 103295.12 104583.35 83030.46 88988.22
## [15] 68668.92 63166.11 57745.91 76817.28 70386.47 65656.66 59952.51
## [22] 66925.01 87669.88 63771.00 86503.91 69257.82 57158.95 53260.99
## [29] 77734.99 91552.90
##
## $call
## forecast.koyckDlm(model = model.koyck, x = test$Xt, h = 30)
##
## attr(,"class")
## [1] "forecast.koyckDlm" "dLagM"
Akurasi
#mape data testing
mape.koyck <- MAPE(fore.koyck$forecasts, test$Yt)
#akurasi data training
mape_train <- dLagM::GoF(model.koyck)["MAPE"]
c("MAPE_testing" = mape.koyck, "MAPE_training" = mape_train)## $MAPE_testing
## [1] 0.1851844
##
## $MAPE_training.MAPE
## [1] 0.1756265
Regression with Distributed Lag
Model
#REGRESSION WITH DISTRIBUTED LAG -> estimasi parameter menggunakan least square
model.dlm = dLagM::dlm(x = train$Xt,y = train$Yt , q = 10)
summary(model.dlm)##
## Call:
## lm(formula = model.formula, data = design)
##
## Residuals:
## Min 1Q Median 3Q Max
## -29383 -9106 -1186 9032 37662
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.788e+04 9.802e+03 4.885 1.19e-05 ***
## x.t 2.155e-02 3.551e-03 6.068 1.98e-07 ***
## x.1 -4.728e-03 3.904e-03 -1.211 0.232
## x.2 -2.701e-03 3.924e-03 -0.688 0.495
## x.3 8.656e-04 3.776e-03 0.229 0.820
## x.4 -2.416e-03 1.746e-03 -1.384 0.173
## x.5 -4.374e-04 1.627e-03 -0.269 0.789
## x.6 4.918e-04 1.653e-03 0.297 0.767
## x.7 5.841e-04 1.644e-03 0.355 0.724
## x.8 2.368e-04 1.643e-03 0.144 0.886
## x.9 -4.618e-05 1.645e-03 -0.028 0.978
## x.10 -2.530e-04 1.570e-03 -0.161 0.873
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15290 on 48 degrees of freedom
## Multiple R-squared: 0.4847, Adjusted R-squared: 0.3666
## F-statistic: 4.104 on 11 and 48 DF, p-value: 0.0002908
##
## AIC and BIC values for the model:
## AIC BIC
## 1 1339.086 1366.312
Berdasarkan output di atas, peubah x.t berpengaruh terhadap model dalam kepercayaan 95%. Berdasarkan model DLM, trades saat ini dipengaruhi oleh volume saat ini. Model ini mengindikasikan performa yang cukup baik yaitu dengan R-Squared 0.4847.
AIC(model.dlm)## [1] 1339.086
BIC(model.dlm)## [1] 1366.312
Forecasting
#ramalan
(fore.dlm <- forecast(model = model.dlm, x=test$Xt, h=30)) #meramalkan 30 periode ke depan## $forecasts
## [1] 81971.13 65735.50 103667.57 76293.59 92134.86 90370.98 255183.65
## [8] 93013.12 47836.76 70605.03 81418.73 87481.04 74158.95 89841.99
## [15] 65513.99 58878.46 57838.23 79720.10 72236.07 67061.26 63883.55
## [22] 69767.23 89334.12 60954.41 87633.51 68747.65 54064.51 57878.36
## [29] 82345.17 92261.93
##
## $call
## forecast.dlm(model = model.dlm, x = test$Xt, h = 30)
##
## attr(,"class")
## [1] "forecast.dlm" "dLagM"
Akurasi
#mape data testing
mape.dlm <- MAPE(fore.dlm$forecasts, test$Yt)
#akurasi data training
mape_train <- GoF(model.dlm)["MAPE"]
c("MAPE_testing" = mape.dlm, "MAPE_training" = mape_train)## $MAPE_testing
## [1] 0.2250656
##
## $MAPE_training.MAPE
## [1] 0.1573921
Model Autoregressive / Dynamic Regression
ARDL adalah metode regresi yang memasukkan lag dari kedua variabel dependen dan independen secara bersamaan. Dengan menggunakan model ini, dapat menganalisis hubungan jangka panjang ketika variabel-variabel penjelasnya campuran antara yang bersifat 1(1) dan 1(0). Estimator ARDL akan menghasilkan koefisien jangka panjang yang konsisten yang dapat dibuat dengan menggunakan standard normal asymplotic theory (Rahmasari et.al 2018)
Model
plag <- ardlBoundOrders(data.frame(train),Yt~Xt);c(p=plag$p$Xt,q=plag$q)## p q
## 13 15
Didapatkan lag optimum berdasarkan AIC untuk peubah volume adalah 13 periode sebelumnya, sedangkan lag optimum untuk peubah trades adalah 15 periode sebelumnya.
#MODEL AUTOREGRESSIVE
#library(dLagM)
model.ardl = ardlDlm(x = train$Xt, y = train$Yt, p = 13 , q = 15) #p:lag x, q:lag y
#model untuk p=1, q=1: yt=b0+b1yt-1+b2xt+b3xt-1
#model untuk p=2, q=3: yt=b0+b1yt-1+b2yt-2+b3xt+b4xt-1+b5xt-2
summary(model.ardl)##
## Time series regression with "ts" data:
## Start = 16, End = 70
##
## Call:
## dynlm(formula = as.formula(model.text), data = data, start = 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -29123.2 -4788.1 -5.7 4143.6 24902.2
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.767e+05 7.225e+04 2.446 0.0218 *
## X.t 2.543e-02 5.212e-03 4.878 5.11e-05 ***
## X.1 2.024e-04 6.835e-03 0.030 0.9766
## X.2 4.562e-03 6.664e-03 0.685 0.4999
## X.3 -2.203e-03 5.662e-03 -0.389 0.7004
## X.4 -3.320e-03 6.233e-03 -0.533 0.5990
## X.5 1.887e-03 6.470e-03 0.292 0.7729
## X.6 9.788e-03 6.409e-03 1.527 0.1392
## X.7 1.097e-02 6.438e-03 1.705 0.1007
## X.8 7.179e-03 5.578e-03 1.287 0.2099
## X.9 4.324e-03 5.770e-03 0.749 0.4606
## X.10 7.677e-04 6.273e-03 0.122 0.9036
## X.11 -3.297e-03 6.246e-03 -0.528 0.6022
## X.12 7.465e-04 5.968e-03 0.125 0.9015
## X.13 5.842e-03 5.698e-03 1.025 0.3151
## Y.1 -2.246e-01 2.061e-01 -1.090 0.2862
## Y.2 -2.097e-01 2.078e-01 -1.009 0.3227
## Y.3 -1.455e-01 1.901e-01 -0.765 0.4513
## Y.4 1.070e-01 2.153e-01 0.497 0.6236
## Y.5 -2.303e-01 2.212e-01 -1.041 0.3078
## Y.6 -4.988e-01 2.106e-01 -2.368 0.0259 *
## Y.7 -4.522e-01 2.447e-01 -1.848 0.0765 .
## Y.8 -5.002e-01 2.330e-01 -2.147 0.0417 *
## Y.9 -2.606e-01 2.002e-01 -1.301 0.2050
## Y.10 -1.398e-01 2.231e-01 -0.627 0.5366
## Y.11 9.511e-03 2.171e-01 0.044 0.9654
## Y.12 -7.153e-02 1.996e-01 -0.358 0.7230
## Y.13 -3.319e-01 2.008e-01 -1.653 0.1109
## Y.14 5.527e-02 8.627e-02 0.641 0.5276
## Y.15 -1.199e-01 8.178e-02 -1.466 0.1550
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14800 on 25 degrees of freedom
## Multiple R-squared: 0.7385, Adjusted R-squared: 0.4351
## F-statistic: 2.434 on 29 and 25 DF, p-value: 0.01336
Terdapat 2 peubah yang berpengaruh terhadap model dalam tingkat kepercayaan 95%, yaitu Y.6 dan Y.8. Model mengindikasi performa yang cukup baik yaitu dengan R-Squared 0.7385.
AIC(model.ardl)## [1] 1230.963
BIC(model.ardl)## [1] 1293.191
Forecasting
#ramalan
(fore.ardl <- forecast(model = model.ardl, x=test$Xt, h=30))## $forecasts
## [1] 69948.87 84516.68 136926.21 88410.31 110498.31 102869.78 318199.84
## [8] 83570.71 57971.68 21599.98 81608.99 53265.51 51369.75 104329.28
## [15] 47912.51 75893.85 83027.39 115348.57 89077.85 67954.25 107799.54
## [22] 42598.43 86772.31 30704.21 98113.05 28723.56 30164.30 53938.49
## [29] 83681.23 107584.06
##
## $call
## forecast.ardlDlm(model = model.ardl, x = test$Xt, h = 30)
##
## attr(,"class")
## [1] "forecast.ardlDlm" "dLagM"
Akurasi
#akurasi testing
mape.ardl <- MAPE(fore.ardl$forecasts, test$Yt) #data testing
#akurasi data training
mape_train <- GoF(model.ardl)["MAPE"]
c("MAPE_testing" = mape.ardl, "MAPE_training" = mape_train)## $MAPE_testing
## [1] 0.3941708
##
## $MAPE_training.MAPE
## [1] 0.1084246
Perbandingan Keakuratan Ramalan
PLOT Perbandingan Data Aktual dengan Tiga Metode Penanganan Autokorelasi
#PLOT
par(mfrow=c(1,1))
plot(test$Xt, test$Yt, type="b", col="black", ylim=c(10000,360000))
points(test$Xt, fore.koyck$forecasts,col="red")
lines(test$Xt, fore.koyck$forecasts,col="red")
points(test$Xt, fore.dlm$forecasts,col="blue")
lines(test$Xt, fore.dlm$forecasts,col="blue")
points(test$Xt, fore.ardl$forecasts,col="green")
lines(test$Xt, fore.ardl$forecasts,col="green")
legend("topleft",c("aktual", "koyck","DLM 1", "autoregressive"), lty=1, col=c("black","red","blue","orange","green"), cex=0.8)
SEcara eksploratif, model KOYCK merupakan metode yang paling sesuai
untuk forecasting karena memiliki trend yang paling mendekati pola data
aktual dibandingakan model lainnya.
Perbandingan Metrik Akurasi
#PERBANDINGAN
akurasi <- matrix(c(mape.koyck, mape.dlm, mape.ardl))
row.names(akurasi)<- c("Koyck","DLM 1","Autoregressive")
colnames(akurasi) <- c("MAPE")
akurasi## MAPE
## Koyck 0.1851844
## DLM 1 0.2250656
## Autoregressive 0.3941708
Berdasarkan hasil diatas, dapat dilihat bahwa model dengan Koyck menghasilkan nilai MAPE yang lebih kecil dibandingkan dengan model lainnya. Hal ini menunjukkan bahwa model dengan Koyck merupakan model terbaiknya.
Breusch-Godfrey Test
bgtest(model.koyck$model)##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: model.koyck$model
## LM test = 0.46807, df = 1, p-value = 0.4939
P-value > 0,05, artinya dalam tingkat signifikansi 95%, terdapat cukup bukti untuk menyatakan bahwa tidak terdapat autokorelasi, artinya penanganan autokorelasi dengan menambahkan lag dari peubah respon berhasil.
Kesimpulan
Metode yang paling sesuai dan lebih cocok pada model peramalan yaitu ‘metode Koyck’ dengan nilai MAPE sebesar 0.1851844. Hasil diagnostik menunjukkan bahwa metode Koyck, berhasil menangani autokorelasi pada model.
Daftar Pustaka
https://www.kaggle.com/datasets/atulanandjha/national-stock-exchange-time-series
Pratami FR, Sudarno, Ispriyanti D.2016.Peramalan dinamis produksi padi di Jawa Tengah menggunakan metode koyck dan almon. Jurnal GAUSSIAN. 5(1): 91-97.
Rahmasari A, Sunani EH, Jannah M, Fathulaili, Kurnia L, Satria A. 2018. Metode autoregressive distributed lag(ardl) pada peramalan data kemiskinan di NTB. JTAM. 2(2): 01-08.