R İle Zaman Serisi Analizi

Linkedin
Github

Veri ve Script dosyası için: GİTHUB REPO

BÖLÜM 1: GİRİŞ

1.1 Veri

Analiz boyunca kullanılan veri, ABD Enerji Bilgi Yönetim İdaresi (eia) tarafından 1973-2021 yılları arasında tutulan aylık elektrik tüketimi verisidir.

Veriye buradan ulaşabilirsiniz: Veri / eia

1.1.1 Verinin yüklenmesi:

veri <- read.csv("https://raw.githubusercontent.com/gungorrbaris/zaman-serisi-analizi-R/main/data/Table_7.6_Electricity_End_Use.csv")
knitr::kable(head(veri), align = "c")
Month Electricity.End.Use..Total
1973 January 144505.2
1973 February 139546.1
1973 March 137102.3
1973 April 131365.9
1973 May 131360.9
1973 June 140293.0

1.1.2 Verinin Düzenlenmesi:

Tarih değişkenini Ay-Yıl formatına getirelim:

tarih = seq(from = as.Date("1973-01-01"), to = as.Date("2021-11-01"), by = 'month')
veri$Month <- tarih
veri$Month <-format(veri$Month, "%m-%Y")
knitr::kable(head(veri), align = "c")
Month Electricity.End.Use..Total
01-1973 144505.2
02-1973 139546.1
03-1973 137102.3
04-1973 131365.9
05-1973 131360.9
06-1973 140293.0

Değişken isimlerini türkçeleştirelim:

colnames(veri) <- c("Tarih","Elektrik_Tuketimi")
knitr::kable(head(veri), align = "c")
Tarih Elektrik_Tuketimi
01-1973 144505.2
02-1973 139546.1
03-1973 137102.3
04-1973 131365.9
05-1973 131360.9
06-1973 140293.0




BÖLÜM 2: ANALİZE GİRİŞ - SERİNİN HAZIRLANMASI

2.1 Zaman Serisinin Oluşturulması

veri_ts <- ts(data = veri$Elektrik_Tuketimi, start = c(1973, 01), end = c(2021, 11), frequency = 12 )

Verimizde gözlemler aylık olduğu için frekans değeri (frequency) 12 olarak belirlenmelidir.

2.2 Zaman Serisi Grafiğinin Çizilmesi

ts.plot(veri_ts,gpars=list(xlab="Zaman", ylab="Elektrik Tüketimi"))

Zaman Serisi Grafiğine bakıldığında:

  • Pozitif yönlü artış vardır. Bu yüzden Serinin artan bir trende sahip olduğunu söyleyebiliriz.

  • Seride düzenli dalgalanmaların olduğu görülmektedir. Bu seride mevsimsellik olabileceğini gösterir. Daha kesin sonuç için ACF grafiğini çizelim.

2.3 ACF Grafiğinin Çizilmesi

! BİLGİ !

Gecikmeli seri: Serilerdeki verilerin dönem kaydırılması işlemi ile ortaya çıkan serilerdir. Zt bir zaman serisi değişkeni ise; bir dönem gecikmeli zaman serisi Zt-1, iki dönem gecikmeli Zt-2 ve k dönem gecikmeli Zt-k ile gösterilir.

Otokorelasyon katsayısı: Zaman serileri ile bu serilerin gecikmeli serileri arasındaki ilişkileri verir.

ACF: Otokorelasyon fonksiyonu (Autocorrelation function) demektir. Otokorelasyon katsayısı değerlerinden oluşur.

Seride trendin olduğunu anlamak için ACF grafiğindeki ilk dört gecikmeye bakmak yeterlidir. İlk dört gecikme sınırlar dışındaysa seri için “trende sahiptir” diyebiliriz.

