R İle Zaman Serisi Analizi
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:
<- read.csv("https://raw.githubusercontent.com/gungorrbaris/zaman-serisi-analizi-R/main/data/Table_7.6_Electricity_End_Use.csv")
veri ::kable(head(veri), align = "c") knitr
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:
= seq(from = as.Date("1973-01-01"), to = as.Date("2021-11-01"), by = 'month')
tarih $Month <- tarih
veri$Month <-format(veri$Month, "%m-%Y")
veri::kable(head(veri), align = "c") knitr
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")
::kable(head(veri), align = "c") knitr
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ı
<- ts(data = veri$Elektrik_Tuketimi, start = c(1973, 01), end = c(2021, 11), frequency = 12 ) veri_ts
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.
<- diff(veri_ts, differences = 1) veri_birinci_fark
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:
<- diff(veri_birinci_fark,12) veri_ts_mev1
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.
<- tslm(veri_ts~trend) veri_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.
<- veri_ts - veri_trend[["fitted.values"]] periyot_trend
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ı
<- ma(veri_ts, order = 12, centre = TRUE) veri_trend_1
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.
<- veri_ts - veri_trend_1
mevsim3 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.
<-t(matrix(data=mevsim3, nrow = 12))
donemort3head(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ı
<- colMeans(donemort3, na.rm = T) - mean(colMeans(donemort3, na.rm = T))
endeks1
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:
<- matrix(data = endeks1, nrow = 587)
indekshead(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ı
<- veri_ts - indeks trendhata
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.
<-tslm(ts(trendhata)~trend) trend1
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
<- indeks+trend1[["fitted.values"]]
tahmin<- ts(data = tahmin, start = c(1973, 01), end = c(2021, 11), frequency = 12 )
tahmin plot(tahmin,main = "Tahmin Serisi Grafiği")
Hata Bileşenlerini Bulalım:
hata = saf trend serisi - tahmin
<- ts(veri_ts) - ts(tahmin)
hata 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.
<- tslm(veri_ts~trend) veri_trend2
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.
<- veri_ts - veri_trend2[["fitted.values"]] periyot_trend2
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ı
<- ma(veri_ts, order = 12, centre = TRUE) veri_trend_2
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.
<- veri_ts / veri_trend_2
mevsim4 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.
<-t(matrix(data=mevsim4, nrow = 12))
donemort4head(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ı
<- colMeans(donemort4, na.rm = T) / mean(colMeans(donemort4, na.rm = T))
endeks2
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:
<- matrix(data = endeks2, nrow = 587)
indeks2head(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ı
<- veri_ts / indeks2 trendhata2
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.
<-tslm(ts(trendhata2)~trend) trend2
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
<- indeks2*trend2[["fitted.values"]]
tahmin2<- ts(data = tahmin2, start = c(1973, 01), end = c(2021, 11), frequency = 12 )
tahmin2 plot(tahmin2,main = "Tahmin Serisi Grafiği")
Hata Bileşenlerini Bulalım:
hata = saf trend serisi - tahmin
<- ts(veri_ts) - ts(tahmin2)
hata2 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.
<- 1: 1: 587 t
Veride 144 gözlem bulunduğu için bu değerler girilmiştir.
<-sin(2*3.1416*t/12)
sin1<-cos(2*3.1416*t/12) cos1
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:
<- as.data.frame(cbind(veri_ts, t, sin1, cos1))
veri_mev_yeni names(veri_mev_yeni)<- c("y", "t", "sin1", "cos1")
::kable(head(veri_mev_yeni), align = "c") knitr
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.
<-lm(data = veri_mev_yeni, y ~ t+sin1+cos1)
regresyon.model1summary(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ı:
<-sin(2*3.1416*2*t/12)
sin2<-cos(2*3.1416*2*t/12) cos2
Yeni Verinin Oluşturulması:
Yeni veri oluşturulurken birinci harmonikte kullanılan sin ve cos değerleri de eklenir.
<- as.data.frame(cbind(veri_ts, t, sin1, cos1, sin2, cos2))
veri_mev_yeni2
names(veri_mev_yeni2)<- c("y", "t", "sin1", "cos1", "sin2", "cos2")
::kable(head(veri_mev_yeni2), align = "c") knitr
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ı:
<-lm(data= veri_mev_yeni2, y ~ t+sin1+cos1+sin2+cos2)
regresyon.model2summary(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ı:
<-lm(data= veri_mev_yeni2, y ~ t+sin1+cos1+sin2)
regresyon.model3summary(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:
<-predict(regresyon.model3)
tahmin_model3plot.ts(tahmin_model3)
Alt ve Üst Sınırlar:
<-predict(regresyon.model3, interval = 'confidence' ,level = .95)
sinir_model3plot.ts(sinir_model3)
Hata:
<-resid(regresyon.model3)
hata_model3plot.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.
<- 1: 1: 587 t
Veride 144 gözlem bulunduğu için bu değerler girilmiştir.
<-t*sin(2*3.1416*t/12)
s1<-t*cos(2*3.1416*t/12) c1
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:
<- as.data.frame(cbind(veri_ts, t, s1, c1))
veri_mevC_yeni names(veri_mevC_yeni)<- c("y", "t", "s1", "c1")
::kable(head(veri_mevC_yeni), align = "c") knitr
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.
<-lm(data = veri_mevC_yeni, y ~ t+s1+c1)
regresyon.modelC1summary(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ı:
<-t*sin(2*3.1416*2*t/12)
s2<-t*cos(2*3.1416*2*t/12) c2
Yeni Verinin Oluşturulması:
Yeni veri oluşturulurken birinci harmonikte kullanılan sin ve cos değerleri de eklenir.
<- as.data.frame(cbind(veri_ts, t, s1, c1, s2, c2))
veri_mevC_yeni2
names(veri_mevC_yeni2)<- c("y", "t", "s1", "c1", "s2", "c2")
::kable(head(veri_mevC_yeni2), align = "c") knitr
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ı:
<-lm(data= veri_mevC_yeni2, y ~ t+s1+c1+s2+c2)
regresyon.modelC2summary(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ı:
<-t*sin(2*3.1416*3*t/12)
s3<-t*cos(2*3.1416*3*t/12) c3
Yeni Verinin Oluşturulması:
Yeni veri oluşturulurken birinci harmonikte kullanılan sin ve cos değerleri de eklenir.
<- as.data.frame(cbind(veri_ts, t, s1, c1, s2, c2,s3,c3))
veri_mevC_yeni3
names(veri_mevC_yeni3)<- c("y", "t", "s1", "c1", "s2", "c2","s3", "c3")
::kable(head(veri_mevC_yeni3), align = "c") knitr
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ı:
<-lm(data= veri_mevC_yeni3, y ~ t+s1+c1+s2+c2+s3+c3)
regresyon.modelC3summary(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ı:
<-lm(data= veri_mevC_yeni3, y ~ t+s1+c1+s2+c2+c3)
regresyon.modelC4summary(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:
<-predict(regresyon.modelC4)
tahmin_modelC4plot.ts(tahmin_modelC4)
Alt ve Üst Sınırlar:
<-predict(regresyon.modelC4, interval = 'confidence' ,level = .95)
sinir_modelC4plot.ts(sinir_modelC4)
Hata:
<-resid(regresyon.modelC4)
hata_modelC4plot.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.
<- forecast::ets(veri_ts, model = "AAA")
Winters1summary(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.
<- Winters1[["fitted"]] tahmin_win1
Tahmin edilen ilk 12 değeri (2022 yılı ABD elektrik tüketim tahminlerini) görelim:
<- forecast(Winters1,h=12)
ongoru1 ::kable(ongoru1[["mean"]],col.names = "2022 yılı ABD elektrik tüketimi - Toplamsal Winters Tahminleri", align = "c") knitr
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.
<- Winters1[["residuals"]]
hata_win1plot.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.
<- forecast::ets(veri_ts, model = "MAM")
Winters2summary(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.
<- Winters2[["fitted"]] tahmin_win2
Tahmin edilen ilk 12 değeri (2022 yılı ABD elektrik tüketim tahminlerini) görelim:
<- forecast(Winters2,h=12)
ongoru2 ::kable(ongoru2[["mean"]],col.names = "2022 yılı ABD elektrik tüketimi - Çarpımsal Winters Tahminleri", align = "c") knitr
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.
<- Winters2[["residuals"]]
hata_win2plot.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:
<- as.data.frame(cbind(ongoru1[["mean"]],ongoru2[["mean"]]))
ongoru2022 colnames(ongoru2022) <- c("Toplamsal Winters", "Çarpımsal Winters")
::kable(ongoru2022, align = "c") knitr
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 |
<- forecast(Winters1,h=120)
ongoru111 <- forecast(Winters2,h=120)
ongoru222 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ı
<- diff(veri_ts, differences = 1) veri_birinci_fark
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ı
<- diff(veri_birinci_fark,12) veri_ts_mev1
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)
<- auto.arima(veri_ts,max.p = 2,max.q = 2,max.P = 3,max.Q = 3,d=1,D=1,seasonal = TRUE,ic = 'aicc')
en_iyi_model 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:
<- en_iyi_model[["fitted"]] tahmin21
Hata:
<- en_iyi_model[["residuals"]] hata21
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ü:
<- forecast(en_iyi_model, h=12)
ongoru21::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") knitr
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.