DAHAB MAHAMAT ATTEIB— title: “odev3” output: ’’ date: ‘2022-03-05’ —
Basitçe bir zaman serisinin ortalaması, varyansı ve zamana göre kovaryansı zaman içinde değişiklik gösteriyorsa, o zaman serisi durağan değildir diyebiliriz.
Durağanlık varsayımına göre, regresyon hata payı ’nun dağımı ve ’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.
Durağan olmayan serileri regresyona genellikle koyamayız. Durağan olmayan seriler, hatalı bir korelasyona sahip olabilirler ve analizimizi yanıltırlar. Bu duruma sahte (spurious) regresyon denilir. Zamanın değişimiyle birlikte hareket ediyormuş gibi görünen serilerin genellikle birbirleriyle bir ilgisi olmayabilir.
Bir regresyonda durağan olmayan serilerinin kullanılabilmesinin yolu eşbütünleşmedir (cointegration). Bu konuya daha sonra döneceğiz.
Eğer durağan olmayan serileri hatalı bir regresyon yapıp bir araya getirmek istemiyorsak, zaman serilerinin durağan olup olmadığını test etmeliyiz. Eğer durağan değil ise bu zaman serilerini önce durağan hale getirmeliyiz.
Örnek veri seti indirme
Bu örnek için daha önce nasıl indiriceğimizi öğrendiğimiz, WDI veri setinden USA, Türkiye ve CHAD için kişi başı GSYH verilerini indirelim.
library(WDI) gsyh <- WDI(country=c(“TR”, “TD”,“US”), indicator=c(“SP.DYN.TFRT.IN”), start=1960, end=2020)
Veri setinin karışık isimlerini daha önce veri setini indirirken değiştirmiştik, bunu daha sonra da yapabilirsiniz.
names(gsyh) <- c("iso2c", "Ülke", "KisiBasiGSYH", "Sene")
head(gsyh)
Serilerin grafiklerini gözlemleyelim, bu sefer plot fonksiyonu yerine ggplot paketini kullanalım.
library(ggplot2)
ggplot(gsyh, aes(Sene, KisiBasiGSYH, color=Ülke, linetype=Ülke)) + geom_line()
Bu veri seti üzerinden Türkiyenin veri setini ayıralım.
TR <- cbind(gsyh\(KisiBasiGSYH[gsyh\)Ülke == “Turkey”], gsyh\(Sene[gsyh\)Ülke == “Turkey”]) TR <- TR[order(TR[,2]),] TR
TR verisetini daha önce anlatmış olduğumuz zaman serisi ts() fonksiyonunu kullanarak zaman serisi veri setine dönüştürelim. Ancak bu sefer sene’nin ne zaman başlayıp bittiğini bilmediğinizi varsayıyorum. Bu yüzden veri setinin başlangıç ve bitiş tarihlerini max ve min fonksiyonlarından yardım alarak yazalım.
TR <- ts(TR[,1], start=min(gsyh$Sene), end=max(gsyh$Sene))
Tabiki grafiğini göstermemiz lazım.
plot(TR, ylab=“Kişi başı GSYH”, xlab=“Sene”)
Şimdi tekrar geçen derslerde öğrendiğimiz, ACF (otokorelasyon) grafiğine bakalım. Bir de parçalı otokorelasyon (PACF) grafiğini açıklayalım.
acf(TR)
ACF grafiğine baktığımızda, kişi başı GSHY serisinin kendisinin gecikmeli serileriyle korelasyona sahip olduğunu görüyoruz. Kişi başı GSYH kendisinden bir önceki zaman dilimine çok bağımlı ve bu bağımlılık 12. gecikmeye kadar azalarak devam ediyor.
pacf(TR)
Partial otokorelasyona baktığımızda aynı bağımlılığı gözlemlemiyoruz. Birinci gecikme çok büyük bir korelasyona sahip. Partial grafiği bize diğer zaman dilimlerinin bağımlılığın sadece kendilerinin birinci gecikmesi dolayısıyla kaynaklandığını ispatlıyor. Partial korelasyon sıradaki gecikmenin diğer gecikmelerden etkilenmeden zaman serisiyle ne kadar korelasyona sahip olduğunu gösterir. Bu grafikler zaman serisinin durağan olmadığının kanıtları gibidir. Zaten serinin grafiğine baktığınızda, durağan olmadığını serinin farklı zaman dilimlerinde bulunan ortalamalarından da anlayabilirsin
plot(TR, ylab="Kişi başı GSYH", xlab="Sene")
Bu otokorelasyon ve partial otokorelasyon fonksiyonunu regresyon formunda gösterelim.
yt
alpha1 y‘nin birinci gecikmesiyle arasında olan otokorelasyonu gösteriyor. Bu regresyonu örneğimiz için yapalım ve alpha katsayılarını gözlemleyelim.
library(dynlm)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
Ilkgecikme <- dynlm(TR ~ L(TR, 1)) summary(Ilkgecikme)
İlk gecikme katsayısı 0.99 olarak görünüyor.
Ikincigecikme <- dynlm(TR ~ L(TR, 2))
summary(Ikincigecikme)
Diğer gecikmeleri katmadan ikinci gecikme için yapılan regresyonda yine gecikmenin katsayısı 0.98 ve anlamlı.
Ucuncugecikme <- dynlm(TR ~ L(TR, 3)) summary(Ucuncugecikme)
Bu örnekler bu şekilde çoğaltılabilir. Katsayı hep bire yakın ve anlamlılık düzeyi çok yüksek.
Şimdi bu katsayıları birbirlerini kontrol ederek yazalım. İlk yazdığımız regresyon AR(1) olarak adlandırılıyor. Sadece bir gecikme ile yapılan regresyon.
yt
Benzer bir regresyonu diğer gecikmeleri sabit tutarak katsayının anlamlığını ölçmek için AR(p) gecikmesine kadar yazabiliriz.
yt
Böyle bir regresyonu gecikme 10’a kadar yapalım, yani AR(10)
AR10 <- dynlm(TR ~ L(TR, c(1:10)))
summary(AR10)
Farkındaysanız aynı partial otokorelasyon (pacf) grafiğinde gösterdiği gibi diğer gecikmeleri kontrol edince birtek ilk gecikme anlamlılık düzeyine sahip oluyor, ve katsayı 1’e çok yakın. Bu katsayının doğru olduğunu kabul edersek regresyon fonksiyonumuz şu şekilde yazılabilir.
1’e eşit olduğu için katsayının yerine bir yazabildik. ’i sol tarafa atarsak
Random Walk Örneği
İki random walk durağan olmayan seri yaratalım ve regresyona sokalım.
Serilerin 200 gözlemi olsun.
n<-200
hata payı rastgele olsun ve isimlerine u ve \v diyelim. u ve v Olson payları rastgele ve normal dağılıma sahip olsun.
u <- ts(rnorm(n))
v <- ts(rnorm(n))
y ismini vereceğimiz zaman serisi random walk bir yapıya sahip olacak ve bir önceki gecikmesine u hata payı eklenerek bulunacak.
yt=αο+yt-1+ut
y <- ts(rep(0,n)) for (t in 2:n){ y[t]<- y[t-1]+u[t] }
x zaman serisi de aynı şekilde v hata payı eklenerek bulunacak.
x <- ts(rep(0,n))
for (t in 2:n){
x[t]<- x[t-1]+v[t]
}
Oluşturduğumuz iki rastgele zaman serisinin grafiklerine bakalım.
plot(y,type=‘l’, ylab=“y[t-1]+u[t]”)
plot(x,type='l', ylab="x[t-1]+v[t]")