library(fpp)
Acf(veri_ts,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Orijinal veri ACF Grafiği")

ACF Grafiğine bakıldığında:

  • Tüm gecikmeler (4 gecikme olması yeterlidir) sınırlar dışında olduğu için zaman serisinin trende sahip olduğu söylenebilir. Bu yüzden serinin farkı alınıp durağan hale getirilmelidir.

  • Trend ile birlikte düzenli dalgalanmaların olduğu gözükse de baskın bir mevsimsellikten şu an için bahsedemeyiz.

2.4 Birinci Farkın Alınması

! BİLGİ !

Fark Alınması: Zaman serisinin akışkanlı bir şekilde son değerlerinden belli bir dönem önceki değerlerinin çıkarılması işlemidir. Bu işlem sayesinde serideki trend ya da mevsimsel dalgalanmaları yok etmek mümkün olmaktadır.

veri_birinci_fark <- diff(veri_ts, differences = 1)

2.4.1 Farkı alınmış seri için ACF:

Acf(veri_birinci_fark,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Birinci Fark sonrası ACF Grafiği")

MEVSİMSELLİK

Birinci Farkı alınmış seri için ACF Grafiğine bakıldığında:

  • Yine tüm gecikmeler sınırlar dışında olduğu için birinci farkı alınmış zaman serisinin de trende sahip olduğu söylenebilir. Fakat bir öncekine göre bu ACF grafiğinde baskın bir mevsimsellik görülüyor. Dalgalanmalar ve gecikmelerdeki düzenli sıçramalar bunu destekliyor.

2.5 Birinci Mevsimsel Farkın Alınması

! BİLGİ !

Mevsimsel Farkın Alınması: Normal fark işleminden tek farkı periyodunun işleme dahil edilmesidir.

Periyodun bulunması:

  • Kullandığımız veri aylık olduğu için periyodunun 12 olduğunu biliyoruz.
  • Periyodun bilinmediği durumlar için en iyi yöntem ACF değerlerine bakmaktır.

ACF ile periyodun bulunması:

Acf(veri_birinci_fark,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Birinci Fark sonrası ACF Grafiği",plot=FALSE)
## 
## Autocorrelations of series 'veri_birinci_fark', by lag
## 
##      0      1      2      3      4      5      6      7      8      9     10 
##  1.000  0.325 -0.301 -0.623 -0.391  0.250  0.482  0.252 -0.381 -0.613 -0.278 
##     11     12     13     14     15     16     17     18     19     20     21 
##  0.335  0.910  0.319 -0.284 -0.615 -0.370  0.249  0.468  0.247 -0.366 -0.596 
##     22     23     24     25     26     27     28     29     30     31     32 
## -0.279  0.337  0.874  0.306 -0.271 -0.600 -0.354  0.240  0.461  0.252 -0.370 
##     33     34     35     36     37     38     39     40     41     42 
## -0.584 -0.271  0.328  0.857  0.301 -0.274 -0.575 -0.348  0.235  0.455

İhtiyacımız olan en büyük ve en büyük ikinci değer arasında kaç gecikmenin olduğunu bulmaktır. (Burada ilk değer dahil edilmemelidir.)

ACF değerlerine bakıldığında:

  • En büyük değerin 12. gecikme (0.910), en büyük ikinci gecikmenin ise 24. gecikme (0.874) olduğu gözükmektedir.

  • 12 ve 24 gecikme arasında toplam 12 değer olduğu için; birinci farkı alınmış serinin periyodunun 12 olduğunu söyleyebiliriz.

2.5.2 Mevsimsel Fark İşlemi:

veri_ts_mev1 <- diff(veri_birinci_fark,12)

2.5.3 Mevsimsel Farkı alınmış seri için ACF:

Acf(veri_ts_mev1,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Birinci Mevsimsel Fark sonrası ACF Grafiği")

Birinci Mevsimsel Farkı alınmış seri için ACF Grafiğine bakıldığında:

  • İlk dört gecikmeden sadece iki tanesi sınırları geçtiği için trendin kaybolduğunu söyleyebiliriz.

  • Düzenli dalgalanmaların dolayısıyla mevsimselliğin de kaybolduğunu söyleyebiliriz.

2.6 Durağanlık

Durağanlık; Zaman serisi verilerinin belirli bir zaman sürecinde sürekli artma veya azalmanın olmadığı, verilerin zaman boyunca bir yatay eksen boyunca saçılım göstermesi olarak tanımlanır. Genel bir tanımlama ile, sabit ortalama, sabit varyans ve seriye ait iki değer arasındaki farkın zamana değil, yalnızca iki zaman değeri arasındaki farka bağlı olması şeklinde ifade edilir.

Eğer bir seri durağan ise serinin beklenen değeri ve varyansı sabit, kovaryansı zamandan bağımsız sadece gecikme sayısına dayalı olmalıdır. Dolayısıyla,

E(Zt) = μ
V(Zt) = σ^2
cov(Zt,Zt+k) = γ
eşitliklerinin hepsi sağlanmalıdır.

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

Seri Neden Durağan Omalı?

  • Zaman serisi ile ilgili yapılan çalışmalar serinin Durağan olduğunu varsayar. Çünkü bir zaman serisi durağan değilse, serinin davranışını sadece ele alınan dönem için inceleyebiliriz.

  • Dolayısıyla Bundan sonraki İşlemlerde durağan hale getirilen (Bir normal, bir mevsimsel fark işleminden sonra) seri üzerinden analiz yapılacaktır.


BÖLÜM 3: AYRIŞTIRMA YÖNTEMLERİ

Zaman serisini bileşenlerine ayırarak her bir bileşen için tahminleri içeren ve bu bileşenlerin tahmininden zaman serisinin öngörüsünü hesaplayan yönteme Ayrıştırma Yöntemi denmektedir.

Ayrıştırma yöntemi genel olarak iki sınıfa ayrılabilir.
1.Toplamsal Ayrıştırma Yöntemi
2.Çarpımsal Ayrıştırma Yöntemi

3.1 Toplamsal Ayrıştırma Yöntemi

Toplamsal model; zaman serisinin, bileşenlerin toplamından oluştuğunu kabul eder.
Zt = Tt + Mt + εt

Matematiksel olarak, Zt=f(Tt, Mt , Ct, εt) şeklinde gösterilip tahmini ise : Z =f(Tt, Mt , Ct)’dir. Bilinen en eski öngörü yöntemlerinden olup kısa dönemli öngörülerde anlaşılması ve yapılması en kolay yöntemdir. Trende ve Mevsimselliğe sahip verilerde kullanılır.

3.1.1 Trend Bileşeni ve Periyodun Bulunması

Trend Bileşeni:

Serinin Trend Bileşeni Regresyon analizi yardımı ile oluşturulur.

veri_trend <- tslm(veri_ts~trend)
  • Burada dikkat edilmesi gereken, denkleme orijinal serinin eklenmiş olmasıdır.

  • Oluşturulan Regresyon denklemindeki fitted.values değişkeni dikkate alınır.

  • fitted.values değişkeni orijinal serinin trend bileşeni olur.

head(veri_trend[["fitted.values"]],n=36)
##           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
## 1973 149788.4 150157.2 150526.1 150895.0 151263.9 151632.8 152001.6 152370.5
## 1974 154214.9 154583.8 154952.7 155321.5 155690.4 156059.3 156428.2 156797.0
## 1975 158641.4 159010.3 159379.2 159748.1 160117.0 160485.8 160854.7 161223.6
##           Sep      Oct      Nov      Dec
## 1973 152739.4 153108.3 153477.1 153846.0
## 1974 157165.9 157534.8 157903.7 158272.6
## 1975 161592.5 161961.3 162330.2 162699.1

Periyodun Bulunması:

Orijinal zaman Serisi ve trend bileşeninin farkını alarak periyodu bulabiliriz.

periyot_trend <- veri_ts - veri_trend[["fitted.values"]]

Serinin periyoduna sahip mevsimsel bileşen serisinin ACF değerleri ile periyodu bulalım:

Acf(periyot_trend,lag.max = 42,  ylim=c(-1,1), lwd=5,plot=FALSE)
## 
## Autocorrelations of series 'periyot_trend', by lag
## 
##      0      1      2      3      4      5      6      7      8      9     10 
##  1.000  0.720  0.265 -0.021  0.043  0.320  0.455  0.318  0.040 -0.025  0.246 
##     11     12     13     14     15     16     17     18     19     20     21 
##  0.673  0.916  0.653  0.218 -0.057  0.012  0.287  0.416  0.281  0.009 -0.057 
##     22     23     24     25     26     27     28     29     30     31     32 
##  0.204  0.622  0.853  0.602  0.185 -0.078 -0.006  0.260  0.387  0.257 -0.015 
##     33     34     35     36     37     38     39     40     41     42 
## -0.079  0.177  0.587  0.814  0.567  0.158 -0.097 -0.029  0.230  0.354

ACF değerlerine bakıldığında:

  • En büyük değerin 12. gecikme (0.916), en büyük ikinci gecikmenin ise 24. gecikme (0.853) olduğu gözükmektedir.

  • 12 ve 24 gecikme arasında toplam 12 değer olduğu için; birinci farkı alınmış serinin periyodunun 12 olduğunu söyleyebiliriz.

Buradaki başlıkta periyot bulma işlemini yapmış ve aynı sonuca ulaşmıştık.

Mevsimsel, döngüsel veya düzensiz dalgalanmaları yok etme ya da belli bir miktar düzleştirme amacıyla basit hareketli ortalama ya da merkezsel hareketli ortalama işlemlerine ihtiyaç duyulmaktadır.

Ayrıştırma Yönteminde merkezsel hareketli ortalamayı mevsimsel bileşeni bulmak için kullanacağız.

3.1.2 Merkezsel Hareketli Ortalama Hesabı

veri_trend_1 <- ma(veri_ts, order = 12, centre = TRUE)

Burada order = germe sayısı, bir önceki adımda bulduğumuz periyot ile aynı olmalıdır.

3.1.3 Mevsimsel Bileşenin Bulunması

Mevsimsel bileşene ulaşmak için yukarıda hesapladığımız merkezsel hareketli ortalama serisini, orijinal seriden çıkartmamız gerekiyor.

mevsim3 <- veri_ts - veri_trend_1
head(mevsim3,n=36)
##               Jan          Feb          Mar          Apr          May
## 1973           NA           NA           NA           NA           NA
## 1974   1244.43125  -5987.08842  -6644.94317  -9240.61225  -8877.00792
## 1975   5386.46054  -1263.04279  -3774.80125  -8881.94913 -11311.41638
##               Jun          Jul          Aug          Sep          Oct
## 1973           NA   9841.39842  14898.72092  14892.45550   3604.40875
## 1974    -77.18058   9125.58383  15241.64129  10288.53987  -2292.94225
## 1975  -2311.87663   8148.75617  13941.57687  10060.55892  -6412.73892
##               Nov          Dec
## 1973  -4435.71604  -5518.18642
## 1974  -8002.64087  -2999.57629
## 1975  -9583.86033  -1785.75867

3.1.4 Mevsim serisinin ortalamaları

Mevsimsel bileşendeki hata teriminin yok edilebilmesi için her bir periyottaki dönemlerin ortalama değerleri hesaplanır.

donemort3<-t(matrix(data=mevsim3, nrow = 12))
head(donemort3)
##           [,1]      [,2]      [,3]       [,4]       [,5]        [,6]      [,7]
## [1,]        NA        NA        NA         NA         NA          NA  9841.398
## [2,]  1244.431 -5987.088 -6644.943  -9240.612  -8877.008   -77.18058  9125.584
## [3,]  5386.461 -1263.043 -3774.801  -8881.949 -11311.416 -2311.87663  8148.756
## [4,] 10481.996  2802.820 -3880.936  -9695.276 -11061.992 -4935.45200  7910.461
## [5,] 12666.531  4699.200 -5136.574 -14090.190 -13786.849 -3093.95550 12455.279
## [6,] 11804.552  4676.338 -2511.719 -16272.308 -15786.122 -2368.93296 10589.750
##          [,8]      [,9]     [,10]      [,11]     [,12]
## [1,] 14898.72 14892.455  3604.409  -4435.716 -5518.186
## [2,] 15241.64 10288.540 -2292.942  -8002.641 -2999.576
## [3,] 13941.58 10060.559 -6412.739  -9583.860 -1785.759
## [4,] 12553.10  7480.415 -6545.047  -7306.031  4008.703
## [5,] 15675.59  8854.138 -4461.604 -12721.138 -2238.178
## [6,] 14851.83 12373.875 -4417.750 -12814.542 -3622.708

Periyottaki dönemlerin ortalama değerleri:

colMeans(donemort3, na.rm = T)
##  [1]  12293.710  -8992.596 -12270.776 -27486.215 -19556.515   5455.674
##  [7]  33711.582  37332.788  13396.718 -10784.080 -22267.319  -2109.830

Periyottaki dönemlerin ortalama değerlerinin toplamı:

sum(colMeans(donemort3, na.rm = T))
## [1] -1276.859

Bu değerin 0 olması gerekmektedir. 0 olmadığı için ortalamaların ortalaması alınmalıdır. Bu ortalama değer diğer tüm ortalama değerlerden çıkartılır ve mevsimsel endeks serisi bulunur.

Periyottaki dönemlerin ortalama değerlerinin ortalaması:

mean(colMeans(donemort3, na.rm = T))
## [1] -106.4049

3.1.5 Mevsimsel Endeksin Bulunması

endeks1 <- colMeans(donemort3, na.rm = T) - mean(colMeans(donemort3, na.rm = T))

endeks1
##  [1]  12400.115  -8886.191 -12164.371 -27379.810 -19450.110   5562.079
##  [7]  33817.987  37439.193  13503.123 -10677.675 -22160.914  -2003.426

Bu 12 mevsimsel endeks değeri periyottaki dönemlere dikkat edilerek (ilk döneme karşılık M1; ikinci döneme karşılık M2; üçüncü döneme karşılık M3, … , on ikinci döneme karşılık M12 gelecek şekilde) seri boyunca tekrar tekrar yazılabilmesi için aşağıdaki adım gerçekleştirilir.

İndeks Değerlerini Seri Boyunca Yazdırma İşlemi:

indeks<-  matrix(data = endeks1, nrow = 587)
head(indeks)
##            [,1]
## [1,]  12400.115
## [2,]  -8886.191
## [3,] -12164.371
## [4,] -27379.810
## [5,] -19450.110
## [6,]   5562.079

3.1.6 Hata Terimli Trend Bileşeninin Bulunması

trendhata <- veri_ts - indeks

Hata Terimli Trend Bileşeninine ait zaman serisi grafiği:

plot.ts(trendhata)

Elde edilen bu trent serisinde hata terimi de olduğundan seriye ‘’trendhata’’ adı verilir. Bu seriyi hata teriminden arındırabilmek amacıyla trendhata serisine doğrusal regresyon uygulanır.

trend1<-tslm(ts(trendhata)~trend)
  • Burada fitted.values değişkeni dikkate alınır.

  • fitted.values değişkeni orijinal serinin trend bileşeni olur.

head(trend1[["fitted.values"]],n=24)
## Time Series:
## Start = 1 
## End = 24 
## Frequency = 1 
##  [1] 149853.0 150221.7 150590.3 150959.0 151327.6 151696.3 152064.9 152433.6
##  [9] 152802.2 153170.9 153539.5 153908.1 154276.8 154645.4 155014.1 155382.7
## [17] 155751.4 156120.0 156488.7 156857.3 157226.0 157594.6 157963.2 158331.9

3.1.7 Tahmin ve Hata Serilerinin Bulunması

Tahmin Bileşenlerini Bulalım:

tahmin = mevsimsel endeks + saf trend serisi

tahmin<- indeks+trend1[["fitted.values"]]
tahmin <- ts(data = tahmin, start = c(1973, 01), end = c(2021, 11), frequency = 12 )
plot(tahmin,main = "Tahmin Serisi Grafiği")

Hata Bileşenlerini Bulalım:

hata = saf trend serisi - tahmin

hata <- ts(veri_ts) - ts(tahmin)
plot(hata,main = "Tahmin serisi için Hata Serisi Grafiği")

3.1.8 Modelin Güvenirliği

Toplamsal modelin orijinal seri üzerinde geçerli bir model olup olmadığını kontrol edelim.

Orijinal seri ile tahmin serisinin uyumu:

plot( window(veri_ts), 
      xlab="Zaman", ylab="",lty=1, col=4, lwd=2,main="Orijinal Seri ve Tahmin Serisinin Birlikte Grafiği")
lines( window(tahmin) ,lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(OrijinalSeri )),
                   expression(paste(Tahmin ))),
       lwd=c(2,2),lty=c(1,3), cex=0.6, col=c(4,2))

Zaman Serisi Grafiğine bakıldığında:

  • Tahmin ile orijinal seri arasında sapmanın yüksek olduğunu dolayısıyla uyum göstermediğini söyleyebiliriz.

  • Fakat emin olmak için hataların akgürültü olup olmadığına bakabiliriz.

Hatalar Akgürültü mü?

! BİLGİ !

Akgürültü Serisi: Durağanlık koşullarından tek farkı kovaryans teriminin sıfır olmasıdır. Dolayısıyla, akgürültü serisi durağan bir seriden farklı özellikler gösterir.
Örneğin, akgürültü serisi rasgele hareketlere sahip modellenemez bir seri iken durağan serilerin hareketlerinin belli bir sistematiği vardır ve bu nedenle modellenebilmektedir. Akgürültü serisinin tüm gecikmelerindeki otokorelasyon ve kısmi otokorelasyon değerleri önemsizdir.

ACF ve PACF grafıklerinin yorumunda serinin akgürültü serisi olup olmadığına net bir şekilde karar verilemiyorsa, yani ACF veya PACF grafiklerinde birinci gecikme dışında az sayıda güven sınırını biraz geçen ilişkiler var ise bu durumda seriye Box-Ljung Testi uygulanır.

Eğer her gecikme için Box-Ljung Testi sonucunda Ho : rk = 0 yokluk hipotezi kabul edilirse serinin akgürültü serisi olduğu söylenir.

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

Ho: Hatalar Akgürültüdür.(Hatalar arasında ilişki yoktur.)
H1: Hatalar Akgürültü değildir.(Hatalar arasında ilişki vardır.)

Hatalar için ACF Grafiği:

Acf(hata, lag.max = 42,  ylim=c(-1,1), lwd=5,main="Hatalar için ACF Grafiği")

Hatalar için ACF Grafiğine bakıldığında:

  • Tüm gecikmelerin sınırları geçtiği gözükmektedir.

  • Hataların akgürültü olmadığı (Ho RED) Söylenebilir. Box-Ljung testi ile de bunu görebiliriz.

Box-Ljung Testi:

Box.test(hata,type = "Ljung",lag = 42)
## 
##  Box-Ljung test
## 
## data:  hata
## X-squared = 9137.7, df = 42, p-value < 2.2e-16

Box-Ljung test sonucuna bakıldığında:

  • p değeri = 0 < α =0.05 ’dir. Yani Ho RED.

  • Hatalar Arasında ilişki olduğunu yani hataların akgürültü olmadığını söyleyebiliriz.

3.1.9 SONUÇ

Bir önceki adımda görüldüğü üzere;

  • Hatalar Arasında ilişki olduğunu yani hataların akgürültü olmadığını gördük.

  • Sonuç olarak ABD’deki aylık elektrik tüketimi serisinin analizi için Toplumsal Ayrıştırma yöntemi uygun değildir.

3.2 Çarpımsal Ayrıştırma Yöntemi

Çarpımsal model; zaman serisinin, bileşenlerin çarpımından oluştuğunu kabul eder.
Zt = Tt * Mt + εt

Matematiksel olarak Toplamsal ayrıştıma yönteminden tek farkı:
- Mevsimsel bileşen, trend bileşeni, endeks, trend hata, ve tahmin değişkenlerini hesaplarken, “-” yerine “/” ; “+” yerine “*” kullanılmasıdır.

3.2.1 Trend Bileşeni ve Periyodun Bulunması

Trend Bileşeni:

Serinin Trend Bileşeni Regresyon analizi yardımı ile oluşturulur.

veri_trend2 <- tslm(veri_ts~trend)
  • Burada dikkat edilmesi gereken, denkleme orijinal serinin eklenmiş olmasıdır.

  • Oluşturulan Regresyon denklemindeki fitted.values değişkeni dikkate alınır.

  • fitted.values değişkeni orijinal serinin trend bileşeni olur.

head(veri_trend2[["fitted.values"]],n=36)
##           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
## 1973 149788.4 150157.2 150526.1 150895.0 151263.9 151632.8 152001.6 152370.5
## 1974 154214.9 154583.8 154952.7 155321.5 155690.4 156059.3 156428.2 156797.0
## 1975 158641.4 159010.3 159379.2 159748.1 160117.0 160485.8 160854.7 161223.6
##           Sep      Oct      Nov      Dec
## 1973 152739.4 153108.3 153477.1 153846.0
## 1974 157165.9 157534.8 157903.7 158272.6
## 1975 161592.5 161961.3 162330.2 162699.1

Periyodun Bulunması:

Orijinal zaman Serisi ve trend bileşeninin farkını alarak periyodu bulabiliriz.

periyot_trend2 <- veri_ts - veri_trend2[["fitted.values"]]

Serinin periyoduna sahip mevsimsel bileşen serisinin ACF değerleri ile periyodu bulalım:

Acf(periyot_trend2,lag.max = 42,  ylim=c(-1,1), lwd=5,plot=FALSE)
## 
## Autocorrelations of series 'periyot_trend2', by lag
## 
##      0      1      2      3      4      5      6      7      8      9     10 
##  1.000  0.720  0.265 -0.021  0.043  0.320  0.455  0.318  0.040 -0.025  0.246 
##     11     12     13     14     15     16     17     18     19     20     21 
##  0.673  0.916  0.653  0.218 -0.057  0.012  0.287  0.416  0.281  0.009 -0.057 
##     22     23     24     25     26     27     28     29     30     31     32 
##  0.204  0.622  0.853  0.602  0.185 -0.078 -0.006  0.260  0.387  0.257 -0.015 
##     33     34     35     36     37     38     39     40     41     42 
## -0.079  0.177  0.587  0.814  0.567  0.158 -0.097 -0.029  0.230  0.354

ACF değerlerine bakıldığında:

  • En büyük değerin 12. gecikme (0.916), en büyük ikinci gecikmenin ise 24. gecikme (0.853) olduğu gözükmektedir.

  • 12 ve 24 gecikme arasında toplam 12 değer olduğu için; birinci farkı alınmış serinin periyodunun 12 olduğunu söyleyebiliriz.

Buradaki başlıkta periyot bulma işlemini yapmış ve aynı sonuca ulaşmıştık.

Mevsimsel, döngüsel veya düzensiz dalgalanmaları yok etme ya da belli bir miktar düzleştirme amacıyla basit hareketli ortalama ya da merkezsel hareketli ortalama işlemlerine ihtiyaç duyulmaktadır.

Ayrıştırma Yönteminde merkezsel hareketli ortalamayı mevsimsel bileşeni bulmak için kullanacağız

3.2.2 Merkezsel Hareketli Ortalama Hesabı

veri_trend_2 <- ma(veri_ts, order = 12, centre = TRUE)

Burada order = germe sayısı, bir önceki adımda bulduğumuz periyot ile aynı olmalıdır.

3.2.3 Mevsimsel Bileşenin Bulunması

Mevsimsel bileşene ulaşmak için yukarıda hesapladığımız merkezsel hareketli ortalama serisini, orijinal seriden bölmemiz gerekiyor.

mevsim4 <- veri_ts / veri_trend_2
head(mevsim4,n=36)
##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 1973        NA        NA        NA        NA        NA        NA 1.0689556
## 1974 1.0087181 0.9580513 0.9534005 0.9350386 0.9374657 0.9994565 1.0640906
## 1975 1.0374040 0.9912432 0.9738812 0.9386246 0.9219252 0.9840898 1.0557923
##            Aug       Sep       Oct       Nov       Dec
## 1973 1.1044922 1.1045693 1.0253052 0.9688891 0.9613348
## 1974 1.1066813 1.0717819 0.9840378 0.9443436 0.9791481
## 1975 1.0948663 1.0681237 0.9567380 0.9356111 0.9880502

3.2.4 Mevsim serisinin ortalamaları

Mevsimsel bileşendeki hata teriminin yok edilebilmesi için her bir periyottaki dönemlerin ortalama değerleri hesaplanır.

donemort4<-t(matrix(data=mevsim4, nrow = 12))
head(donemort4)
##          [,1]      [,2]      [,3]      [,4]      [,5]      [,6]     [,7]
## [1,]       NA        NA        NA        NA        NA        NA 1.068956
## [2,] 1.008718 0.9580513 0.9534005 0.9350386 0.9374657 0.9994565 1.064091
## [3,] 1.037404 0.9912432 0.9738812 0.9386246 0.9219252 0.9840898 1.055792
## [4,] 1.069853 1.0185930 0.9743572 0.9362177 0.9276360 0.9679462 1.051004
## [5,] 1.079322 1.0292605 0.9681632 0.9130324 0.9150998 0.9809471 1.076628
## [6,] 1.071610 1.0282985 0.9848617 0.9023607 0.9056363 0.9858898 1.062838
##          [,8]     [,9]     [,10]     [,11]     [,12]
## [1,] 1.104492 1.104569 1.0253052 0.9688891 0.9613348
## [2,] 1.106681 1.071782 0.9840378 0.9443436 0.9791481
## [3,] 1.094866 1.068124 0.9567380 0.9356111 0.9880502
## [4,] 1.080428 1.047667 0.9584520 0.9537730 1.0252505
## [5,] 1.096220 1.054184 0.9727635 0.9224478 0.9863869
## [6,] 1.087688 1.072675 0.9741863 0.9254711 0.9789783

Periyottaki dönemlerin ortalama değerleri:

colMeans(donemort4, na.rm = T)
##  [1] 1.0497120 0.9724287 0.9561884 0.8991415 0.9234883 1.0151612 1.1214735
##  [8] 1.1383244 1.0533474 0.9596636 0.9170578 0.9916020

Periyottaki dönemlerin ortalama değerlerinin toplamı:

sum(colMeans(donemort4, na.rm = T))
## [1] 11.99759

Bu değerin 0 olması gerekmektedir. 0 olmadığı için ortalamaların ortalaması alınmalıdır. Bu ortalama değer diğer tüm ortalama değerlere bölünür ve mevsimsel endeks serisi bulunur.

Periyottaki dönemlerin ortalama değerlerinin ortalaması:

mean(colMeans(donemort4, na.rm = T))
## [1] 0.9997991

3.2.5 Mevsimsel Endeksin Bulunması

endeks2 <- colMeans(donemort4, na.rm = T) / mean(colMeans(donemort4, na.rm = T))

endeks2
##  [1] 1.0499230 0.9726242 0.9563805 0.8993222 0.9236739 1.0153652 1.1216988
##  [8] 1.1385531 1.0535591 0.9598564 0.9172421 0.9918013

Bu 12 mevsimsel endeks değeri periyottaki dönemlere dikkat edilerek (ilk döneme karşılık M1; ikinci döneme karşılık M2; üçüncü döneme karşılık M3, … , on ikinci döneme karşılık M12 gelecek şekilde) seri boyunca tekrar tekrar yazılabilmesi için aşağıdaki adım gerçekleştirilir.

Mevsimsel Endeksin ortalaması: >> Mevsimsel endekin ortalaması yani Dönem ortalamalarının ortalaması 1’e eşit olmalıdır.

mean(endeks2)
## [1] 1
  • Dönem ortalamalarının ortalaması 1’e eşittir. Bu hata yapmadığımızı gösterir.

İndeks Değerlerini Seri Boyunca Yazdırma İşlemi:

indeks2<-  matrix(data = endeks2, nrow = 587)
head(indeks2)
##           [,1]
## [1,] 1.0499230
## [2,] 0.9726242
## [3,] 0.9563805
## [4,] 0.8993222
## [5,] 0.9236739
## [6,] 1.0153652

3.2.6 Hata Terimli Trend Bileşeninin Bulunması

trendhata2 <- veri_ts / indeks2

Hata Terimli Trend Bileşeninine ait zaman serisi grafiği:

plot.ts(trendhata2)

>>Elde edilen bu trent serisinde hata terimi de olduğundan seriye ‘’trendhata2’’ adı verilir. Bu seriyi hata teriminden arındırabilmek amacıyla trendhata serisine doğrusal regresyon uygulanır.

trend2<-tslm(ts(trendhata2)~trend)
  • Burada fitted.values değişkeni dikkate alınır.

  • fitted.values değişkeni orijinal serinin trend bileşeni olur.

head(trend2[["fitted.values"]],n=24)
## Time Series:
## Start = 1 
## End = 24 
## Frequency = 1 
##  [1] 150201.9 150569.1 150936.3 151303.5 151670.7 152037.9 152405.1 152772.3
##  [9] 153139.5 153506.7 153873.9 154241.1 154608.2 154975.4 155342.6 155709.8
## [17] 156077.0 156444.2 156811.4 157178.6 157545.8 157913.0 158280.2 158647.3

3.2.7 Tahmin ve Hata Serilerinin Bulunması

Tahmin Bileşenlerini Bulalım:

tahmin = mevsimsel endeks + saf trend serisi

tahmin2<- indeks2*trend2[["fitted.values"]]
tahmin2 <- ts(data = tahmin2, start = c(1973, 01), end = c(2021, 11), frequency = 12 )
plot(tahmin2,main = "Tahmin Serisi Grafiği")

Hata Bileşenlerini Bulalım:

hata = saf trend serisi - tahmin

hata2 <- ts(veri_ts) - ts(tahmin2)
plot(hata2,main = "Tahmin serisi için Hata Serisi Grafiği")

3.2.8 Modelin Güvenirliği

Çarpımsal modelin orijinal seri üzerinde geçerli bir model olup olmadığını kontrol edelim.

Orijinal seri ile tahmin serisinin uyumu:

plot( window(veri_ts), 
      xlab="Zaman", ylab="",lty=1, col=4, lwd=2,main="Orijinal Seri ve Tahmin Serisinin Birlikte Grafiği")
lines( window(tahmin2) ,lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(OrijinalSeri )),
                   expression(paste(Tahmin ))),
       lwd=c(2,2),lty=c(1,3), cex=0.6, col=c(4,2))

