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.