---
title: "Zaman Serileri Analizi"
subtitle: "Hafta #2 - Uygulama"
author: "[Dr. Ömer Kara](<mailto:okara@ogu.edu.tr>)"
date: "`r format(Sys.time(), format = '%A, %B %d, %Y')`"
output:
  html_document:
    code_folding: show
    df_print: paged
    fig_caption: yes
    highlight: zenburn
    keep_md: no
    number_sections: yes
    theme: readable
    toc: yes
    toc_depth: 3
    toc_float:
      collapsed: yes
      smooth_scroll: yes
  pdf_document:
    fig_caption: yes
    highlight: zenburn
    toc: yes
    number_sections: yes
editor_options: 
  chunk_output_type: inline
---

<!-- HTML CSS Ayarlaması -->
```{=html}
<style type="text/css">
div.main-container {
    width: 100%;
    max-width: unset;
}
</style>
```
<!-- HTML CSS Ayarlaması -->

```{r Settings.Code.Chunk, include = FALSE, purl = FALSE}
# Değiştirmeyin.
knitr::opts_chunk$set(cache = TRUE, collapse = TRUE, comment = "#>", echo = TRUE, engine = "R", error = FALSE, eval = TRUE, fig.align = "center", fig.height = 5, fig.width = 7, out.width = "100%", highlight = TRUE, include = TRUE, message = TRUE, prompt = FALSE, purl = TRUE, results = "markup", rows.print = 5, strip.white = TRUE, tidy = FALSE, tidy.opts = list(width.cutoff = 80), warning = TRUE)
```
```{r Settings.Mirros, include = FALSE, purl = FALSE, cache = TRUE}
# Değiştirmeyin.
r <- getOption("repos")
r["CRAN"] <- "https://cloud.r-project.org/"
options(repos = r)
```
```{r Settings.Functions, include = FALSE, cache = TRUE}
# Değiştirmeyin.

```

----

**Önemli Notlar**  