Zaman Serisi Grafiğine bakıldığında:

  • Tahmin ile orijinal seri arasında sapmanın yüksek olduğunu dolayısıyla uyum göstermediğini söyleyebiliriz.

  • Fakat emin olmak için hataların akgürültü olup olmadığına bakabiliriz.

Hatalar Akgürültü mü?

! BİLGİ !

Akgürültü Serisi: Durağanlık koşullarından tek farkı kovaryans teriminin sıfır olmasıdır. Dolayısıyla, akgürültü serisi durağan bir seriden farklı özellikler gösterir.
Örneğin, akgürültü serisi rasgele hareketlere sahip modellenemez bir seri iken durağan serilerin hareketlerinin belli bir sistematiği vardır ve bu nedenle modellenebilmektedir. Akgürültü serisinin tüm gecikmelerindeki otokorelasyon ve kısmi otokorelasyon değerleri önemsizdir.

ACF ve PACF grafıklerinin yorumunda serinin akgürültü serisi olup olmadığına net bir şekilde karar verilemiyorsa, yani ACF veya PACF grafiklerinde birinci gecikme dışında az sayıda güven sınırını biraz geçen ilişkiler var ise bu durumda seriye Box-Ljung Testi uygulanır.

Eğer her gecikme için Box-Ljung Testi sonucunda Ho : rk = 0 yokluk hipotezi kabul edilirse serinin akgürültü serisi olduğu söylenir.

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

Ho: Hatalar Akgürültüdür.(Hatalar arasında ilişki yoktur.)
H1: Hatalar Akgürültü değildir.(Hatalar arasında ilişki vardır.)

Hatalar için ACF Grafiği:

Acf(hata2, lag.max = 42,  ylim=c(-1,1), lwd=5,main="Hatalar için ACF Grafiği")

Hatalar için ACF Grafiğine bakıldığında:

  • Tüm gecikmelerin sınırları geçtiği gözükmektedir.

  • Hataların akgürültü olmadığı (Ho RED) Söylenebilir. Box-Ljung testi ile de bunu görebiliriz.

Box-Ljung Testi:

Box.test(hata2,type = "Ljung",lag = 42)
## 
##  Box-Ljung test
## 
## data:  hata2
## X-squared = 12215, df = 42, p-value < 2.2e-16

Box-Ljung test sonucuna bakıldığında:

  • p değeri = 0 < α =0.05 ’dir. Yani Ho RED.

  • Hatalar Arasında ilişki olduğunu yani hataların akgürültü olmadığını söyleyebiliriz.

3.2.9 SONUÇ

