Time series regression

Pertemuan 6

Metodologi penelitian

So far

  • OLS dan asumsinya.

  • mengoperasikan R melalui RStudio.

  • Berbagai jenis data: cross-section, time series.

Tentang R lagi

  • Mudah-mudahan mahasiswa sudah mulai latihan-latihan dengan R.

  • Diharapkan saat ini sudah bisa menggunakan R script.

    • File yang muncul di folder yang belakangnya ada .R-nya.

    • Setelah UTS kita akan bahas lebih jauh tentang RStudio.

  • Diharapkan mahasiswa sudah memahami konsep working directory dan packages.

R Packages

  • R packages adalah beberapa fungsi ketengan atau fungsi yang bisa didownload untuk melakukan fungsi ekstra di R.

  • install.packages('NAMA PACKAGE') adalah command yang kita gunakan untuk install pertama kali.

  • Kita memanggil packages tersebut dengan library('NAMA PACKAGE') setiap memulai sesi R.

    • install.packages perlu internet tapi library tidak perlu.

    • sejauh ini kita baru install “readxl” dan “tidyverse”. Hari ini kita akan perlu package baru namanya “dynlm” dan “urca”.

Error?

  • Baik dengan menggunakan R Script maupun menggunakan Console langsung, anda akan dikasih warning kalau ada masalah / error.

  • Beberapa warnings yang sering terjadi minggu lalu:

    • read_excel() tidak dipahami oleh R karena belum run library("readxl").

    • library() gagal karena belum install_packages().

    • Garis miring untuk set_wd() belum diganti dari  ke /.

    • set_wd()-nya masih di folder “metopel” belum di folder “latihan”

Problem solving

  • Anda bisa menyelesaikan masalah-masalah tersebut dengan melihat warning-nya.

  • Di sini pentingnya pengetahuan bahasa inggris dan kemampuan problem solving.

    • Warnings biasanya disampaikan dalam bahasa inggris (tidak hanya R, aplikasi lain juga sama)

    • Banyak hal di R itu bisa digoogle, tapi enakan pakai bahasa inggris.

    • Menemukan cara menyelesaikan suatu masalah membutuhkan kemampuan menganalisis masalahnya ada dan solusinya bagaimana.

Pertanyaan tentang R dan RStudio?

Time series

  • Adalah data yang bentuknya serial waktu.

    • ada antara data 1 dan data lainnya (untuk individu yang sama) punya urutan kronologis.

    • Grafik time series sangant powerful.

  • Main feature (or bug) in time series data:

    • Autocorrelation: di mana data kemarin dapat menjelaskan (sebagian) apa yang akan terjadi besok: \(Y_t=\beta_0+\beta_1 Y_{t-1}+\mu_t\)

    • Moving average: di mana error di masa lalu ada hubungannya dengan Y saat ini.

Autocorrelation

  • Autocorrelation diberi simbol AR(p) di mana dalam kurung diisi dengan “lag”.

    • lag: sejauh mana variabel masa lalu mau ditambahkan di spesifikasi AR-nya
  • Misalnya, AR(2) (atau kita sebut AR dengan p=2) berarti punya spek:

\[ Y_t=\alpha + \beta_1 Y_{t-1} + \beta_2 Y_{t-2} + \mu_t \]

  • AR(3) berarti sampai \(Y_{t-3}\) dst.

Moving Average

  • Moving average pada intinya adalah kondisi di mana error term di masa lalu berpengaruh di saat ini.

    • disimbolkan dengan MA(q)
  • MA(2) (atau MA dengan q=2) berarti:

\[ Y_t=\alpha + \beta_1 Y_{t-1}+\mu_t + \gamma_1 \mu_{t-1} + \gamma_2 \mu_{t-2} \]

Digabung

  • Kita bisa menggabungkan konsep AR dan MA menjadi ARMA(p,q).

  • Misalnya ARMA(2,2) atau ARMA dengan p=2 dan q=2:

\[ Y_t=\alpha + \beta_1Y_{t-1} + \beta_2Y_{t-2} + \gamma_1 \mu_{t-1} + \gamma_2 \mu_{t-2} + \mu_t \]

Konsep penting

  • Autocorrelation pada intinya adalah melihat hubungan variabel dengan dirinya sendiri di masa lalu.

    • artinya error-nya kebawa-bawa sampai tahun yang terakhir.
\[\begin{align*} Y_{t-1}&=\beta_1 Y_{t-2} + \mu_{t-1} \\ Y_{t}&=\beta_1 Y_{t-1} + \mu_{t} \\ Y_{t}&=\beta_1 (\beta_1 Y_{t-2} + \mu_{t-1}) + \mu_{t} \\ Y_{t}&=\beta_1 (\beta_1 Y_{t-2}) + \beta_1 \mu_{t-1}) + \mu_{t} \end{align*}\]

Stationarity

  • Intinya, untuk menggunakan metode ARMA, kita perlu memastikan bahwa data kita stasioner.

  • Stasioner disebut juga dengan mean-reverting:

    • jika datanya ada gerakan naik, dia akan segera kembali ke nilai rata-rata tidak lama dari situ.

    • akibatnya data yang stasioner adalah data yang tidak ada tren.

    • cara membuat stasioner? Apa yang disebut first difference.

Loading package

load packages dulu

library("readxl")
library("tidyverse") # Kalau tidyverse gagal, load ggplot2 aja.
library("forecast")
library("urca")

Jangan lupa di-set_wd() dulu ya.

Stationarity

