Durağan (Stationary) Zaman Serileri

Zaman serisi regresyonlarında, doğrusal regresyon varsayımlarının yanında bir varsayıma daha ihtiyaç duyulur. Bu varsayım, durağanlık (stationarity) varsayımıdır.

Durağanlık varsayımına göre, regresyon hata payı u‘nun dağımı ve u‘nun terimlerinin zaman içindeki korelasyonları zamana göre değişmez. Hata payının ortalamasının ve varyansının zaman değiştikçe sabit olmasını bekleriz.

library(WDI)
## Warning: package 'WDI' was built under R version 4.2.2
df=WDI(indicator=c(elec='EG.USE.ELEC.KH.PC', gdp='NY.GDP.MKTP.KD' ), country=c('TR'),  start=1960, end=2014)
library(dynlm)
## Warning: package 'dynlm' was built under R version 4.2.2
## Zorunlu paket yükleniyor: zoo
## Warning: package 'zoo' was built under R version 4.2.2
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric

Loading required package: zoo

Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

as.Date, as.Date.numeric

df.ts <- ts(df, start=c(1960), end=c(2014),frequency=1)
df.ts<-df.ts[,c("elec","gdp")]
plot(df.ts[,"elec"], ylab="Elektrik enerjisi tüketimi")

plot(df.ts[,"gdp"], ylab="GSYİH")

Her bir zaman serisi değişkeninin kendisinin bir zaman öncesiyle koralasyonunun olup olmadığını incelememiz gerek. Bu koralasyona otokorelasyon denilir. Oto kendi kendiyle korelasyonu anlamına gelir.

gecikmeliun <- data.frame(cbind(df.ts[,"elec"], lag(df.ts[,"elec"],-1)))
names(gecikmeliun) <- c("elec","elec1gec")
head('gecikmelielec')
## [1] "gecikmelielec"

unbirgec, elec verisinin bir gecikmeli halidir. Atokoralasyon için acf fonksiyonu, serinin bütün gecikmeleri için korelasyon grafiği oluşturur. Bir serinin kendisiyle korelasyonu tahmin edebileceğiniz gibi 1 dir.

acf(df.ts[,"elec"])

acf(df.ts[,"gdp"])

gdp <- df.ts[,"gdp"]
deltaelectric <- diff(df.ts[,"elec"])
plot(gdp)

plot(deltaelectric)

reg <- dynlm(gdp~deltaelectric)
summary(reg)
## 
## Time series regression with "ts" data:
## Start = 1961, End = 2014
## 
## Call:
## dynlm(formula = gdp ~ deltaelectric)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -1.652e+11 -1.225e+11 -4.884e+10  4.572e+10  5.908e+11 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   2.106e+11  3.218e+10   6.543 2.64e-08 ***
## deltaelectric 1.863e+09  4.327e+08   4.307 7.37e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.721e+11 on 52 degrees of freedom
## Multiple R-squared:  0.2629, Adjusted R-squared:  0.2487 
## F-statistic: 18.55 on 1 and 52 DF,  p-value: 7.368e-05

Regresyonu artık lm (linear model, doğrusal model) regresyonu ile değil, Zaman serisi kullandığımız için dynlm (dinamik lm) ile yapıyoruz. Nedeni oluşturduğumuz yeni verilerde fark ve gecikme aldığımız için mevcut olmayan (not available, NA) değerler var.

uhat <- resid(reg)
plot(uhat)

acf(uhat)

Hata payı sekizinci gecikmesine kadar otokorelasyona sahip. Atokorelasyonu ölçmek için kullandığımız testlerden biri Breusch-Godfrey testidir.

                         gdp = β0+ β1Δelec+u

Hata payı u’nun otokorelasyona sahip olduğunu düşünüyoruz. Yani hata payının gecikmeli haliyle korelasyonu varsa, gecikmeli halinin önündeki katsayılar anlamlı ve sıfırdan farklı olmalı.

                       ut = α0 + α1 ut-1 + ε

Bu durumda eğer sıfıra eşit değilse. ut ve ut-1 arasında korelasyon mevcuttur diyebiliriz.

Hipotez:

                    H0: α1=0
                    

olur.

Eğer daha çoklu geciklemeri test etmek istersek F testi veya Chi kare istatitiğini kullanabiliriz. R’da Breusch-Godfrey testi şu şekilde yapılabilir.

library('lmtest')
## Warning: package 'lmtest' was built under R version 4.2.2
bgtest(reg, order=1, type="F")
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  reg
## LM test = 98.685, df1 = 1, df2 = 51, p-value = 1.616e-13
library(lmtest)
bgtest(reg, order=1, type="Chisq")
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  reg
## LM test = 35.601, df = 1, p-value = 2.421e-09
library(sandwich)
## Warning: package 'sandwich' was built under R version 4.2.2
coeftest(reg, vcov.=vcovHAC(reg))
## 
## t test of coefficients:
## 
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   2.1059e+11 5.6782e+10  3.7088 0.000507 ***
## deltaelectric 1.8633e+09 6.2930e+08  2.9609 0.004613 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(reg, vcov.=NeweyWest(reg))
## 
## t test of coefficients:
## 
##                 Estimate Std. Error t value Pr(>|t|)
## (Intercept)   2.1059e+11 6.8741e+11  0.3064   0.7606
## deltaelectric 1.8633e+09 4.9127e+09  0.3793   0.7060
coeftest(reg, vcov.=kernHAC(reg))
## 
## t test of coefficients:
## 
##                 Estimate Std. Error t value Pr(>|t|)
## (Intercept)   2.1059e+11 7.8982e+11  0.2666   0.7908
## deltaelectric 1.8633e+09 5.7320e+09  0.3251   0.7464

Farklı varyans kovaryans matriksleri kullanıldığında, katsayıların değişmediğini, sadece standart hataların değiştiğini gözlemleyebilirsiniz. Bu katsayıların anlamlılık düzeyine etki eder.