Bir önceki adımda görüldüğü üzere;

  • Hatalar Arasında ilişki olduğunu yani hataların akgürültü olmadığını gördük.

  • Sonuç olarak ABD’deki aylık elektrik tüketimi serisinin analizi için Çarpımsal Ayrıştırma yöntemi uygun değildir.

3.Bölüm Özet

Bu bölümde; Ayrıştırma Yöntemleri ile ABD’deki aylık elektrik tüketimini tahmin etmeye çalıştık. Fakat uyguladığımız iki model de tahmin etmekte eksik kaldı.

Bundan sonra sırasıyla:

  • Regresyon Analizi

  • Üstel Düzleştirme Yöntemi

  • Box-Jenkins Modelleri uygulanacaktır.




BÖLÜM 4: MEVSİMSEL ZAMAN SERİLERİNDE REGRESYON ANALİZİ

Zaman Serileri için Regresyon Analizinde, serinin mevsimsel olup olmamasına göre yöntemler değişiklik göstermektedir.

Sadece trende sahip seriler (Mevsimsel olmayan) için;
Basit Doğrusal Regresyon
Birinci Farklar Regresyon Modeli
Üstel Regresyon Modeli
Karesel Regresyon Modeli
Lojistik Regresyon Modeli
Kübik Regresyon Modeli
gibi yöntemler kullanılabilir.

Hem trende hem de mevsimselliğe sahip seriler için ise 3. Bölümde gördüğümüz Ayrıştırma Yöntemlerinden yararlanarak Regresyon analizini uygulayabiliriz.

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

Buradaki başlıkta; Trende sahip serinin birinci farkını aldığımızda serinin aynı zamanda mevsimselliğe sahip olduğunu ACF grafiğine bakarak açıklamıştık.

Kullandığımız veri mevsimselliğe sahip olduğu için bu bölümde sadece Mevsimsel Serilerde Regresyon Analizi yöntemleri gösterilecektir.

4.1 Toplamsal Model İle Regresyon Analizi

! BİLGİ !

Eğer bir seride hem trent hem de mevsimsellik var ise bu seriye uygulanacak regresyon modeli

biçiminde olmaktadır.

m: serinin trendinin yapısına göre polinom derecesidir.
- m=l doğrusal trende sahip seri içindir.
- m=2 karesel regresyona modeline uygun trende sahip seri içindir.
- m=3 kübik regresyon modeline uygun trende sahip seri içindir.

Formüldeki ilk ∑ ifadesi: serinin trend bileşenini açıklar.

s:periyot olmak üzere [s /2] periyodun yarısının tamsayı kısmını gösterir. Örneğin, periyot 9 ise [s /2], 4 olmaktadır.

Burada j indisli toplam, yani köşeli parantez içindeki sinüs ve kosinüs fonksiyonları serinin mevsimsel bileşenini açıklamaktadır. Her regresyon modelinde olduğu gibi bu regresyon denkleminde de tüm katsayıların istatistiksel olarak önemli olması gerekmektedir.

Sinüs ve kosinüs çiftine harmonik adı verilmektedir. Böylece, j=l için birinci harmonik, j=2 için ikinci harmonik şeklinde j= [s /2] oluncaya kadar regresyon denklemine harmonik eklenir. Ancak her ekleme sonucunda ci ve di regresyon katsayılarının önemlilik kontrolü yapılır.

Bu regresyon katsayılarından biri önemsiz olduğunda harmonik ekleme işlemine son verilir ve önemsiz olan regresyon katsayısına ait terim modelden atılarak serinin tahmininde katsayılarının hepsi önemli olan regresyon modeli kullanılır.

Uygulama verilerinde genellikle sadece birinci harmonikler seriyi açıklamada yeterli olmaktadır. Dolayısıyla, genellikle ikinci harmonikler regresyon modeline eklenmemektedir. Ayrıca, j= [s/2] için periyot çift sayı iken sinüs fonksiyonu, yani sin(nt) hep 0 değerini alacağından ilgili harmonikte sinüs serisinin oluşturulmamasına ve regresyon modeline eklenmemesine dikkat edilmelidir.

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

4.1.1 t, Sin ve Cos Terimlerinin oluşturulması

Serimiz, hem trende hem de mevsimsel dalgalanmaya sahip olduğundan regresyon modelinin; t, sinüs ve kosinüs terimlerini içermesi gerekmektedir.

t <- 1: 1: 587

Veride 144 gözlem bulunduğu için bu değerler girilmiştir.

sin1<-sin(2*3.1416*t/12)
cos1<-cos(2*3.1416*t/12)

Sin ve Cos değerleri bulunurken yazılan formüldeki 12 değeri, daha önceki bölümlerde bulduğumuz periyottur.

veri, t, sin ve cos terimleri ile yeni bir veri oluşturulur:

veri_mev_yeni <- as.data.frame(cbind(veri_ts, t, sin1, cos1))
names(veri_mev_yeni)<- c("y", "t", "sin1", "cos1")

knitr::kable(head(veri_mev_yeni), align = "c")
y t sin1 cos1
144505.2 1 0.5000011 0.8660248
139546.1 2 0.8660266 0.4999979
137102.3 3 1.0000000 -0.0000037
131365.9 4 0.8660230 -0.5000042
131360.9 5 0.4999947 -0.8660285
140293.0 6 -0.0000073 -1.0000000

4.1.2 Regresyon Modelinin Oluşturulması

Birinci Harmonik

Oluşturulan yeni veri ile regresyon analizi yapılır.

regresyon.model1<-lm(data = veri_mev_yeni, y ~ t+sin1+cos1)
summary(regresyon.model1)
## 
## Call:
## lm(formula = y ~ t + sin1 + cos1, data = veri_mev_yeni)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -76521 -16912  -2573  17977  67127 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 149688.507   2123.682  70.485  < 2e-16 ***
## t              367.920      6.259  58.787  < 2e-16 ***
## sin1        -14720.908   1498.521  -9.824  < 2e-16 ***
## cos1         -7451.091   1500.895  -4.964 9.06e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 25690 on 583 degrees of freedom
## Multiple R-squared:  0.8605, Adjusted R-squared:  0.8598 
## F-statistic:  1199 on 3 and 583 DF,  p-value: < 2.2e-16

Birinci Harmonik için Regresyon modeli sonucuna göre:

  • Coefficients kısmındaki p değerlerinin hepsi < α =0.05 olduğundan, modeldeki tüm terimlerin önemli olduğunu söyleyebiliriz.

  • p-value değeri < α =0.05 olduğundan kurulan regresyon modelinin anlamlı olduğunu söyleyebiliriz.

İkinci Harmonik

Birinci harmonikte tüm terimler anlamlı çıktığından ikinci harmonikte de regresyon denklemine katılırlar.

Sin, Cos Terimlerinin oluşturulması:

sin2<-sin(2*3.1416*2*t/12)
cos2<-cos(2*3.1416*2*t/12)

Yeni Verinin Oluşturulması:

Yeni veri oluşturulurken birinci harmonikte kullanılan sin ve cos değerleri de eklenir.

veri_mev_yeni2 <- as.data.frame(cbind(veri_ts, t, sin1, cos1, sin2, cos2))

names(veri_mev_yeni2)<- c("y", "t", "sin1", "cos1", "sin2", "cos2")

knitr::kable(head(veri_mev_yeni2), align = "c")
y t sin1 cos1 sin2 cos2
144505.2 1 0.5000011 0.8660248 0.8660266 0.4999979
139546.1 2 0.8660266 0.4999979 0.8660230 -0.5000042
137102.3 3 1.0000000 -0.0000037 -0.0000073 -1.0000000
131365.9 4 0.8660230 -0.5000042 -0.8660303 -0.4999915
131360.9 5 0.4999947 -0.8660285 -0.8660193 0.5000106
140293.0 6 -0.0000073 -1.0000000 0.0000147 1.0000000

İkinci Harmonik için regresyon modelinin kurulması:

regresyon.model2<-lm(data= veri_mev_yeni2, y ~ t+sin1+cos1+sin2+cos2)
summary(regresyon.model2)
## 
## Call:
## lm(formula = y ~ t + sin1 + cos1 + sin2 + cos2, data = veri_mev_yeni2)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -60416 -12872   -180  15512  48319 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 149491.070   1663.554  89.862  < 2e-16 ***
## t              368.601      4.903  75.186  < 2e-16 ***
## sin1        -14718.377   1173.821 -12.539  < 2e-16 ***
## cos1         -7445.983   1175.687  -6.333 4.81e-10 ***
## sin2         22502.242   1173.708  19.172  < 2e-16 ***
## cos2          1480.181   1175.687   1.259    0.209    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 20120 on 581 degrees of freedom
## Multiple R-squared:  0.9147, Adjusted R-squared:  0.914 
## F-statistic:  1246 on 5 and 581 DF,  p-value: < 2.2e-16

İkinci Harmonik için Regresyon modeli sonucuna göre:

  • Coefficients kısmındaki cos2 terimi dışındaki p değerlerinin hepsi < α =0.05 olduğundan, cos2 dışındaki terimlerin önemli olduğunu söyleyebiliriz.

  • p-value değeri < α =0.05 olduğundan kurulan regresyon modelinin anlamlı olduğunu söyleyebiliriz.

  • cos2 terimi katsayısı = 0.209 > α =0.05 olduğu için, cos2 terimine ait katsayının anlamsız olduğunu söyleyebiliriz.

Bu durumda cos2 değişkeni çıkarılarak tekrardan model anlamlılığına bakılır.

cos2 teriminin olmadığı modelin oluşturulması:

regresyon.model3<-lm(data= veri_mev_yeni2, y ~ t+sin1+cos1+sin2)
summary(regresyon.model3)
## 
## Call:
## lm(formula = y ~ t + sin1 + cos1 + sin2, data = veri_mev_yeni2)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -61153 -12957     35  15170  47578 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 149488.533   1664.389  89.816  < 2e-16 ***
## t              368.601      4.905  75.148  < 2e-16 ***
## sin1        -14718.379   1174.411 -12.533  < 2e-16 ***
## cos1         -7451.037   1176.271  -6.334 4.77e-10 ***
## sin2         22502.238   1174.298  19.162  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 20130 on 582 degrees of freedom
## Multiple R-squared:  0.9145, Adjusted R-squared:  0.9139 
## F-statistic:  1555 on 4 and 582 DF,  p-value: < 2.2e-16

Modelin Anlamlılığı:

Ho: Model Anlamsızdır.
H1: Model Anlamlıdır.

  • p-value değeri < α =0.05 olduğundan Ho RED. Kurulan regresyon modelinin anlamlı olduğunu söyleyebiliriz.

Durbin-Watson Testi:

Ho: Otokorelasyon sorunu yoktur.
H1: Otokorelasyon sorunu vardır.

library(fpp)
dwtest(data= veri_mev_yeni2, y ~ t+sin1+cos1+sin2)
## 
##  Durbin-Watson test
## 
## data:  y ~ t + sin1 + cos1 + sin2
## DW = 0.3644, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

Durbin-Watson Test sonucuna göre:

  • DW= 0,3644 değeri 2 ye yakın bir değer olmadığı için (p = 0 < α =0.05) Ho RED. Otokorelasyon sorunu vardır.

Toplamsal Model ile kurulan Regresyon Analizinin Denklemi :

Zt = 149488.533 + 368.601t - 14718.379sin(2πt/12) - 7451.037cos(2πt/12) + 22502.238sin(4πt/12) + εi olur.

4.1.3 Kurulan Model İçin Tahmin, Hata ve Tahminin Sınır Serileri

Zt = 149488.533 + 368.601t - 14718.379sin(2πt/12) - 7451.037cos(2πt/12) + 22502.238sin(4πt/12) + εi modeli için:

Tahmin:

tahmin_model3<-predict(regresyon.model3)
plot.ts(tahmin_model3)

Alt ve Üst Sınırlar:

sinir_model3<-predict(regresyon.model3, interval = 'confidence' ,level = .95)
plot.ts(sinir_model3)

Hata:

hata_model3<-resid(regresyon.model3)
plot.ts(hata_model3)

Gerçek Elektrik Tüketimi ve Tahmin Sınırlarının Birlikte Çizilmesi

plot( window(veri_mev_yeni2$y),
      xlab="", ylab="", type="l", lty=3, col=2, lwd=2)