Mengecek stasioneritas

  • semua regresi berbasis autoregression perlu cek stasionaritas.

  • Meski dengan mata bisa kita cek, tapi kita dapat menggunakan metode Augmented Dickey-Fuller (ADF) untuk lebih pastinya.

  • Autoregression perlu melakukan uji stasioneritas dulu dengan metode bernama Augmented Dickey-Fuller (ADF).

    • memerlukan package “urca”
  • Kita akan coba pakai data nilai tukar IDR/USD di sini

Mengecek stasioneritas nilai tukar

dat<-na.omit(read_excel("latihan5a.xlsx")) # NA omit fungsinya menghilangkan data yg missing/kosong (NA)
summary(ur.df(dat$xr))

############################################### 
# Augmented Dickey-Fuller Test Unit Root Test # 
############################################### 

Test regression none 


Call:
lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)

Residuals:
    Min      1Q  Median      3Q     Max 
-941.04 -137.07  -19.66  140.18 2201.33 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
z.lag.1     0.001682   0.002819   0.596    0.552
z.diff.lag -0.161288   0.105730  -1.525    0.131

Residual standard error: 374.4 on 88 degrees of freedom
Multiple R-squared:  0.02832,   Adjusted R-squared:  0.006234 
F-statistic: 1.282 on 2 and 88 DF,  p-value: 0.2825


Value of test-statistic is: 0.5965 

Critical values for test statistics: 
     1pct  5pct 10pct
tau1 -2.6 -1.95 -1.61

Mengecek stasioneritas Diff exchange rate

summary(ur.df(dat$dxr))

############################################### 
# Augmented Dickey-Fuller Test Unit Root Test # 
############################################### 

Test regression none 


Call:
lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)

Residuals:
    Min      1Q  Median      3Q     Max 
-804.90 -123.13    2.25  146.01 2195.31 

Coefficients:
           Estimate Std. Error t value Pr(>|t|)    
z.lag.1     -1.3621     0.1593  -8.550 3.46e-13 ***
z.diff.lag   0.1785     0.1049   1.701   0.0925 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 369.1 on 88 degrees of freedom
Multiple R-squared:  0.5901,    Adjusted R-squared:  0.5808 
F-statistic: 63.34 on 2 and 88 DF,  p-value: < 2.2e-16


Value of test-statistic is: -8.5498 

Critical values for test statistics: 
     1pct  5pct 10pct
tau1 -2.6 -1.95 -1.61

Hasil stasioneritas

  • Dapat dilihat bahwa untuk critical value 1%, difference nilai tukar ternyata stasioner sementara nilai tukarnya tidak.

  • Jika data kita stasioner di first difference (atau setelah dilakukan perubahan selisih sebanyak 1x), kita katakan I=1.

  • ARIMA(p,I,q) adalah konsem stasioneritas digabung dengan ARMA.

  • Sekarang kita akan coba forecast dengan ARIMA untuk data nilai tukar.

ARIMA

  • di package “forecast”, kita dapat menggunakan fungsi auto.arima() untuk dapat spesifikasi terbaik.

  • Sudah dihitung di difference ke berapa stasionernya. Bener-bener tinggal pake.

reg1<-auto.arima(dat$xr)
reg1
Series: dat$xr 
ARIMA(1,1,1) 

Coefficients:
         ar1      ma1
      0.6162  -0.8824
s.e.  0.1339   0.0804

sigma^2 = 128991:  log likelihood = -663.74
AIC=1333.48   AICc=1333.76   BIC=1341.01

ARIMA

  • dapat kita lihat di layar sebelumnya bahwa spesifikasi yang dipilih oleh auto.arima() adalah ARIMA(1,1,1)

    • dengan kata lain, AR(1) dan MA(1) dengan first difference.
  • Kita dapat mencoba model kita sendiri dengan fungsi Arima() (huruf A yg di depan kapital ya).

  • auto.arima() memilihkan model dengan AICc paling kecil. Karena itu anda akan melihat AICc yang lebih besar di model selain ARIMA(1,1,1)

ARIMA

reg2<-Arima(dat$xr, order=c(2,1,2))
reg2
Series: dat$xr 
ARIMA(2,1,2) 

Coefficients:
          ar1     ar2      ma1      ma2
      -0.2389  0.5660  -0.0462  -0.7497
s.e.   0.2118  0.1526   0.1940   0.1658

sigma^2 = 131183:  log likelihood = -663.48
AIC=1336.96   AICc=1337.67   BIC=1349.52

Residuals

  • Untuk cek residual, kita menggunakan fungsi checkresiduals yang sudah built-in di dalam paket “forecast”

  • Yang perlu diperhatikan adalah plot ACF-nya harus di dalam titik-titik biru (yang artinya dapat dikatakan sebagai random / white noise).

  • Juga perlu diperhatikan distribusinya, yang seharusnya berbentuk distribusi normal / student-t / lonceng.

Residuals

checkresiduals(reg1)

    Ljung-Box test

data:  Residuals from ARIMA(1,1,1)
Q* = 7.9959, df = 8, p-value = 0.4339

Model df: 2.   Total lags used: 10

Forecast

autoplot(forecast(reg1))

Forecasting?

  • ARIMA dengan lag 1 sepertinya tidak terlalu informatif.

    • Prediksi apa yang akan terjadi besok rasanya masih terlalu pendek.
  • Bagaimanapun juga, forecasting sesuatu memang merupakan hal yang sulit.

  • Fenomena-fenomena kejut seringkali lebih penting daripada forecasting.

    • ingat waktu kita mencoba menjelaskan berbagai fenomena di data ekspor 2 minggu lalu?

More reading

  • bagi yang tertarik forecasting dapat membaca lebih jauh di sini

  • rekomended paling tidak bab 1, 2 dan 8.

Minggu depan

  • Panel data