- Yanında **Değiştirmeyin** ibaresi bulunan hiçbir kodu ve/veya satırı değiştirmeyin.
- Yazılardakı ve kodlardaki açıklamaları dikkatlice okuyun.
- Kodların sırasını **mümkün olduğunca** değiştirmeyin. Aksi taktirde hata ile karşılaşabilirsiniz.
- [Paketler](#Packages) bölümünde, gerekli [R paketlerini](https://cran.r-project.org/web/packages/available_packages_by_name.html) [`okara`](https://github.com/omerkara/okara) paketindeki `Load.Install` fonksiyonunu kullanarak indirin ve yükleyin.
- [Seed](#Seed) bölümünde, istediğiniz sayıyı kullanabilirsiniz. Rassal olarak seçilen değerler, eğer varsa, seçtiğiniz sayıya göre değişecektir.
- R hakkında daha fazla bilgi için, benim yazdığım [R mini BootCamp](https://akademiekonometri.bitbucket.io/R_mini_BootCamp/R_mini_BootCamp.html) adlı İngilizce kaynaktan faydalanabilirsiniz.

----

# Hazırlık {#Preparation}
## Paketler {#Settings.Packages}
- [R paketlerini](https://cran.r-project.org/web/packages/available_packages_by_name.html) [`okara`](https://github.com/omerkara/okara) paketindeki `Load.Install` fonksiyonunu kullanarak indirin ve/veya yükleyin.
```{r Settings.Packages, cache = TRUE}
# Devtools ve okara paketlerinin yüklenmesi.
if("devtools" %in% rownames(utils::installed.packages()) == FALSE) {suppressWarnings(suppressMessages(install.packages("devtools")))}
suppressWarnings(suppressMessages(library("devtools"))) ## devtools paketi, okara paketinin yüklenmesi için gereklidir.
if("okara" %in% rownames(utils::installed.packages()) == FALSE) {suppressWarnings(suppressMessages(devtools::install_github("omerkara/okara", force = FALSE)))}
suppressWarnings(suppressMessages(library("okara"))) ## okara paketi.

# Gerekli paketlerin yüklenmesi.
Load.Install(c("rstudioapi", "readxl", "plyr", "dplyr", "tidyr", "stringr", "stringi", "Hmisc", "reshape2", "scales", "lubridate", "ggplot2", "xtable", "DT", "latex2exp", "forecast", "WDI", "fpp2", "fpp3", "datasets", "quantmod", "FinYang/tsdl", "ggseas", "slider", "ecm", "wooldridge", "dynlm", "car"))
```

## Seed {#Settings.Seed}
- Aşağıdaki `R kodu` bölümünde istediğiniz sayıyı girebilirsiniz.
```{r Settings.Seed}
set.seed(1234)
```

## Çalışma Klasörü {#Settings.Working.Directory}
- Aşağıdaki `R kodu`, R çalışma klasörünü (yani working directory) sadece bu dosya için, bu dosyanın bilgisayarınızda bulunan lokasyonunda belirliyor.
    + `getwd()` fonksiyonunu kullanarak mevcut çalışma klasörünün hangi lokasyonda belirlendiğine bakabilirsiniz.
```{r Settings.Working.Directory}
# Değiştirmeyin.
main.path <- dirname(rstudioapi::getActiveDocumentContext()$path) ## Bu kod otomatik olarak kaynak dosyasının, yani üzerinde çalıştığınız dosyanın, bilgisayarınızda hangi lokasyonda olduğunu buluyor.
setwd(paste0(main.path)) ## Yeni çalışma klasörü (yani working directory) bu kaynak dosyasının lokasyonunda belirleniyor.
```

----

# Basit Zaman Serisi Modelleri {#Basic.Time.Series.Models}
- Bu bölümde, zaman serileri analizi uygulamalarında yararlı olan ve SEKK Yöntemi ile kolayca tahmin edilebilen **iki basit zaman serisi modelinin** uygulaması gösterilecektir.
    + Statik Modeller
    + Sonlu Dağıtılmış Gecikme Modelleri (Finite Distributed Lag Models) - FDL Modelleri
- Bu modellerin uygulaması için [`wooldridge`](https://cran.r-project.org/web/packages/wooldridge/index.html) R paketinden direkt olarak veri indirip yüklemeye çalışalım.
    + `wooldridge` R paketindeki verileri incelemek için [wooldridge CRAN klavuzuna](https://cran.r-project.org/web/packages/wooldridge/wooldridge.pdf) bakabilirsiniz.
    + Bu verilerin daha detaylı bir gösterimi ve uygulama için ise [bu linke](https://justinmshea.github.io/wooldridge/index.html) bakabilirsiniz.
- `wooldridge` R paketinde mevcut olan veriyi, verinin ismini kullanarak yüklemek için 1 fonksiyon kullanacağız: `data`.
    + `data` fonksiyonu ile istediğimiz veriyi verinin R paketi içindeki ismini kullanarak direkt olarak R'ın içine yükleyebiliriz.
- Ayrıca, yüklediğimiz veri hakkında daha fazla bilgiye sahip olmak için, yani metadatasına ulaşmak için, `?` kodunu kullanabiliriz. Örneğin, `?wage1`:
    + `wooldridge` R paketi içindeki `wage1` verisini `data(wage1)` kodunu kullanarak yüklediğimizi var sayalım.
    + Daha sonra `?wage1` kodunu kullanarak bu veri hakkındaki tüm bilgilere **RStudio üzerindeki help sekmesinden** ulaşabiliriz.

## Statik Model {#Static.Models}
- Statik modeller anlaşılırlığı kolaylaştırmak amacıyla iki ayrı bölümde incelenecektir.
    + Statik Model - Basit Doğrusal Regresyon (BDR)
    + Statik Model - Çoklu Doğrusal Regresyon (ÇDR)
- Statik modeller ile bağımlı değişken $y_{t}$ ve bağımsız değişkenler $x_{t}$ arasındaki **eşanlı ödünümü** inceleyebiliriz.
- Statik modellerin tahmini için temel olarak 1 fonksiyon kullanacağız: `lm`.
    + `lm` fonksiyonu ile formunu belirlediğimiz basit doğrusal regresyon ya da çoklu doğrusal regresyon modellerini kolayca tahmin edebiliriz.

### Statik Model (BDR) {#Static.Models.SLR}
- Örnek olarak, `wooldridge` R paketinden `phillips` verisini yükleyelim.
- `phillips` verisi genel olarak Amerika'daki **enflasyon ve işsizlik** değişkenlerini, ve ayrıca bu değişkenlere ait gecikme ve ilk farklar değerlerini içeriyor. Örneğimizi basitleştirmek için biz sadece bazı değişkenleri kullanacağız.
    + inf ($inf_{t}$): cari dönem enflasyon oranı
    + unem ($unem_{t}$): cari dönem işsizlik oranı
    + cinf ($\Delta{inf_{t}} = inf_{t} - inf_{t-1}$): ilk farklar enflasyon oranı
    + cunem ($\Delta{unem_{t}} = unem_{t} - unem_{t-1}$): ilk farklar işsizlik oranı
- Daha sonra yüklediğimiz bu verinin metadatasını ve yapısını inceleyelim.
- Son olarak yüklediğimiz veriyi kullanarak aşağıdaki statik modelleri tahmin edelim.
    + Model 1 (Statik): $inf_{t} = \beta_{0} + \beta_{1}unem_{t} + u_{t}$
    + Model 2 (Statik): $\Delta{inf_{t}} = \beta_{0} + \beta_{1}\Delta{unem_{t}} + u_{t}$
```{r Static.Models.SLR}
data(phillips) ## Datayı yüklüyoruz.
?phillips ## Datanın metadatası.

data <- phillips ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.
str(data) ## Datanın yapısını inceleyelim.
data ## Datanın yapısını inceleyelim.

# Cari dönemde enflasyon ve işsizlik arasındaki statik model.
model.1 <- lm(data = data, formula = inf ~ unem, singular.ok = FALSE)
summary(model.1) ## Tahmin özeti.

# İlk farklar enflasyon ve işsizlik arasındaki statik model.
model.2 <- lm(data = data, formula = cinf ~ cunem, singular.ok = FALSE)
summary(model.2) ## Tahmin özeti.
```

### Statik Model (ÇDR) {#Static.Models.MLR}
- Örnek olarak, `wooldridge` R paketinden `intdef` verisini yükleyelim.
- `intdef` verisi genel olarak Amerika'daki **faiz oranı, enflasyon ve bütçe açığı** değişkenlerini, ve ayrıca bu değişkenlere ait gecikme ve ilk farklar değerlerini içeriyor.
    + i3 ($i3_{t}$): cari dönem 3 aylık devlet tahvili faiz oranı
    + inf ($inf_{t}$): cari dönem enflasyon oranı
    + def ($def_{t}$): cari dönem bütçe açığı (GSYH'ya oran olarak)
- Daha sonra yüklediğimiz bu verinin metadatasını ve yapısını inceleyelim.
- Son olarak yüklediğimiz veriyi kullanarak aşağıdaki modeli tahmin edelim.
    + Model: $i3_{t} = \beta_{0} + \beta_{1}inf_{t} + \beta_{2}def_{t} + u_{t}$
```{r Static.Models.MLR}
data(intdef) ## Datayı yüklüyoruz.
?intdef ## Datanın metadatası.

data <- intdef ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.
str(data) ## Datanın yapısını inceleyelim.
data ## Datanın yapısını inceleyelim.

# Cari dönemde faiz, enflasyon ve bütçe açığı arasındaki statik model.
model <- lm(data = data, formula = i3 ~ inf + def, singular.ok = FALSE)
summary(model) ## Tahmin özeti.
```

## FDL Modeli {#FDL.Models}
- FDL modeller anlaşılırlığı kolaylaştırmak amacıyla iki ayrı bölümde incelenecektir.
    + 1. Dereceden FDL Modeli: FDL$_{(1)}$
    + 2. Dereceden FDL Modeli: FDL$_{(2)}$
- FDL modelleri ile **etki çarpanı** ve **uzun dönem çarpanı** değerlerini hesaplayabiliriz.
- FDL modellerinin tahmini için temel olarak 1 fonksiyon kullanacağız: `dynlm`.
    + `dynlm` fonksiyonu ile formunu belirlediğimiz FDL modellerini kolayca tahmin edebiliriz.
    + `dynlm` fonksiyonunun kullanımı `lm` fonksiyonuna çok benzerdir. Fakat ek olarak, gecikmeli değişkenlerin kullanımı için ekstra kodlar kullanmaya izin verir.
    + `dynlm` fonksiyonunda sadece zaman serisi verisi kullanılabilir. Bu nedenle, elinizdeki verinin zaman serisi objesi olması şarttır. Bu amaçla biz, elimizdeki veriyi zaman serisi objesine çevirmek için `ts` fonksiyonunu kullanacağız.

### FDL$_{(1)}$ {#FDL.Models.1}
- Örnek olarak, `wooldridge` R paketinden `phillips` verisini yükleyelim.
- `phillips` verisi genel olarak Amerika'daki **enflasyon ve işsizlik** değişkenlerini, ve ayrıca bu değişkenlere ait gecikme ve ilk farklar değerlerini içeriyor. Örneğimizi basitleştirmek için biz sadece bazı değişkenleri kullanacağız.
    + inf ($inf_{t}$): cari dönem enflasyon oranı
    + unem ($unem_{t}$): cari dönem işsizlik oranı
- Daha sonra yüklediğimiz veriyi kullanarak aşağıdaki FDL$_{(1)}$ modelini tahmin edelim.
    + Model (FDL$_{(1)}$): $inf_{t} = \alpha_{0} + \delta_{0}unem_{t} + \delta_{1}unem_{t-1} + u_{t}$
- Son olarak model tahminini kullanarak etki çarpanı ve uzun dönem çarpanı değerlerini hesaplayalım.
    + Etki çarpanı: $\hat{\delta}_{0}$
    + Uzun dönem çarpanı: $\hat{\delta}_{0} + \hat{\delta}_{1}$
```{r FDL.Models.1}
data(phillips) ## Datayı yüklüyoruz.
?phillips ## Datanın metadatası.

data <- phillips ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.
data.ts <- ts(data, start = 1948) ## Data 1948 yılından itibaren başlamış.

# Model: Enflasyon ve işsizlik arasındaki FDL(1) modeli.
model <- dynlm(data = data.ts, formula = inf ~ unem + L(unem, 1), singular.ok = FALSE)
summary(model) ## Tahmin özeti.

# Parametre tahminleri.
coef(model)

# Etki çarpanının hesaplanması.
coef(model)[[2]]

# Uzun dönem çarpanının hesaplanması.
coef(model)[[2]] + coef(model)[[3]]
```

### FDL$_{(2)}$ {#FDL.Models.2}
- Örnek olarak, `wooldridge` R paketinden `fertil3` verisini yükleyelim.
- `fertil3` verisi genel olarak Amerika'daki **doğurganlık, vergi muafiyeti, savaş ve doğum kontrol hapı** değişkenlerini, ve ayrıca bu değişkenlere ait gecikme ve ilk farklar değerlerini içeriyor. Örneğimizi basitleştirmek için biz sadece bazı değişkenleri kullanacağız.
    + gfr ($gfr_{t}$): doğurganlık oranı (doğurganlık yaşındaki 1000 kadına düşen bebek sayısı)
    + pe ($pe_{t}$): çocuk sahibi olmayı özendirmek için getirilen vergi muafiyeti ($)
    + ww2 ($ww2_{t}$): II. Dünya Savaşı yıllarını belirten kukla değişken (1941-1945 yılları için 1 diğer yıllar için 0)
    + pill ($pill_{t}$): doğum kontrol hapı kullanımının yasal olduğu yılları belirten kukla değişken (1963 ve sonrası için 1 diğer yıllar için 0)
- Sonra yüklediğimiz bu verinin metadatasını ve yapısını inceleyelim.
- Daha sonra yüklediğimiz veriyi kullanarak aşağıdaki FDL$_{(2)}$ modellerini tahmin edelim.
    + Model 1 (FDL$_{(2)}$): $gfr_{t} = \alpha_{0} + \delta_{0}pe_{t} + \delta_{1}pe_{t-1} + \delta_{2}pe_{t-2} + u_{t}$
    + Model 2 (FDL$_{(2)}$): $gfr_{t} = \alpha_{0} + \delta_{0}pe_{t} + \delta_{1}pe_{t-1} + \delta_{2}pe_{t-2} + \beta_{1}ww2_{t} + \beta_{2}pill_{t} + u_{t}$
- Son olarak model tahminlerini kullanarak her model için etki çarpanı ve uzun dönem çarpanı değerlerini hesaplayalım.
    + Model 1'de denklemin sağ tarafında tek bir bağımsız değişken ve ona ait gecikme değerleri vardır.
        * Etki çarpanı: $\hat{\delta}_{0}$
        * Uzun dönem çarpanı: $\hat{\delta}_{0} + \hat{\delta}_{1} + \hat{\delta}_{2}$
    + Model 2'de denklemin sağ tarafında bir bağımsız değişken ve ona ait gecikme değerlerinin olmasının yanı sıra başka bağımsız değişkenler de vardır. Yani, modelde bağımlı değişkeni etkileyen diğer faktörler de kontrol edilmiştir.
        * Etki çarpanı: $\hat{\delta}_{0}$
        * Uzun dönem çarpanı: $\hat{\delta}_{0} + \hat{\delta}_{1} + \hat{\delta}_{2}$
```{r FDL.Models.2}
data(fertil3) ## Datayı yüklüyoruz.
?fertil3 ## Datanın metadatası.

data <- fertil3 ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.
str(data) ## Datanın yapısını inceleyelim.
data ## Datanın yapısını inceleyelim.
data.ts <- ts(data, start = 1913) ## Data 1913 yılından itibaren başlamış.

# Model 1: Doğurganlık ve vergi muafiyeti arasındaki FDL(2) modeli.
model.1 <- dynlm(data = data.ts, formula = gfr ~ pe + L(pe, 1) + L(pe, 2), singular.ok = FALSE)
summary(model.1) ## Tahmin özeti.

# Model 1: Parametre tahminleri.
coef(model.1)

# Model 1: Etki çarpanının hesaplanması.
coef(model.1)[[2]]

# Model 1: Uzun dönem çarpanının hesaplanması.
coef(model.1)[[2]] + coef(model.1)[[3]] + coef(model.1)[[4]]

# Model 2: Doğurganlık, vergi muafiyeti, savaş ve doğurganlık hapı arasındaki FDL(2) modeli.
model.2 <- dynlm(data = data.ts, formula = gfr ~ pe + L(pe, 1) + L(pe, 2) + ww2 + pill, singular.ok = FALSE)
summary(model.2) ## Tahmin özeti.

# Model 2: Parametre tahminleri.
coef(model.2)

# Model 2: Etki çarpanının hesaplanması.
coef(model.2)[[2]]

# Model 2: Uzun dönem çarpanının hesaplanması.
coef(model.2)[[2]] + coef(model.2)[[3]] + coef(model.2)[[4]]
```

<!-- ================================ SON ================================== -->