lines(window(sinir_model3[,2]) ,type="l",lty=1,col=4,lwd=2)
lines(window(sinir_model3[,3]) ,type="l",lty=1,col=3,lwd=2)
legend("topleft",c(expression(paste(Elektri_Tüketimi)),
                   expression(paste(Altsinir)),
                   expression(paste(Üstsinir))),
       lwd=c(2,2,3),lty=c(3,1,2), cex=0.7, col=c(2,4,3))

4.1.4 Modelin Güvenirliği

Toplamsal Regresyon modelinin orijinal seri üzerinde geçerli bir model olup olmadığını kontrol edelim.

Orijinal seri ile tahmin serisinin uyumu:

plot( window(veri_mev_yeni2$y), 
      xlab="Zaman", ylab="",type="l",lty=1, col=4, lwd=2)
lines( window(tahmin_model3),lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(Elektrik_tüketimi)),
                   expression(paste(Tahmin))),
       lwd=c(2,2),lty=c(1,3), cex=0.6, col=c(4,2))

Zaman Serisi Grafiğine bakıldığında:

  • Tahmin ile orijinal seri arasında sapmanın yüksek olduğunu dolayısıyla uyum göstermediğini söyleyebiliriz.

  • Fakat emin olmak için hataların akgürültü olup olmadığına bakabiliriz.

Hatalar Akgürültü mü?

! BİLGİ !

Akgürültü Serisi: Durağanlık koşullarından tek farkı kovaryans teriminin sıfır olmasıdır. Dolayısıyla, akgürültü serisi durağan bir seriden farklı özellikler gösterir.
Örneğin, akgürültü serisi rasgele hareketlere sahip modellenemez bir seri iken durağan serilerin hareketlerinin belli bir sistematiği vardır ve bu nedenle modellenebilmektedir. Akgürültü serisinin tüm gecikmelerindeki otokorelasyon ve kısmi otokorelasyon değerleri önemsizdir.

ACF ve PACF grafıklerinin yorumunda serinin akgürültü serisi olup olmadığına net bir şekilde karar verilemiyorsa, yani ACF veya PACF grafiklerinde birinci gecikme dışında az sayıda güven sınırını biraz geçen ilişkiler var ise bu durumda seriye Box-Ljung Testi uygulanır.

Eğer her gecikme için Box-Ljung Testi sonucunda Ho : rk = 0 yokluk hipotezi kabul edilirse serinin akgürültü serisi olduğu söylenir.

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

Ho: Hatalar Akgürültüdür.(Hatalar arasında ilişki yoktur.)
H1: Hatalar Akgürültü değildir.(Hatalar arasında ilişki vardır.)

Hatalar için ACF Grafiği:

Acf(hata_model3, lag.max = 42,  ylim=c(-1,1), lwd=5,main="Hatalar için ACF Grafiği")

Hatalar için ACF Grafiğine bakıldığında:

  • Tüm gecikmelerin sınırları geçtiği gözükmektedir.

  • Hataların akgürültü olmadığı (Ho RED) Söylenebilir. Box-Ljung testi ile de bunu görebiliriz.

Box-Ljung Testi:

Box.test(hata_model3,type = "Ljung",lag = 42)
## 
##  Box-Ljung test
## 
## data:  hata_model3
## X-squared = 8221.9, df = 42, p-value < 2.2e-16

Box-Ljung test sonucuna bakıldığında:

  • p değeri = 0 < α =0.05 ’dir. Yani Ho RED.

  • Hatalar Arasında ilişki olduğunu yani hataların akgürültü olmadığını söyleyebiliriz.

4.1.5 SONUÇ

Bir önceki adımda görüldüğü üzere;

  • Hatalar Arasında ilişki olduğunu yani hataların akgürültü olmadığını gördük.

  • Sonuç olarak ABD’deki aylık elektrik tüketimi serisinin Regresyon analizi için kullanılan Toplamsal Regresyon denklemi uygun değildir.

4.2 Çarpımsal Model İle Regresyon Analizi

! BİLGİ !

Bu modelde serideki dalgalanma büyüklükleri düzenli bir şekilde artmaktadır. Bu model regresyon analizine uygulandığında trende ve mevsimsel dalgalanmaya sahip bir serinin analizi için uygun olan bir regresyon denklemi:

biçiminde olmaktadır.

Burada i indisli toplam serinin trendini, i ve j indisli iki toplam ise mevsimselligin çarpımsal biçimde oldugunu göstermektedir.

Bu denklemde bağımsız degiskenin t serisi ile sinüs fonksiyonu serisini çarpımı, t serisi ile kosinüs fonksiyonu serisinin çarpımı t serisi olduguna dikkat edilmelidir.

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

4.2.1 t, Sin ve Cos Terimlerinin oluşturulması

Serimiz, hem trende hem de mevsimsel dalgalanmaya sahip olduğundan regresyon modelinin; t, sinüs ve kosinüs terimlerini içermesi gerekmektedir.

t <- 1: 1: 587

Veride 144 gözlem bulunduğu için bu değerler girilmiştir.

s1<-t*sin(2*3.1416*t/12)
c1<-t*cos(2*3.1416*t/12)

Sin ve Cos değerleri bulunurken yazılan formüldeki 12 değeri, daha önceki bölümlerde bulduğumuz periyottur.

veri, t, sin ve cos terimleri ile yeni bir veri oluşturulur:

veri_mevC_yeni <- as.data.frame(cbind(veri_ts, t, s1, c1))
names(veri_mevC_yeni)<- c("y", "t", "s1", "c1")

knitr::kable(head(veri_mevC_yeni), align = "c")
y t s1 c1
144505.2 1 0.5000011 0.8660248
139546.1 2 1.7320533 0.9999958
137102.3 3 3.0000000 -0.0000110
131365.9 4 3.4640918 -2.0000170
131360.9 5 2.4999735 -4.3301423
140293.0 6 -0.0000441 -6.0000000

4.2.2 Regresyon Modelinin Oluşturulması

Birinci Harmonik

Oluşturulan yeni veri ile regresyon analizi yapılır.

regresyon.modelC1<-lm(data = veri_mevC_yeni, y ~ t+s1+c1)
summary(regresyon.modelC1)
## 
## Call:
## lm(formula = y ~ t + s1 + c1, data = veri_mevC_yeni)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -73643 -16474  -2108  16541  67571 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 149621.728   2066.679  72.397  < 2e-16 ***
## t              367.845      6.091  60.394  < 2e-16 ***
## s1             -46.962      4.296 -10.931  < 2e-16 ***
## c1             -27.767      4.306  -6.448 2.38e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 25000 on 583 degrees of freedom
## Multiple R-squared:  0.8679, Adjusted R-squared:  0.8672 
## F-statistic:  1276 on 3 and 583 DF,  p-value: < 2.2e-16

Birinci Harmonik için Regresyon modeli sonucuna göre:

  • Coefficients kısmındaki p değerlerinin hepsi < α =0.05 olduğundan, modeldeki tüm terimlerin önemli olduğunu söyleyebiliriz.

  • p-value değeri < α =0.05 olduğundan kurulan regresyon modelinin anlamlı olduğunu söyleyebiliriz.

İkinci Harmonik

Birinci harmonikte tüm terimler anlamlı çıktığından ikinci harmonikte de regresyon denklemine katılırlar.

Sin, Cos Terimlerinin oluşturulması:

s2<-t*sin(2*3.1416*2*t/12)
c2<-t*cos(2*3.1416*2*t/12)

Yeni Verinin Oluşturulması:

Yeni veri oluşturulurken birinci harmonikte kullanılan sin ve cos değerleri de eklenir.

veri_mevC_yeni2 <- as.data.frame(cbind(veri_ts, t, s1, c1, s2, c2))

names(veri_mevC_yeni2)<- c("y", "t", "s1", "c1", "s2", "c2")

knitr::kable(head(veri_mevC_yeni2), align = "c")
y t s1 c1 s2 c2
144505.2 1 0.5000011 0.8660248 0.8660266 0.4999979
139546.1 2 1.7320533 0.9999958 1.7320459 -1.0000085
137102.3 3 3.0000000 -0.0000110 -0.0000220 -3.0000000
131365.9 4 3.4640918 -2.0000170 -3.4641212 -1.9999661
131360.9 5 2.4999735 -4.3301423 -4.3300964 2.5000530
140293.0 6 -0.0000441 -6.0000000 0.0000882 6.0000000

İkinci Harmonik için regresyon modelinin kurulması:

regresyon.modelC2<-lm(data= veri_mevC_yeni2, y ~ t+s1+c1+s2+c2)
summary(regresyon.modelC2)
## 
## Call:
## lm(formula = y ~ t + s1 + c1 + s2 + c2, data = veri_mevC_yeni2)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -58872 -13619   -946  14783  45690 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 149492.533   1536.901  97.269  < 2e-16 ***
## t              368.503      4.529  81.356  < 2e-16 ***
## s1             -47.011      3.195 -14.715  < 2e-16 ***
## c1             -26.885      3.203  -8.394 3.58e-16 ***
## s2              69.020      3.195  21.605  < 2e-16 ***
## c2               8.234      3.203   2.571   0.0104 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 18590 on 581 degrees of freedom
## Multiple R-squared:  0.9272, Adjusted R-squared:  0.9266 
## F-statistic:  1479 on 5 and 581 DF,  p-value: < 2.2e-16

İkinci Harmonik için Regresyon modeli sonucuna göre:

  • Coefficients kısmındaki p değerlerinin hepsi < α =0.05 olduğundan, modeldeki tüm terimlerin önemli olduğunu söyleyebiliriz.

  • p-value değeri < α =0.05 olduğundan kurulan regresyon modelinin anlamlı olduğunu söyleyebiliriz.

Üçüncü Harmonik

İkinci harmonikte tüm terimler anlamlı çıktığından ikinci harmonikte de regresyon denklemine katılırlar.

Sin, Cos Terimlerinin oluşturulması:

s3<-t*sin(2*3.1416*3*t/12)
c3<-t*cos(2*3.1416*3*t/12)

Yeni Verinin Oluşturulması:

Yeni veri oluşturulurken birinci harmonikte kullanılan sin ve cos değerleri de eklenir.

veri_mevC_yeni3 <- as.data.frame(cbind(veri_ts, t, s1, c1, s2, c2,s3,c3))

names(veri_mevC_yeni3)<- c("y", "t", "s1", "c1", "s2", "c2","s3", "c3")

knitr::kable(head(veri_mevC_yeni3), align = "c")
y t s1 c1 s2 c2 s3 c3
144505.2 1 0.5000011 0.8660248 0.8660266 0.4999979 1.0000000 -3.70e-06
139546.1 2 1.7320533 0.9999958 1.7320459 -1.0000085 -0.0000147 -2.00e+00
137102.3 3 3.0000000 -0.0000110 -0.0000220 -3.0000000 -3.0000000 3.31e-05
131365.9 4 3.4640918 -2.0000170 -3.4641212 -1.9999661 0.0000588 4.00e+00
131360.9 5 2.4999735 -4.3301423 -4.3300964 2.5000530 5.0000000 -9.18e-05
140293.0 6 -0.0000441 -6.0000000 0.0000882 6.0000000 -0.0001322 -6.00e+00

Üçüncü Harmonik için regresyon modelinin kurulması:

regresyon.modelC3<-lm(data= veri_mevC_yeni3, y ~ t+s1+c1+s2+c2+s3+c3)
summary(regresyon.modelC3)
## 
## Call:
## lm(formula = y ~ t + s1 + c1 + s2 + c2 + s3 + c3, data = veri_mevC_yeni3)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -52489 -13350   -588  14875  44894 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 149478.431   1520.254  98.325  < 2e-16 ***
## t              368.575      4.480  82.263  < 2e-16 ***
## s1             -47.045      3.160 -14.887  < 2e-16 ***
## c1             -26.811      3.168  -8.463  < 2e-16 ***
## s2              68.916      3.160  21.808  < 2e-16 ***
## c2               8.319      3.168   2.626 0.008869 ** 
## s3               2.350      3.160   0.744 0.457328    
## c3              11.957      3.168   3.774 0.000177 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 18390 on 579 degrees of freedom
## Multiple R-squared:  0.929,  Adjusted R-squared:  0.9281 
## F-statistic:  1082 on 7 and 579 DF,  p-value: < 2.2e-16

Üçüncü Harmonik için Regresyon modeli sonucuna göre:

  • Coefficients kısmındaki s3 terimi dışındaki p değerleri hepsi < α =0.05 olduğundan, s3 dışındaki terimlerin önemli olduğunu söyleyebiliriz.

  • p-value değeri < α =0.05 olduğundan kurulan regresyon modelinin anlamlı olduğunu söyleyebiliriz.

  • s3 terimi katsayısı = 0.457328 > α =0.05 olduğu için, s3 terimine ait katsayının anlamsız olduğunu söyleyebiliriz.

Bu durumda s3 değişkeni çıkarılarak tekrardan model anlamlılığına bakılır.

s3 teriminin olmadığı modelin oluşturulması:

regresyon.modelC4<-lm(data= veri_mevC_yeni3, y ~ t+s1+c1+s2+c2+c3)
summary(regresyon.modelC4)
## 
## Call:
## lm(formula = y ~ t + s1 + c1 + s2 + c2 + c3, data = veri_mevC_yeni3)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -52490 -13334   -518  14688  45695 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 149480.840   1519.665  98.364  < 2e-16 ***
## t              368.563      4.479  82.292  < 2e-16 ***
## s1             -47.045      3.159 -14.893  < 2e-16 ***
## c1             -26.825      3.167  -8.471  < 2e-16 ***
## s2              68.915      3.159  21.816  < 2e-16 ***
## c2               8.295      3.167   2.619 0.009038 ** 
## c3              11.957      3.167   3.776 0.000176 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 18380 on 580 degrees of freedom
## Multiple R-squared:  0.9289, Adjusted R-squared:  0.9282 
## F-statistic:  1263 on 6 and 580 DF,  p-value: < 2.2e-16

Modelin Anlamlılığı:

Ho: Model Anlamsızdır.
H1: Model Anlamlıdır.

  • p-value değeri < α =0.05 olduğundan Ho RED. Kurulan regresyon modelinin anlamlı olduğunu söyleyebiliriz.

Durbin-Watson Testi:

Ho: Otokorelasyon sorunu yoktur.
H1: Otokorelasyon sorunu vardır.

library(fpp)

dwtest(data= veri_mevC_yeni3, y ~ t+s1+c1+s2+c2+c3)
## 
##  Durbin-Watson test
## 
## data:  y ~ t + s1 + c1 + s2 + c2 + c3
## DW = 0.2914, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

Durbin-Watson Test sonucuna göre:

  • DW= 0,2914 değeri 2 ye yakın bir değer olmadığı için (p = 0 < α =0.05) Ho RED. Otokorelasyon sorunu vardır.

Çarpımsal Model ile kurulan Regresyon Analizinin Denklemi :

Zt = 149480.840 + 368.563t - 47.045sin(2πt/12) - 26.825cos(2πt/12) + 68.915sin(4πt/12) + 8.295cos(4πt/12) + 11.957cos(6πt/12) + εi olur.

4.2.3 Kurulan Model İçin Tahmin, Hata ve Tahminin Sınır Serileri

Zt = 149480.840 + 368.563t - 47.045sin(2πt/12) - 26.825cos(2πt/12) + 68.915sin(4πt/12) + 8.295cos(4πt/12) + 11.957cos(6πt/12) + εi modeli için:

Tahmin:

tahmin_modelC4<-predict(regresyon.modelC4)
plot.ts(tahmin_modelC4)

Alt ve Üst Sınırlar:

sinir_modelC4<-predict(regresyon.modelC4, interval = 'confidence' ,level = .95)
plot.ts(sinir_modelC4)

Hata:

hata_modelC4<-resid(regresyon.modelC4)
plot.ts(hata_modelC4)

Gerçek Elektrik Tüketimi ve Tahmin Sınırlarının Birlikte Çizilmesi

plot( window(veri_mevC_yeni3$y),
      xlab="", ylab="", type="l", lty=3, col=2, lwd=2)
lines(window(sinir_modelC4[,2]) ,type="l",lty=1,col=4,lwd=2)
lines(window(sinir_modelC4[,3]) ,type="l",lty=1,col=3,lwd=2)
legend("topleft",c(expression(paste(Elektri_Tüketimi)),
                   expression(paste(Altsinir)),
                   expression(paste(Üstsinir))),
       lwd=c(2,2,3),lty=c(3,1,2), cex=0.7, col=c(2,4,3))

4.2.4 Modelin Güvenirliği

Çarpımsal Regresyon modelinin orijinal seri üzerinde geçerli bir model olup olmadığını kontrol edelim.

Orijinal seri ile tahmin serisinin uyumu:

plot( window(veri_mevC_yeni3$y), 
      xlab="Zaman", ylab="",type="l",lty=1, col=4, lwd=2)
lines( window(tahmin_modelC4),lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(Elektrik_tüketimi)),
                   expression(paste(Tahmin))),
       lwd=c(2,2),lty=c(1,3), cex=0.6, col=c(4,2))

Zaman Serisi Grafiğine bakıldığında:

  • Tahmin ile orijinal seri arasında sapmanın yüksek olduğunu dolayısıyla uyum göstermediğini söyleyebiliriz.

  • Fakat emin olmak için hataların akgürültü olup olmadığına bakabiliriz.

Hatalar Akgürültü mü?

! BİLGİ !

Akgürültü Serisi: Durağanlık koşullarından tek farkı kovaryans teriminin sıfır olmasıdır. Dolayısıyla, akgürültü serisi durağan bir seriden farklı özellikler gösterir.
Örneğin, akgürültü serisi rasgele hareketlere sahip modellenemez bir seri iken durağan serilerin hareketlerinin belli bir sistematiği vardır ve bu nedenle modellenebilmektedir. Akgürültü serisinin tüm gecikmelerindeki otokorelasyon ve kısmi otokorelasyon değerleri önemsizdir.

ACF ve PACF grafıklerinin yorumunda serinin akgürültü serisi olup olmadığına net bir şekilde karar verilemiyorsa, yani ACF veya PACF grafiklerinde birinci gecikme dışında az sayıda güven sınırını biraz geçen ilişkiler var ise bu durumda seriye Box-Ljung Testi uygulanır.

Eğer her gecikme için Box-Ljung Testi sonucunda Ho : rk = 0 yokluk hipotezi kabul edilirse serinin akgürültü serisi olduğu söylenir.

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

Ho: Hatalar Akgürültüdür.(Hatalar arasında ilişki yoktur.)
H1: Hatalar Akgürültü değildir.(Hatalar arasında ilişki vardır.)

Hatalar için ACF Grafiği:

Acf(hata_modelC4, lag.max = 42,  ylim=c(-1,1), lwd=5,main="Hatalar için ACF Grafiği")

Hatalar için ACF Grafiğine bakıldığında:

  • Tüm gecikmelerin sınırları geçtiği gözükmektedir.

  • Hataların akgürültü olmadığı (Ho RED) Söylenebilir. Box-Ljung testi ile de bunu görebiliriz.

Box-Ljung Testi:

Box.test(hata_modelC4,type = "Ljung",lag = 42)
## 
##  Box-Ljung test
## 
## data:  hata_modelC4
## X-squared = 11835, df = 42, p-value < 2.2e-16

Box-Ljung test sonucuna bakıldığında:

  • p değeri = 0 < α =0.05 ’dir. Yani Ho RED.

  • Hatalar Arasında ilişki olduğunu yani hataların akgürültü olmadığını söyleyebiliriz.

4.2.5 SONUÇ

Bir önceki adımda görüldüğü üzere;

  • Hatalar Arasında ilişki olduğunu yani hataların akgürültü olmadığını gördük.

  • Sonuç olarak ABD’deki aylık elektrik tüketimi serisinin Regresyon analizi için kullanılan Çarpımsal Regresyon denklemi uygun değildir.

4.Bölüm Özet

Bu bölümde; Mevsimsel seriler için kullanılan Regresyon Analizi yöntemleri ile ABD’deki aylık elektrik tüketimini tahmin etmeye çalıştık. Fakat uyguladığımız iki model de tahmin etmekte eksik kaldı.

Bundan sonra sırasıyla:

  • Üstel Düzleştirme Yöntemi

  • Box-Jenkins Modelleri uygulanacaktır.




BÖLÜM 5: WİNTERS ÜSTEL DÜZLEŞTİRME YÖNTEMİ

Bu bölüme kadar anlatılan yöntemler, zaman içinde değişmeyen parametre varsayımına uygun serilerin tahminlerinde kullanılmaktaydı. Bir başka deyişle, bu tür seriler deterministik trende sahipti. Ancak birçok zaman serisinin hareketi regresyon doğrusuna ya da eğrisine dönme eğilimi göstermemektedir. Yani, zaman içinde serinin trend yapısı rasgele değişebilmektedir. Bu durumda, regresyon katsayısı sabit bir değer değil her t zamanında değişen değerlere sahip rasgele bir değişken olmaktadır. Böyle bir serinin tahınininin yapılabilmesi için elde edilen son gözlem (T’ inci döneme ait gözlem) değeri ile son döneme ait tahminin güncelleştirilmiş hali kullanılır.

Bu bölümde, zaman içinde değişen parametrelere sahip olan ve bir regresyon doğrusuna ya da eğrisine dönme eğilimi olmadığından tek bir regresyon doğrusu ya da eğrisiyle açıklanamayan, yani kısaca stokastik trende sahip olan serilerin analizi üzerinde durulacaktır.

Zaman Serileri için Üstel Düzleştirme Yöntemi, serinin mevsimsel olup olmamasına göre değişiklik göstermektedir.

Sadece trende sahip seriler (Mevsimsel olmayan) için;
Basit Üstel Düzleştirme Yöntemi
Holt Üstel Düzleştirme Yöntemi gibi yöntemler kullanılabilir.

Hem trende hem de mevsimselliğe sahip seriler için ise Winters Üstel Düzleştirme Yöntemini uygulayabiliriz.

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

Buradaki başlıkta; Trende sahip serinin birinci farkını aldığımızda serinin aynı zamanda mevsimselliğe sahip olduğunu ACF grafiğine bakarak açıklamıştık.

Kullandığımız veri mevsimselliğe sahip olduğu için bu bölümde sadece Winters Üstel Düzleştirme Yöntemi gösterilecektir.

Winters Üstel Düzleştirme Yöntemi için aşağıdaki formüller kullanılacaktır:

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

5.1 Toplamsal Winters Yöntemi

Verilerin trend’den bağımsız ve mevsimsel hareketlerin büyüklüğünün zaman içinde sabit olduğu varsayılır.

5.1.1 α, β ve γ’nın Belirlenmesi:

Kurulan model toplamsal model olacağı için fonksiyon içindeki model değişkeni “AAA” olmalıdır.

Winters1<- forecast::ets(veri_ts, model = "AAA")
summary(Winters1)
## ETS(A,A,A) 
## 
## Call:
##  forecast::ets(y = veri_ts, model = "AAA") 
## 
##   Smoothing parameters:
##     alpha = 0.35 
##     beta  = 0.0015 
##     gamma = 0.376 
## 
##   Initial states:
##     l = 142359.4408 
##     b = 650.5006 
##     s = -2003.421 -21271.04 -10677.56 13503.16 37439.09 33817.96
##            5562.078 -19450.16 -23820.27 -12164.33 -8641.028 7705.514
## 
##   sigma:  7062.892
## 
##      AIC     AICc      BIC 
## 14164.62 14165.70 14239.00 
## 
## Training set error measures:
##                     ME     RMSE      MAE        MPE     MAPE      MASE
## Training set -443.1612 6965.969 5416.702 -0.2365098 2.209926 0.6997371
##                   ACF1
## Training set 0.3491801

Model çıktısına bakıldığında:

  • l = 142359.4408 -> ortalama düzeyin başlangıç değeridir.

  • b = 650.5006 -> eğimin başlangıç değeridir.

  • s değerine bakıldığında ise 12 farklı değer (periyot sayımız 12 olduğu için) vardır. Bu değerler mevsimsel terimin başlangıç değerleridir. Başlangıç değerleri kullanılarak Optimal düzleştirme katsayıları,

    • α = 0.35
    • β = 0.0015
    • γ = 0.376 olarak elde edilmiştir.

Toplamsal Winters Modeli HKO

  • Hata kareler ortalaması-HKO = 6965.969^2 bulunmuştur.

5.1.2 Tahmin, ACF ve Dağılım Grafikleri:

library(forecast)
checkresiduals(Winters1, lag = 42)

## 
##  Ljung-Box test
## 
## data:  Residuals from ETS(A,A,A)
## Q* = 225.17, df = 26, p-value < 2.2e-16
## 
## Model df: 16.   Total lags used: 42

5.1.3 Tahmin ve Hata Serilerinin Bulunması:

α, β ve γ düzleştirme katsayıları kullanılarak serinin tahmin değerleri aşağıdaki gibi bulunabilir.

tahmin_win1<- Winters1[["fitted"]]

Tahmin edilen ilk 12 değeri (2022 yılı ABD elektrik tüketim tahminlerini) görelim:

ongoru1 <- forecast(Winters1,h=12)
knitr::kable(ongoru1[["mean"]],col.names = "2022 yılı ABD elektrik tüketimi - Toplamsal Winters Tahminleri", align = "c")
2022 yılı ABD elektrik tüketimi - Toplamsal Winters Tahminleri
327234.9
337517.9
310134.8
309123.1
286408.9
305893.2
349325.4
393799.4
393737.8
348913.6
317616.4
300346.8

Tahmin ve Orijinal serileri birlikte çizdirelim:

plot( window(veri_ts), 
      xlab="Zaman", ylab="",lty=1, col=4, lwd=2)
lines( window(tahmin_win1) ,lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(Elektrik_Tuketimi)),
               expression(paste(Top.Winters_Tahmini))),
       lwd=c(2,2),lty=c(1,3), cex=0.7, col=c(4,2))

Zaman Serisi Grafiğine bakıldığında:

  • Tahmin ile orijinal seri arasında uyum olduğu görülmektedir. Yani görsel olarak Toplamsal Winters yöntemi ile yapılan tahminlerin gerçeğe yakın olduğunu söyleyebiliriz.

  • Fakat emin olmak için hataların akgürültü olup olmadığına bakmamız gerekmektedir.

Hata Serisi:

α, β ve γ düzleştirme katsayıları kullanılarak serinin hata değerleri aşağıdaki gibi bulunabilir.

hata_win1<- Winters1[["residuals"]]
plot.ts(hata_win1)

Hatalar Akgürültü mü?

Ho: Hatalar Akgürültüdür.(Hatalar arasında ilişki yoktur.)
H1: Hatalar Akgürültü değildir.(Hatalar arasında ilişki vardır.)

Hatalar için ACF Grafiği:

Acf(hata_win1, lag.max = 42,  ylim=c(-1,1), lwd=5,main="Hatalar için ACF Grafiği")

Hatalar için ACF Grafiğine bakıldığında:

  • İlk dört gecikmeden üç tanesinin sınırları geçtiği, birinin sınırlar içinde kaldığı görülmektedir.

  • Hataların akgürültü olduğunu söyleyebiliriz. Yani Hatalar arasında ilişki yoktur. Kurulan model tahmin etmede kullanılabilir.

Toplamsal Winter Yöntemi ile elektrik Tüketim Öngörüsü Grafiği:

plot(forecast(Winters1,h=120),main = "Toplamsal Winter Yönteminin İlerleyen Yıllar İçin Tahminleri")

5.1.4 SONUÇ

Bir önceki adımda görüldüğü üzere;

  • Hatalar Arasında ilişki olmadığını yani hataların akgürültü olduğunu gördük.

  • Sonuç olarak ABD’deki aylık elektrik tüketimi serisinin Regresyon analizi için kullanılan Toplamsal Winters Üstel Düzleştirme Yöntemi uygundur.

5.2 Çarpımsal Winters Yöntemi

Mevsimsel hareketlerin trende bağlı olarak değiştiği ve trendin bir çarpanı olduğu varsayılmaktadır. Genellikle çarpımsal model tercih edilmektedir.

5.2.1 α, β ve γ’nın Belirlenmesi:

Kurulan model çarpımsal model olacağı için fonksiyon içindeki model değişkeni “MAM” olmalıdır.

Winters2<- forecast::ets(veri_ts, model = "MAM")
summary(Winters2)
## ETS(M,A,M) 
## 
## Call:
##  forecast::ets(y = veri_ts, model = "MAM") 
## 
##   Smoothing parameters:
##     alpha = 0.3292 
##     beta  = 9e-04 
##     gamma = 0.2528 
## 
##   Initial states:
##     l = 141713.6213 
##     b = 564.3679 
##     s = 0.991 0.958 0.9931 1.0717 1.0836 1.0489
##            0.9816 0.9136 0.9304 0.9685 0.9911 1.0685
## 
##   sigma:  0.0231
## 
##      AIC     AICc      BIC 
## 13919.11 13920.19 13993.49 
## 
## Training set error measures:
##                     ME     RMSE      MAE        MPE     MAPE      MASE
## Training set -378.7723 6176.062 4754.346 -0.2122225 1.822243 0.6141731
##                   ACF1
## Training set 0.3226722

Model çıktısına bakıldığında:

  • l = 141713.6213 -> ortalama düzeyin başlangıç değeridir.

  • b = 564.3679 -> eğimin başlangıç değeridir.

  • s değerine bakıldığında ise 12 farklı değer (periyot sayımız 12 olduğu için) vardır. Bu değerler mevsimsel terimin başlangıç değerleridir. Başlangıç değerleri kullanılarak Optimal düzleştirme katsayıları,

    • α = 0.3292
    • β = 0
    • γ = 0.2528 olarak elde edilmiştir.

Çarpımsal Winters Modeli HKO

  • Hata kareler ortalaması-HKO = 6176.062^2 bulunmuştur.

5.2.2 Tahmin, ACF ve Dağılım Grafikleri:

library(forecast)
checkresiduals(Winters2, lag = 42)

## 
##  Ljung-Box test
## 
## data:  Residuals from ETS(M,A,M)
## Q* = 169.05, df = 26, p-value < 2.2e-16
## 
## Model df: 16.   Total lags used: 42

5.2.3 Tahmin ve Hata Serilerinin Bulunması:

α, β ve γ düzleştirme katsayıları kullanılarak serinin tahmin değerleri aşağıdaki gibi bulunabilir.

tahmin_win2<- Winters2[["fitted"]]

Tahmin edilen ilk 12 değeri (2022 yılı ABD elektrik tüketim tahminlerini) görelim:

ongoru2 <- forecast(Winters2,h=12)
knitr::kable(ongoru2[["mean"]],col.names = "2022 yılı ABD elektrik tüketimi - Çarpımsal Winters Tahminleri", align = "c")
2022 yılı ABD elektrik tüketimi - Çarpımsal Winters Tahminleri
327095.8
340700.8
311116.3
311409.0
288255.3
307903.8
349996.3
395149.7
393769.1
349813.4
318125.3
300226.6

Tahmin ve Orijinal serileri birlikte çizdirelim:

plot( window(veri_ts), 
      xlab="Zaman", ylab="",lty=1, col=4, lwd=2)
lines( window(tahmin_win2) ,lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(Elektrik_Tuketimi)),
               expression(paste(Çar.Winters_Tahmini))),
       lwd=c(2,2),lty=c(1,3), cex=0.7, col=c(4,2))

Zaman Serisi Grafiğine bakıldığında:

  • Tahmin ile orijinal seri arasında uyum olduğu görülmektedir. Yani görsel olarak Çarpımsal Winters yöntemi ile yapılan tahminlerin gerçeğe yakın olduğunu söyleyebiliriz.

  • Fakat emin olmak için hataların akgürültü olup olmadığına bakmamız gerekmektedir.

Hata Serisi:

α, β ve γ düzleştirme katsayıları kullanılarak serinin hata değerleri aşağıdaki gibi bulunabilir.

hata_win2<- Winters2[["residuals"]]
plot.ts(hata_win2)

Hatalar Akgürültü mü?

Ho: Hatalar Akgürültüdür.(Hatalar arasında ilişki yoktur.)
H1: Hatalar Akgürültü değildir.(Hatalar arasında ilişki vardır.)

Hatalar için ACF Grafiği:

Acf(hata_win2, lag.max = 42,  ylim=c(-1,1), lwd=5,main="Hatalar için ACF Grafiği")

Hatalar için ACF Grafiğine bakıldığında:

  • İlk dört gecikmeden üç tanesinin sınırları geçtiği, birinin sınırlar içinde kaldığı görülmektedir.

  • Hataların akgürültü olduğunu söyleyebiliriz. Yani Hatalar arasında ilişki yoktur. Kurulan model tahmin etmede kullanılabilir.

Çarpımsal Winter Yöntemi ile elektrik Tüketim Öngörüsü Grafiği:

plot(forecast(Winters2,h=120),main = "Çarpımsal Winter Yönteminin İlerleyen Yıllar İçin Tahminleri")

5.2.4 SONUÇ

Bir önceki adımda görüldüğü üzere;

  • Hatalar Arasında ilişki olmadığını yani hataların akgürültü olduğunu gördük.

  • Sonuç olarak ABD’deki aylık elektrik tüketimi serisinin Regresyon analizi için kullanılan Çarpımsal Winters Üstel Düzleştirme Yöntemi uygundur.

5.3 Peki hangi model daha iyi?

winters yöntemlerinde kullanılan iki yöntemin de yaptıkları tahminlerin orijinal seri ile karşılaştırmasında uyumlu sonuçlar verdiğini ve bu modellerin tahmin için kullanılabileceğini gördük.

Toplamsal ve Çarpımsal Winters 2022 Tahminleri:

ongoru2022 <- as.data.frame(cbind(ongoru1[["mean"]],ongoru2[["mean"]]))
colnames(ongoru2022) <- c("Toplamsal Winters", "Çarpımsal Winters")
knitr::kable(ongoru2022, align = "c")
Toplamsal Winters Çarpımsal Winters
327234.9 327095.8
337517.9 340700.8
310134.8 311116.3
309123.1 311409.0
286408.9 288255.3
305893.2 307903.8
349325.4 349996.3
393799.4 395149.7
393737.8 393769.1
348913.6 349813.4
317616.4 318125.3
300346.8 300226.6
ongoru111 <- forecast(Winters1,h=120)
ongoru222 <- forecast(Winters2,h=120)
plot( window(ongoru111[["mean"]]), 
      xlab="Zaman", ylab="",lty=1, col=4, lwd=2,main = "Toplamsal ve Çarpımsal Winters Yöntemlerinin 10 Yıllık Tahmin Grafiği")
lines( window(ongoru222[["mean"]]) ,lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(ToplamsalWinters)),
               expression(paste(ÇarpımsalWinters))),
       lwd=c(2,2),lty=c(1,3), cex=0.7, col=c(4,2))

  • İki modelin 2022 yılı elektrik kullanımı tahmin değerlerinin ve 10 yıllık Tahminlerinin yakın olduğunu söyleyebiliriz.

Peki hangi model bu veri için daha iyi?

Bu durumda iki yöntemin de HKO (Hata Kareler Ortalaması) değerlerine bakmamız gerekir.

Toplamsal Winters Yöntemi HKO = 6965.969^2
Çarpımsal Winters Yöntemi HKO = 6176.062^2

Çarpımsal Winters yönteminin HKO’sı, Toplamsal Winters yönteminden küçük olduğu için; Çarpımsal Winters yöntemi seriyi tahmin etmek için daha uygun olan yöntemdir.

5.Bölüm Özet

Bu bölümde; Mevsimsel seriler için kullanılan Üstel Düzleştirme yöntemleri ile ABD’deki aylık elektrik tüketimini tahmin etmeye çalıştık. Uyguladığımız iki model de veriyi tahmin etmede iyi sonuçlar verdi. Bu iki model arasında Hata Kareler Ortalaması daha küçük olan Çarpımsal Winters yönteminin daha iyi olduğu sonucuna vardık.

Sonuç olarak ABD’deki aylık elektrik tüketimi serisinin tahmini için Winters Üstel Düzleştirme yöntemleri uygundur ve kullanılabilir.

BÖLÜM 6: BOX - JENKİNS MODELLERİ

Box-Jenkins modelleri, geçen bölümde anlatılan üstel düzleştirme yöntemlerinin genelleştirilmiş biçimi olup mevsimsel ve mevsimsel olmayan modeller şeklinde ikiye ayrılmaktadır.

Box-Jenkins Yöntemi, sırasıyla seriye uygun modeli belirleme, modelin tahmini, tanısal denetimi ve öngörü işllemlerini içermektedir. Bu işlemlerin yapılabilmesi için öncelikle serinin trentten ve mevsimsel dalgalanmadan arındırılınış olmasına, yani serinin durağan olmasına dikkat edilmelidir.
Durağan olan ya da durağan hale dönüştürülen serinin ACF ve PACF grafiklerine göre seriye uygun olabikecek model belirlenir. Bu belirleme işlemine göre, eğer ACF grafiğindeki ilişki miktarları gecikme sayısı arttıkça yavaş yavaş azalıyor, ama PACF grafiğinde bu azalma bir anda, yani hızlı bir şekilde oluyorsa seriye uygun model otoregresyon modeli olmaktadır. Bunun tam tersi, yani PACF grafiğindeki ilişki miktarları yavaş yavaş azalırken ACF grafiğindeki ilişki miktarları hızlı bir şekilde azalıyorsa model hareketli ortalama modeli olmaktadır. Hem ACF hem de PACF grafıklerinde ilişki miktarlarının azalışı yavaş yavaş olursa model otoregresif hareketli ortalama modeli olmaktadır.
Ancak, bu azalışların hızlı ya da yavaş olduğuna karar verebilmek oldukça güç olup doğru kararların verilebilmesi için de yılların deneyimi gerekmektedir. Bu nedenle, verilen kararın doğru olup olmadığını anlayabilmek için modeldeki katsayıların önemlilik testi sonucuna bakılmaktadır. ACF ve PACF grafıklerinden karar verilen modelin katsayılarından herhangi biri istatistiksel olarak önemsiz ise bu modelin seriye uygun olmadığı anlaşılır. Buradan, grafıklerin yanlış yorumlandığı ortaya çıkar.
Dolayısıyla, model belirleme işleminin devamı olarak modelin katsayılarının tahmini işlemi de önemli olmakta ve bu iki işlem birbirini tamamlamaktadır.

Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş

Buradaki başlıkta; Trende sahip serinin birinci farkını aldığımızda serinin aynı zamanda mevsimselliğe sahip olduğunu ACF grafiğine bakarak açıklamıştık.

Kullandığımız veri mevsimselliğe sahip olduğu için bu bölümde sadece Mevsimsel Box-Jenkins modelleri gösterilecektir.

Mevsimsel Box-Jenkins modelleri üç farklı model barındırır. Bunlar; - mevsimsel otoregresyon (SAR)
- mevsiınsel hareketli ortalama (SMA)
- mevsimsel otoregresif hareketli ortalama (SARMA) modelleridir.

Mevsimsel Box-Jenkins modelleri genelde ARIMA(p,d,q)(P,D,Q)s biçiminde ifade edilmektedir. Burada,
- p otoregresyon (AR) modelinin derecesi,
- d fark alma işlemi sayısı
- q hareketli ortalama (MA) modelinin derecesi
- P mevsimsel otoregresyon (SAR) modelinin derecesi,
- D mevsimsel fark alma işlemi sayısı,
- Q mevsimsel hareketli ortalama (SMA) modelinin derecesi
- s periyot
olmaktadır.

Zaman Serisi Grafiğinin Çizilmesi

ts.plot(veri_ts,gpars=list(xlab="Zaman", ylab="Elektrik Tüketimi"))

Zaman Serisi Grafiğine bakıldığında:

  • Pozitif yönlü artış vardır. Bu yüzden Serinin artan bir trende sahip olduğunu söyleyebiliriz.

  • Seride düzenli dalgalanmaların olduğu görülmektedir. Bu seride mevsimsellik olabileceğini gösterir. Daha kesin sonuç için ACF grafiğini çizelim.

ACF ve PACF Grafiğinin Çizilmesi

Seride trendin olduğunu anlamak için ACF grafiğindeki ilk dört gecikmeye bakmak yeterlidir. İlk dört gecikme sınırlar dışındaysa seri için “trende sahiptir” diyebiliriz.

library(fpp)
Acf(veri_ts,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Orijinal veri ACF Grafiği")

ACF Grafiğine bakıldığında:

  • Tüm gecikmeler (4 gecikme olması yeterlidir) sınırlar dışında olduğu için zaman serisinin trende sahip olduğu söylenebilir. Bu yüzden serinin farkı alınıp durağan hale getirilmelidir.

  • Trend ile birlikte düzenli dalgalanmaların olduğu gözükse de baskın bir mevsimsellikten şu an için bahsedemeyiz.

Pacf(veri_ts,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Orijinal seri PACF Grafiği")

Birinci Farkın Alınması

veri_birinci_fark <- diff(veri_ts, differences = 1)

Farkı alınmış seri için ACF ve PACF:

Acf(veri_birinci_fark,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Birinci Fark sonrası ACF Grafiği")

Pacf(veri_birinci_fark,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Birinci Fark sonrası ACF Grafiği")

Birinci Farkı alınmış seri için ACF Grafiğine bakıldığında:

  • Yine tüm gecikmeler sınırlar dışında olduğu için birinci farkı alınmış zaman serisinin de trende sahip olduğu söylenebilir. Fakat bir öncekine göre bu ACF grafiğinde baskın bir mevsimsellik görülüyor. Dalgalanmalar ve gecikmelerdeki düzenli sıçramalar bunu destekliyor.

###Birinci Mevsimsel Farkın Alınması

veri_ts_mev1 <- diff(veri_birinci_fark,12)

Mevsimsel Farkı alınmış seri için ACF ve PACF:

Acf(veri_ts_mev1,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Birinci Mevsimsel Fark sonrası ACF Grafiği")

Birinci Mevsimsel Farkı alınmış seri için ACF Grafiğine bakıldığında:

  • İlk dört gecikmeden sadece iki tanesi sınırları geçtiği için trendin kaybolduğunu söyleyebiliriz.

  • Düzenli dalgalanmaların dolayısıyla mevsimselliğin de kaybolduğunu söyleyebiliriz. >Seriyi durağan hale getirmek için;

  • Bir kez fark aldığımız için -> d=1

  • Bir kez mevsimsel fark adlığımız için -> D=1

Durağan Serinin ACF ve PACF Yorumu:

Acf(veri_ts_mev1,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Durağan Seri ACF Grafiği")

Pacf(veri_ts_mev1,lag.max = 42,  ylim=c(-1,1), lwd=5,main="Durağan Seri PACF Grafiği")

Durağan hale gelmiş serinin ACF ve PACF Grafiklerine bakıldığında:

  • ACF deki düşüşün daha sert olduğu söylenebilir. (ilk iki gecikmeler nerdeyse aynı seviyede. üçüncü gecikmelere bakıldığında ACF’deki gecikme PACF’ye göre daha fazladır.)

  • Fakat bu yorum kesin ve belirgin bir yorum değildir. Grafiklere bakarak modeli anlayabilmek çok zordur. Bu yüzden en iyi modeli bulmak için auto.arima() fonksiyonu kullanılacaktır.

auto.arima() fonksiyonunun sağlıklı çalışabilmesi için parmatrelerin doğru verilmesi gerekmektedir.

d ve D değerlerinin 1 olduğunu göstermiştik. Şimdi de p, q ve Q değerlerini bulalım:
> ACF grafiğine bakıldığında (SMA modelleri) ilk 3 gecikmede 2 gecikmenin sınırları geçtiği görülüyor. Buradan q değerinin maksimum 2 olacağını söyleyebiliriz.
> PACF grafiğine bakıldığında (SAR modelleri) ilk 3 gecikmede 3 gecikmenin sınırları geçtiği görülüyor. Buradan p değerinin maksimum 3 olacağını söyleyebiliriz.
> P ve Q değerlerinin maksimum 3 olacağını söyleyebiliriz.

Sonuç olarak:
q = 1 ve 2
p = 1, 2, ve 3
d = 1
D = 1
Q = 0, 1, 2 ve 3
P = 0, 1, 2 ve 3 değerlerini alabilirler.

Bu değerler ile en iyi modelin kodlarını yazalım:

En İyi SARIMA Modelinin Bulunması

library(forecast)
en_iyi_model <- auto.arima(veri_ts,max.p = 2,max.q = 2,max.P = 3,max.Q = 3,d=1,D=1,seasonal = TRUE,ic = 'aicc')
summary(en_iyi_model)
## Series: veri_ts 
## ARIMA(2,1,1)(0,1,1)[12] 
## 
## Coefficients:
##          ar1      ar2      ma1     sma1
##       0.6168  -0.0656  -0.9291  -0.7128
## s.e.  0.0485   0.0466   0.0274   0.0261
## 
## sigma^2 = 35020961:  log likelihood = -5803.15
## AIC=11616.3   AICc=11616.41   BIC=11638.07
## 
## Training set error measures:
##                     ME     RMSE      MAE         MPE     MAPE      MASE
## Training set -101.9441 5831.529 4476.961 -0.05593736 1.694013 0.5783401
##                      ACF1
## Training set 0.0009559872

Model Özetine bakıldığında:

  • En iyi model bulunurken; AR1 ve AR2 Otoregresyon modelleri, MA1 ve SMA1 Hareketli ortalama modelleri kullanımıştır.
  • En iyi modelin ARIMA(2,1,1)(0,1,1)[12] olduğu görülmektedir.
  • ARIMA(2,1,1)(0,1,1)[12] modelinin AIC değeri 11616.41’dir.

En iyi Modelin Tahmin, Hata ve Öngörüleri:

Tahmin:

tahmin21<- en_iyi_model[["fitted"]]

Hata:

hata21<- en_iyi_model[["residuals"]]

Tahmin ve Orijinal Serinin Birlikte Çizilmesi:

plot( window(veri_ts), 
      xlab="Zaman (Yıl)", ylab="",lty=1, col=4, lwd=2)
lines( window(tahmin21) ,lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(Elektrik_Tüketimi)),
               expression(paste("ARIMA(2,1,1)(0,1,1)[12]"))),
       lwd=c(2,2),lty=c(1,3), cex=0.7, col=c(4,2))

Zaman Serisi Grafiğine bakıldığında:

  • Tahmin ile orijinal seri arasında uyum olduğu görülmektedir. Yani görsel olarak Box-Jenkins yöntemi ile kurulan modelin tahminlerinin gerçeğe yakın olduğunu söyleyebiliriz.

  • Fakat emin olmak için hataların akgürültü olup olmadığına bakmamız gerekmektedir.

Hatalar Akgürültü mü?

Ho: Hatalar Akgürültüdür.(Hatalar arasında ilişki yoktur.)
H1: Hatalar Akgürültü değildir.(Hatalar arasında ilişki vardır.)

Hatalar için ACF Grafiği:

Acf(hata21, lag.max = 42,  ylim=c(-1,1), lwd=5,main="Hatalar için ACF Grafiği")

Hatalar için ACF Grafiğine bakıldığında:

  • İlk dört gecikmenin de sınırlar içinde kaldığı görülmektedir.

  • Hataların akgürültü olduğunu söyleyebiliriz. Yani Hatalar arasında ilişki yoktur. Kurulan model tahmin etmede kullanılabilir.

ARIMA Modeli ile 2022 yılının elektrik Tüketim Öngörüsü:

ongoru21<- forecast(en_iyi_model, h=12)
knitr::kable(ongoru21[["mean"]],col.names = "ARIMA(2,1,1)(0,1,1)[12] Modelinin 2022 için aylık Elektrik Tüketim Tahminleri",align = "c")
ARIMA(2,1,1)(0,1,1)[12] Modelinin 2022 için aylık Elektrik Tüketim Tahminleri
327038.8
339054.7
308118.3
307515.3
283593.8
301561.5
342029.5
386849.5
387040.2
344870.4
313781.8
296237.2

ARIMA Modeli ile elektrik Tüketim Öngörüsü:

plot(forecast(en_iyi_model,h=120),main = "ARIMA(2,1,1)(0,1,1)[12] modelinin İlerleyen Yıllar İçin Tahminleri")

6.Bölüm Özet

Bu bölümde; Box-Jenkins modelleri ile ABD’deki aylık elektrik tüketimini tahmin etmeye çalıştık. Fonksiyon yardımı ile bulduğumuz en iyi model veriyi tahmin etmede iyi sonuçlar verdi.

Sonuç olarak ABD’deki aylık elektrik tüketimi serisinin tahmini için Box-Jenkins modelleri uygundur ve kullanılabilir.

Veri ve Script dosyası için: GİTHUB REPO