Ö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 bölümünde, gerekli R paketlerini okara paketindeki Load.Install fonksiyonunu kullanarak indirin ve yükleyin.
  • 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 adlı İngilizce kaynaktan faydalanabilirsiniz.

1 Hazırlık

1.1 Paketler

  • R paketlerini okara paketindeki Load.Install fonksiyonunu kullanarak indirin ve/veya yükleyin.
# 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", "AER", "stargazer"))
#> Warning: package 'tidyr' was built under R version 4.3.2
#> Warning: package 'ggplot2' was built under R version 4.3.2
#> Warning: package 'DT' was built under R version 4.3.2
#> Warning: package 'tsibble' was built under R version 4.3.2
#> Warning: package 'fabletools' was built under R version 4.3.2
#> Warning: package 'quantmod' was built under R version 4.3.2
#> Warning: package 'ecm' was built under R version 4.3.2
#> Warning: package 'AER' was built under R version 4.3.2
#> Warning: package 'survival' was built under R version 4.3.2

1.2 Seed

  • Aşağıdaki R kodu bölümünde istediğiniz sayıyı girebilirsiniz.
set.seed(1234)

1.3 Çalışma Klasörü

  • 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.
# 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.

2 Hatırlatma

  • Bu alt bölümde, daha önceden bahsedilen bazı konular kısaca hatırlatılmıştır.

2.1 Data Yükleme

  • Bu modellerin uygulaması için R paketlerinden direkt olarak veri indirip yüklemeye çalışalım.
  • R paketlerinin içinde olan verileri toplu olarak görmek için Vincent Arel-Bundock tarafından hazırlanan web sitesini inceleyebilirsiniz.
  • wooldridge R paketindeki verileri incelemek için wooldridge CRAN klavuzuna bakabilirsiniz.
    • Bu verilerin daha detaylı bir gösterimi ve uygulama için ise bu linke bakabilirsiniz.
  • R paketlerinde 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, wooldridge R paketindeki wage1 datası için:
    • 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.

2.2 Statik Model

  • 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.

2.3 FDL Modeli

  • 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.

3 Zaman Serisi Modeli: Çıkarsama

  • Bu alt bölümde, zaman serileri modellerinde çıkarsama konusu iki basit zaman serisi modeli kullanılarak uygulamalı olarak gösterilecektir.
    • Statik Modeller
    • Sonlu Dağıtılmış Gecikme Modelleri (Finite Distributed Lag Models) - FDL Modelleri

3.1 \(t\)-testi

  • Basit zaman serisi modellerinde \(t\)-testi uygulamak için 3 farklı fonksiyon kullanabiliriz.
    • pt fonksiyonu ile model tahmininden elde ettiğimiz \(t\)-istatistiğine ait \(p\)-değerini çift ve tek kuyruklu hipotez testleri için hesaplayabiliriz.
    • okara R paketindeki hoCoef fonksiyonunda model tahminini kullanarak çift ve tek kuyruklu hipotez testleri uygulayabiliriz.
    • car R paketindeki linearHypothesis fonksiyonunda model tahminini kullanarak çift kuyruk hipotez testini uygulayabiliriz.

3.1.1 Örnek: 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 yıllık olarak 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ı
  • Sonra yüklediğimiz bu verinin metadatasını ve yapısını inceleyelim.
  • Daha sonra yüklediğimiz veriyi kullanarak aşağıdaki statik modeli tahmin edelim.
    • Model (Statik): \(inf_{t} = \beta_{0} + \beta_{1}unem_{t} + u_{t}\)
  • Son olarak model tahminini kullanarak aşağıdaki hipotezleri farklı fonksiyonlarla test edelim.
    • Hipotez Testi 1 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{1} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{1} \neq 0\)
    • Hipotez Testi 2 (Sol Kuyruk \(t\)-testi): \(H_{0}: \beta_{1} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{1} < 0\)
    • Hipotez Testi 3 (Sağ Kuyruk \(t\)-testi): \(H_{0}: \beta_{1} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{1} > 0\)
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.frame':    56 obs. of  7 variables:
#>  $ year  : int  1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 ...
#>  $ unem  : num  3.8 5.9 5.3 3.3 3 ...
#>  $ inf   : num  8.1 -1.2 1.3 7.9 1.9 ...
#>  $ inf_1 : num  NA 8.1 -1.2 1.3 7.9 ...
#>  $ unem_1: num  NA 3.8 5.9 5.3 3.3 ...
#>  $ cinf  : num  NA -9.3 2.5 6.6 -6 ...
#>  $ cunem : num  NA 2.1 -0.6 -2 -0.3 ...
#>  - attr(*, "time.stamp")= chr "25 Jun 2011 23:03"
data ## Datanın yapısını inceleyelim.
# Cari dönemde enflasyon ve işsizlik arasındaki statik model.
model <- lm(data = data, formula = inf ~ unem, singular.ok = FALSE)
summary(model) ## Tahmin özeti.
#> 
#> Call:
#> lm(formula = inf ~ unem, data = data, singular.ok = FALSE)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -5.2176 -1.7812 -0.6659  1.1473  8.8795 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)  
#> (Intercept)   1.0536     1.5480   0.681   0.4990  
#> unem          0.5024     0.2656   1.892   0.0639 .
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 2.972 on 54 degrees of freedom
#> Multiple R-squared:  0.06215,    Adjusted R-squared:  0.04479 
#> F-statistic: 3.579 on 1 and 54 DF,  p-value: 0.06389
# Parametre tahminleri, standart hataları, t-istatistikleri ve p-değerleri.
coef(summary(model))
#>              Estimate Std. Error   t value   Pr(>|t|)
#> (Intercept) 1.0535656  1.5479571 0.6806168 0.49902205
#> unem        0.5023782  0.2655624 1.8917519 0.06389167
# pt fonksiyonu ile çift ve tek kuyruklu t-testi. Hesaplanan p-değeridir.
2*pt(q = abs(coef(summary(model))[2, 3]), df = model$df.residual, lower.tail = FALSE) ## Çift kuyruklu t-testi: H0: Beta1 = 0 vs H1: Beta1 != 0
#> [1] 0.06389167
pt(q = coef(summary(model))[2, 3], df = model$df.residual, lower.tail = TRUE) ## Sol kuyruk t-testi: H0: Beta1 = 0 vs H1: Beta1 < 0
#> [1] 0.9680542
pt(q = coef(summary(model))[2, 3], df = model$df.residual, lower.tail = FALSE) ## Sağ kuyruklu t-testi: H0: Beta1 = 0 vs H1: Beta1 > 0
#> [1] 0.03194584
# hoCoef fonksiyonu ile çift ve tek kuyruklu t-testi.
hoCoef(model, term = 2, bo = 0, alt = c("two.sided")) ## Çift kuyruklu t-testi: H0: Beta1 = 0 vs H1: Beta1 != 0 
#>  term Ho Value  Estimate Std. Error        T df    p value
#>     2        0 0.5023782  0.2655624 1.891752 54 0.06389167
hoCoef(model, term = 2, bo = 0, alt = c("less")) ## Sol kuyruk t-testi: H0: Beta1 = 0 vs H1: Beta1 < 0
#>  term Ho Value  Estimate Std. Error        T df   p value
#>     2        0 0.5023782  0.2655624 1.891752 54 0.9680542
hoCoef(model, term = 2, bo = 0, alt = c("greater")) ## Sağ kuyruklu t-testi: H0: Beta1 = 0 vs H1: Beta1 > 0
#>  term Ho Value  Estimate Std. Error        T df    p value
#>     2        0 0.5023782  0.2655624 1.891752 54 0.03194584
# linearHypothesis fonksiyonu ile çift kuyruklu t-testi.
linearHypothesis(model, c("unem = 0")) ## linearHypothesis fonksiyonu F-istatistiği ve ona ait p-değerini veriyor. Tek bir kısıt için hesaplanan F-istatistiğinin, aynı tek kısıt için hesaplanan t-istatistiğinin karesine eşit olduğunu unutmayın (ayrıca her iki testin sonucu da aynıdır).

3.1.2 Örnek: 2

  • Ö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 yıllık olarak içeriyor. Örneğimizi basitleştirmek için biz sadece bazı değişkenleri kullanacağız.
    • 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)
  • Sonra yüklediğimiz bu verinin metadatasını ve yapısını inceleyelim.
  • Daha sonra yüklediğimiz veriyi kullanarak aşağıdaki statik modeli tahmin edelim.
    • Model (Statik): \(i3_{t} = \beta_{0} + \beta_{1}inf_{t} + \beta_{2}def_{t} + u_{t}\)
  • Son olarak model tahminini kullanarak aşağıdaki hipotezleri farklı fonksiyonlarla test edelim.
    • Hipotez Testi 1 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{2} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{2} \neq 0\)
    • Hipotez Testi 2 (Sol Kuyruk \(t\)-testi): \(H_{0}: \beta_{2} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{2} < 0\)
    • Hipotez Testi 3 (Sağ Kuyruk \(t\)-testi): \(H_{0}: \beta_{2} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{2} > 0\)
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.frame':    56 obs. of  13 variables:
#>  $ year : int  1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 ...
#>  $ i3   : num  1.04 1.1 1.22 1.55 1.77 ...
#>  $ inf  : num  8.1 -1.2 1.3 7.9 1.9 ...
#>  $ rec  : num  16.2 14.5 14.4 16.1 19 ...
#>  $ out  : num  11.6 14.3 15.6 14.2 19.4 ...
#>  $ def  : num  -4.6 -0.2 1.2 -1.9 0.4 ...
#>  $ i3_1 : num  NA 1.04 1.1 1.22 1.55 ...
#>  $ inf_1: num  NA 8.1 -1.2 1.3 7.9 ...
#>  $ def_1: num  NA -4.6 -0.2 1.2 -1.9 ...
#>  $ ci3  : num  NA 0.06 0.12 0.33 0.22 ...
#>  $ cinf : num  NA -9.3 2.5 6.6 -6 ...
#>  $ cdef : num  NA 4.4 1.4 -3.1 2.3 ...
#>  $ y77  : int  0 0 0 0 0 0 0 0 0 0 ...
#>  - attr(*, "time.stamp")= chr "25 Jun 2011 23:03"
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.
#> 
#> Call:
#> lm(formula = i3 ~ inf + def, data = data, singular.ok = FALSE)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -3.9948 -1.1694  0.1959  0.9602  4.7224 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)  1.73327    0.43197   4.012  0.00019 ***
#> inf          0.60587    0.08213   7.376 1.12e-09 ***
#> def          0.51306    0.11838   4.334 6.57e-05 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 1.843 on 53 degrees of freedom
#> Multiple R-squared:  0.6021, Adjusted R-squared:  0.5871 
#> F-statistic: 40.09 on 2 and 53 DF,  p-value: 2.483e-11
# Parametre tahminleri, standart hataları, t-istatistikleri ve p-değerleri.
coef(summary(model))
#>              Estimate Std. Error  t value     Pr(>|t|)
#> (Intercept) 1.7332658 0.43196700 4.012496 1.897506e-04
#> inf         0.6058659 0.08213481 7.376481 1.117901e-09
#> def         0.5130579 0.11838406 4.333843 6.572384e-05
# pt fonksiyonu ile çift ve tek kuyruklu t-testi. Hesaplanan p-değeridir.
2*pt(q = abs(coef(summary(model))[3, 3]), df = model$df.residual, lower.tail = FALSE) ## Çift kuyruklu t-testi: H0: Beta2 = 0 vs H1: Beta2 != 0 
#> [1] 6.572384e-05
pt(q = coef(summary(model))[3, 3], df = model$df.residual, lower.tail = TRUE) ## Sol kuyruk t-testi: H0: Beta2 = 0 vs H1: Beta2 < 0
#> [1] 0.9999671
pt(q = coef(summary(model))[3, 3], df = model$df.residual, lower.tail = FALSE) ## Sağ kuyruklu t-testi: H0: Beta2 = 0 vs H1: Beta2 > 0
#> [1] 3.286192e-05
# hoCoef fonksiyonu ile çift ve tek kuyruklu t-testi.
hoCoef(model, term = 3, bo = 0, alt = c("two.sided")) ## Çift kuyruklu t-testi: H0: Beta2 = 0 vs H1: Beta2 != 0 
#>  term Ho Value  Estimate Std. Error        T df      p value
#>     3        0 0.5130579  0.1183841 4.333843 53 6.572384e-05
hoCoef(model, term = 3, bo = 0, alt = c("less")) ## Sol kuyruk t-testi: H0: Beta2 = 0 vs H1: Beta2 < 0
#>  term Ho Value  Estimate Std. Error        T df   p value
#>     3        0 0.5130579  0.1183841 4.333843 53 0.9999671
hoCoef(model, term = 3, bo = 0, alt = c("greater")) ## Sağ kuyruklu t-testi: H0: Beta2 = 0 vs H1: Beta2 > 0
#>  term Ho Value  Estimate Std. Error        T df      p value
#>     3        0 0.5130579  0.1183841 4.333843 53 3.286192e-05
# linearHypothesis fonksiyonu ile çift kuyruklu t-testi.
linearHypothesis(model, c("def = 0")) ## linearHypothesis fonksiyonu F-istatistiği ve ona ait p-değerini veriyor. Tek bir kısıt için hesaplanan F-istatistiğinin, aynı tek kısıt için hesaplanan t-istatistiğinin karesine eşit olduğunu unutmayın (ayrıca her iki testin sonucu da aynıdır).

3.2 \(F\)-testi

  • Basit zaman serisi modellerinde \(F\)-testi uygulamak için 2 farklı fonksiyon kullanabiliriz.
    • pf fonksiyonu ile model tahmininden elde ettiğimiz \(f\)-istatistiğine ait \(p\)-değerini sadece modelin genel anlamlılığını test eden hipotez testi için hesaplayabiliriz.
    • car R paketindeki linearHypothesis fonksiyonunda model tahminini kullanarak birçok farklı çoklu kısıt için hipotez testi uygulayabiliriz.

3.2.1 Örnek: 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 yıllık olarak 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\(_{(2)}\) modelini tahmin edelim.
    • Model (FDL\(_{(2)}\)): \(inf_{t} = \alpha_{0} + \delta_{0}unem_{t} + \delta_{1}unem_{t-1} + \delta_{2}unem_{t-2} + u_{t}\)
  • Son olarak model tahminini kullanarak aşağıdaki hipotezleri farklı fonksiyonlarla test edelim.
    • Modelin istatistiki olarak genel anlamlılığının testi.
      • Hipotez Testi 1 (\(F\)-testi): \(H_{0}: \delta_{0} = \delta_{1} = \delta_{2} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
    • Tüm gecikmeli değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
      • Hipotez Testi 2 (\(F\)-testi): \(H_{0}: \delta_{1} = \delta_{2} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
      • Eğer boş hipotez reddedilirse, FDL\(_{(2)}\) modeline ihtiyaç vardır. Aksi durumda statik model kullanılmalıdır.
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(2) modeli.
model <- dynlm(data = data.ts, formula = inf ~ unem + L(unem, 1) + L(unem, 2), singular.ok = FALSE)
summary(model) ## Tahmin özeti.
#> 
#> Time series regression with "ts" data:
#> Start = 1950, End = 2003
#> 
#> Call:
#> dynlm(formula = inf ~ unem + L(unem, 1) + L(unem, 2), data = data.ts, 
#>     singular.ok = FALSE)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -3.8917 -1.7375 -0.8202  1.1082  8.1030 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)  
#> (Intercept)  -0.1246     1.6892  -0.074   0.9415  
#> unem          0.9032     0.4021   2.246   0.0291 *
#> L(unem, 1)   -0.8563     0.5257  -1.629   0.1096  
#> L(unem, 2)    0.6681     0.3867   1.728   0.0902 .
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 2.812 on 50 degrees of freedom
#> Multiple R-squared:  0.1496, Adjusted R-squared:  0.09861 
#> F-statistic: 2.933 on 3 and 50 DF,  p-value: 0.04237
# Modelin istatistiki olarak genel anlamlılığı için F-testi ve serbestlik dereceleri.
summary(model)$fstatistic
#>     value     numdf     dendf 
#>  2.932693  3.000000 50.000000
# Hipotez Testi 1: pf fonksiyonu ile modelin istatistiki olarak genel anlamlılığının testi. Hesaplanan p-değeridir.
pf(q = summary(model)$fstatistic[1], df1 = summary(model)$fstatistic[2], df2 = summary(model)$fstatistic[3], lower.tail = FALSE)
#>      value 
#> 0.04236599
# Hipotez Testi 1: linearHypothesis fonksiyonu ile modelin istatistiki olarak genel anlamlılığının testi.
linearHypothesis(model, c("unem = 0", "L(unem, 1) = 0", "L(unem, 2) = 0"))
# Hipotez Testi 2: linearHypothesis fonksiyonu ile tüm gecikmeli değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
linearHypothesis(model, c("L(unem, 1) = 0", "L(unem, 2) = 0")) ## p-değeri %5 anlamlılık düzeyinden büyük olduğundan boş hipotez reddedilemez ve statik model kullanılmalıdır.

3.2.2 Örnek: 2

  • Örnek olarak, wooldridge R paketinden fertil3 verisini yükleyelim.
  • fertil3 verisi genel olarak Amerika’daki doğurganlık ve vergi muafiyeti değişkenlerini, ve ayrıca bu değişkenlere ait gecikme ve ilk farklar değerlerini yıllık olarak 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 ($)
  • Sonra yüklediğimiz bu verinin metadatasını ve yapısını inceleyelim.
  • Daha sonra yüklediğimiz veriyi kullanarak aşağıdaki FDL\(_{(3)}\) modelini tahmin edelim.
    • Model (FDL\(_{(3)}\)): \(gfr_{t} = \alpha_{0} + \delta_{0}pe_{t} + \delta_{1}pe_{t-1} + \delta_{2}pe_{t-2} + \delta_{3}pe_{t-3} + u_{t}\)
  • Son olarak model tahminini kullanarak aşağıdaki hipotezleri farklı fonksiyonlarla test edelim.
    • Modelin istatistiki olarak genel anlamlılığının testi.
      • Hipotez Testi 1 (\(F\)-testi): \(H_{0}: \delta_{0} = \delta_{1} = \delta_{2} = \delta_{3} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
    • İkinci ve üçüncü gecikmeli değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
      • Hipotez Testi 2 (\(F\)-testi): \(H_{0}: \delta_{2} = \delta_{3} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
    • Tüm gecikmeli değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
      • Hipotez Testi 3 (\(F\)-testi): \(H_{0}: \delta_{1} = \delta_{2} = \delta_{3} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
      • Eğer boş hipotez reddedilirse, FDL\(_{(3)}\) modeline ihtiyaç vardır. Aksi durumda statik model kullanılmalıdır.
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.frame':    72 obs. of  24 variables:
#>  $ gfr   : num  125 127 125 123 121 ...
#>  $ pe    : num  0 0 0 0 19.3 ...
#>  $ year  : int  1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 ...
#>  $ t     : int  1 2 3 4 5 6 7 8 9 10 ...
#>  $ tsq   : int  1 4 9 16 25 36 49 64 81 100 ...
#>  $ pe_1  : num  NA 0 0 0 0 ...
#>  $ pe_2  : num  NA NA 0 0 0 ...
#>  $ pe_3  : num  NA NA NA 0 0 ...
#>  $ pe_4  : num  NA NA NA NA 0 ...
#>  $ pill  : int  0 0 0 0 0 0 0 0 0 0 ...
#>  $ ww2   : int  0 0 0 0 0 0 0 0 0 0 ...
#>  $ tcu   : num  1 8 27 64 125 216 343 512 729 1000 ...
#>  $ cgfr  : num  NA 1.9 -1.6 -1.6 -2.4 ...
#>  $ cpe   : num  NA 0 0 0 19.3 ...
#>  $ cpe_1 : num  NA NA 0 0 0 ...
#>  $ cpe_2 : num  NA NA NA 0 0 ...
#>  $ cpe_3 : num  NA NA NA NA 0 ...
#>  $ cpe_4 : num  NA NA NA NA NA ...
#>  $ gfr_1 : num  NA 125 127 125 123 ...
#>  $ cgfr_1: num  NA NA 1.9 -1.6 -1.6 ...
#>  $ cgfr_2: num  NA NA NA 1.9 -1.6 ...
#>  $ cgfr_3: num  NA NA NA NA 1.9 ...
#>  $ cgfr_4: num  NA NA NA NA NA ...
#>  $ gfr_2 : num  NA NA 125 127 125 ...
#>  - attr(*, "time.stamp")= chr "25 Jun 2011 23:03"
data ## Datanın yapısını inceleyelim.
data.ts <- ts(data, start = 1913) ## Data 1913 yılından itibaren başlamış.

# Model : Vergi muafiyeti ve doğurganlık arasındaki FDL(3) modeli.
model <- dynlm(data = data.ts, formula = gfr ~ pe + L(pe, 1) + L(pe, 2) + L(pe, 3), singular.ok = FALSE)
summary(model) ## Tahmin özeti.
#> 
#> Time series regression with "ts" data:
#> Start = 1916, End = 1984
#> 
#> Call:
#> dynlm(formula = gfr ~ pe + L(pe, 1) + L(pe, 2) + L(pe, 3), data = data.ts, 
#>     singular.ok = FALSE)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -29.665 -14.923  -0.897  17.835  31.903 
#> 
#> Coefficients:
#>              Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) 91.496540   4.597898  19.900   <2e-16 ***
#> pe          -0.001629   0.139785  -0.012    0.991    
#> L(pe, 1)    -0.038276   0.218512  -0.175    0.862    
#> L(pe, 2)     0.109043   0.218534   0.499    0.620    
#> L(pe, 3)    -0.041411   0.137696  -0.301    0.765    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 19.66 on 64 degrees of freedom
#> Multiple R-squared:  0.01344,    Adjusted R-squared:  -0.04822 
#> F-statistic: 0.2179 on 4 and 64 DF,  p-value: 0.9275
# Modelin istatistiki olarak genel anlamlılığı için F-testi ve serbestlik dereceleri.
summary(model)$fstatistic
#>      value      numdf      dendf 
#>  0.2179175  4.0000000 64.0000000
# Hipotez Testi 1: pf fonksiyonu ile modelin istatistiki olarak genel anlamlılığının testi. Hesaplanan p-değeridir.
pf(q = summary(model)$fstatistic[1], df1 = summary(model)$fstatistic[2], df2 = summary(model)$fstatistic[3], lower.tail = FALSE)
#>     value 
#> 0.9275263
# Hipotez Testi 1: linearHypothesis fonksiyonu ile modelin istatistiki olarak genel anlamlılığının testi.
linearHypothesis(model, c("pe = 0", "L(pe, 1) = 0", "L(pe, 2) = 0", "L(pe, 3) = 0"))
# Hipotez Testi 2: linearHypothesis fonksiyonu ile 2. ve 3. gecikmeli değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
linearHypothesis(model, c("L(pe, 2) = 0", "L(pe, 3) = 0")) ## p-değeri %5 anlamlılık düzeyinden büyük olduğundan boş hipotez reddedilemez ve bu nedenle 2. ve 3. gecikmeli değişkenler modelde kullanılmamalıdır.
# Hipotez Testi 3: linearHypothesis fonksiyonu ile tüm gecikmeli değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
linearHypothesis(model, c("L(pe, 1) = 0", "L(pe, 2) = 0", "L(pe, 3) = 0")) ## p-değeri %5 anlamlılık düzeyinden büyük olduğundan boş hipotez reddedilemez ve statik model kullanılmalıdır.

4 Fonksiyonel Form

  • Bu alt bölümde önce, yatay-kesit analizinde gördüğümüz fonksiyonel formlar ve parametre yorumlamaları statik zaman serisi modeli kullanılarak hatırlatılacaktır.
    • Düzey-Düzey Fonksiyonel Formu: \(y_{t} = \beta_{0} + \beta_{1}x_{t} + u_{t} \quad \longrightarrow \quad \Delta{y_{t}} = \beta_{1}\Delta{x_{t}}\)
      ceteris paribus koşulu altında, bağımsız değişken \(x\)’deki 1 birimlik artış, bağımlı değişken \(y\)’de ortalamada \(\beta_{1}\) birim kadar değişime neden olur.
    • Düzey-Log Fonksiyonel Formu: \(y_{t} = \beta_{0} + \beta_{1}\ln{x_{t}} + u_{t} \quad \longrightarrow \quad \Delta{y_{t}} = (\beta_{1}/100) \%\Delta{x_{t}}\)
      ceteris paribus koşulu altında, bağımsız değişken \(x\)’deki %1’lik artış, bağımlı değişken \(y\)’de ortalamada \(\beta_{1}/100\) birim kadar değişime neden olur.
    • Düzey-Düzey Fonksiyonel Formu: \(\ln{y_{t}} = \beta_{0} + \beta_{1}x_{t} + u_{t} \quad \longrightarrow \quad \%\Delta{y_{t}} = (100\beta_{1})\Delta{x_{t}}\)
      ceteris paribus koşulu altında, bağımsız değişken \(x\)’deki 1 birimlik artış, bağımlı değişken \(y\)’de ortalamada \(\%100\beta_{1}\) kadar değişime neden olur. \(100\beta_{1}\) bazen \(y\)’nin \(x\)’e göre yarı-esnekliği olarak da adlandırılır.
    • Düzey-Düzey Fonksiyonel Formu: \(\ln{y_{t}} = \beta_{0} + \beta_{1}\ln{x_{t}} + u_{t} \quad \longrightarrow \quad \%\Delta{y_{t}} = \beta_{1}\%\Delta{x_{t}}\)
      ceteris paribus koşulu altında, bağımsız değişken \(x\)’deki %1’lik artış, bağımlı değişken \(y\)’de ortalamada \(\%\beta_{1}\) kadar değişime neden olur. \(\beta_{1}\) bazen \(y\)’nin \(x\)’e göre esnekliği olarak da adlandırılır.
  • Daha sonra, farklı fonksiyonel formların kullanıldığı zaman serileri modellerinde çıkarsama konusu iki basit zaman serisi modeli kullanılarak uygulamalı olarak gösterilecektir.
    • Statik Modeller
    • Sonlu Dağıtılmış Gecikme Modelleri (Finite Distributed Lag Models) - FDL Modelleri

4.1 Örnek: 1

  • Örnek olarak, wooldridge R paketinden prminwge verisini yükleyelim.
  • prminwge verisi genel olarak Amerika ve Porto Riko’daki istihdam, asgari ücret ve GSMH değişkenlerini, ve ayrıca bu değişkenlere ait logatikmik ve gecikme değerlerini yıllık olarak içeriyor. Örneğimizi basitleştirmek için biz sadece bazı değişkenleri kullanacağız.
    • prepop (\(prepop_{t}\)): Porto Riko’daki istihdam oranı
    • mincov (\(mincov_{t}\)): asgari ücretin ortalama ücrete göre göreceli önemi
      • Asgari ücretin ortalama ücrete göre göreceli önemini belirten \(mincov\) değişkeni şu şekilde hesaplanmıştır. \[\frac{avgmin}{avgwage} \times avgcov\] burada \(avgmin\): ortalama asgari ücret; \(avgwage\): ortalama ücret; \(avgcov\): asgari ücret yasasından faydalanan çalışanların oranıdır.
    • usgnp (\(usgnp_{t}\)): Amerika için Gayri Safi Milli Hasıla (GSMH)
  • Sonra yüklediğimiz bu verinin metadatasını ve yapısını inceleyelim.
  • Daha sonra yüklediğimiz veriyi kullanarak Amerika’daki asgari ücretin Porto Riko’daki istihdam üzerindeki etkisini araştıran Log-Log fonksiyonel formundaki statik modeli tahmin edelim.
    • Model (Statik): \(\ln(prepop_{t}) = \beta_{0} + \beta_{1}\ln(mincov_{t}) + \beta_{2}\ln(usgnp_{t}) + u_{t}\)
  • Son olarak model tahminini kullanarak aşağıdaki hipotezleri car R paketindeki linearHypothesis fonksiyonuyla test edelim.
    • Hipotez Testi 1 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{1} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{1} \neq 0\)
    • Hipotez Testi 2 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{2} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{2} \neq 0\)
data(prminwge) ## Datayı yüklüyoruz.
?prminwge ## Datanın metadatası.

data <- prminwge ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.
str(data) ## Datanın yapısını inceleyelim.
#> 'data.frame':    38 obs. of  25 variables:
#>  $ year    : int  1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
#>  $ avgmin  : num  0.198 0.209 0.225 0.311 0.313 ...
#>  $ avgwage : num  0.398 0.41 0.421 0.48 0.508 ...
#>  $ kaitz   : num  0.155 0.164 0.18 0.229 0.211 ...
#>  $ avgcov  : num  0.201 0.207 0.226 0.231 0.224 ...
#>  $ covt    : num  0.29 0.29 0.29 0.29 0.29 ...
#>  $ mfgwage : num  0.43 0.45 0.48 0.5 0.52 ...
#>  $ prdef   : num  0.859 0.881 0.953 0.97 1 ...
#>  $ prepop  : num  0.47 0.449 0.434 0.428 0.415 ...
#>  $ prepopf : num  0.47 0.449 0.434 0.428 0.415 ...
#>  $ prgnp   : num  879 925 1016 1081 1104 ...
#>  $ prunemp : num  15.4 16 14.8 14.5 15.3 ...
#>  $ usgnp   : num  1204 1328 1380 1435 1416 ...
#>  $ t       : int  1 2 3 4 5 6 7 8 9 10 ...
#>  $ post74  : int  0 0 0 0 0 0 0 0 0 0 ...
#>  $ lprunemp: num  2.73 2.77 2.69 2.67 2.73 ...
#>  $ lprgnp  : num  6.78 6.83 6.92 6.99 7.01 ...
#>  $ lusgnp  : num  7.09 7.19 7.23 7.27 7.26 ...
#>  $ lkaitz  : num  -1.86 -1.81 -1.71 -1.47 -1.56 ...
#>  $ lprun_1 : num  NA -1.87 -1.83 -1.91 -1.93 ...
#>  $ lprepop : num  -0.755 -0.801 -0.835 -0.849 -0.879 ...
#>  $ lprep_1 : num  NA -0.755 -0.801 -0.835 -0.849 ...
#>  $ mincov  : num  0.1 0.106 0.121 0.15 0.138 ...
#>  $ lmincov : num  -2.3 -2.25 -2.11 -1.9 -1.98 ...
#>  $ lavgmin : num  -1.62 -1.57 -1.49 -1.17 -1.16 ...
#>  - attr(*, "time.stamp")= chr "25 Jun 2011 23:03"
data ## Datanın yapısını inceleyelim.
# Amerika'daki asgari ücretin Porto Riko'daki istihdam üzerindeki etkisini araştıran statik model.
model <- lm(data = data, formula = log(prepop) ~ log(mincov) + log(usgnp), singular.ok = FALSE)
summary(model) ## Tahmin özeti.
#> 
#> Call:
#> lm(formula = log(prepop) ~ log(mincov) + log(usgnp), data = data, 
#>     singular.ok = FALSE)
#> 
#> Residuals:
#>       Min        1Q    Median        3Q       Max 
#> -0.117133 -0.036998 -0.005943  0.028181  0.113938 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)  
#> (Intercept) -1.05442    0.76541  -1.378   0.1771  
#> log(mincov) -0.15444    0.06490  -2.380   0.0229 *
#> log(usgnp)  -0.01219    0.08851  -0.138   0.8913  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.0557 on 35 degrees of freedom
#> Multiple R-squared:  0.6605, Adjusted R-squared:  0.6411 
#> F-statistic: 34.04 on 2 and 35 DF,  p-value: 6.17e-09
# linearHypothesis fonksiyonu ile Beta1 için çift kuyruklu t-testi.
linearHypothesis(model, c("log(mincov) = 0")) ## linearHypothesis fonksiyonu F-istatistiği ve ona ait p-değerini veriyor. Tek bir kısıt için hesaplanan F-istatistiğinin, aynı tek kısıt için hesaplanan t-istatistiğinin karesine eşit olduğunu unutmayın (ayrıca her iki testin sonucu da aynıdır).
# linearHypothesis fonksiyonu ile Beta2 için çift kuyruklu t-testi.
linearHypothesis(model, c("log(usgnp) = 0")) ## linearHypothesis fonksiyonu F-istatistiği ve ona ait p-değerini veriyor. Tek bir kısıt için hesaplanan F-istatistiğinin, aynı tek kısıt için hesaplanan t-istatistiğinin karesine eşit olduğunu unutmayın (ayrıca her iki testin sonucu da aynıdır).

4.2 Örnek: 2

  • Örnek olarak, AER R paketinden USMoney verisini yükleyelim.
  • USMoney verisi genel olarak Amerika’daki para arzı ve GSMH değişkenlerini çeyreklik olarak içeriyor. Örneğimizi basitleştirmek için biz sadece bazı değişkenleri kullanacağız.
    • m1 (\(m1_{t}\)): Para Arzı (Para Stoğu M1)
    • gnp (\(gnp_{t}\)): Nominal Gayri Safi Milli Hasıla (GSMH)
  • Sonra yüklediğimiz bu verinin metadatasını ve yapısını inceleyelim.
  • Daha sonra yüklediğimiz veriyi kullanarak GSMH’nin para arzı üzerindeki etkisini araştıran Log-Log fonksiyonel formundaki FDL\(_{(4)}\) modelini tahmin edelim.
    • Model (FDL\(_{(4)}\)): \(\ln(m1_{t}) = \alpha_{0} + \delta_{0}\ln(gnp_{t}) + \delta_{1}\ln(gnp_{t-1}) + \delta_{2}\ln(gnp_{t-2}) + \delta_{3}\ln(gnp_{t-3}) + \delta_{4}\ln(gnp_{t-4}) + u_{t}\)
  • Daha sonra model tahminini kullanarak etki çarpanı ve uzun dönem çarpanı değerlerini hesaplayalım.
    • Etki çarpanı (kısa dönem esnekliği): \(\hat{\delta}_{0}\)
    • Uzun dönem çarpanı (uzun dönem esnekliği): \(\hat{\delta}_{0} + \hat{\delta}_{1} + \hat{\delta}_{2} + \hat{\delta}_{3} + \hat{\delta}_{4}\)
  • Son olarak model tahminini kullanarak aşağıdaki hipotezleri car R paketindeki linearHypothesis fonksiyonuyla test edelim.
    • Modelin istatistiki olarak genel anlamlılığının testi.
      • Hipotez Testi 1 (\(F\)-testi): \(H_{0}: \delta_{0} = \delta_{1} = \delta_{2} = \delta_{3} = \delta_{4} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
    • Tüm gecikmeli değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
      • Hipotez Testi 2 (\(F\)-testi): \(H_{0}: \delta_{1} = \delta_{2} = \delta_{3} = \delta_{4} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
      • Eğer boş hipotez reddedilirse, FDL\(_{(4)}\) modeline ihtiyaç vardır. Aksi durumda statik model kullanılmalıdır.
data(USMoney) ## Datayı yüklüyoruz.
?USMoney ## Datanın metadatası.

data.ts <- USMoney ## Yüklediğimiz datayı "data.ts" ismi ile kaydediyoruz. Yüklediğimiz datanın ts yani zaman serisi objesi olduğunu unutmayın.
str(data.ts) ## Datanın yapısını inceleyelim.
#>  Time-Series [1:136, 1:3] from 1950 to 1984: 268 277 295 306 320 ...
#>  - attr(*, "dimnames")=List of 2
#>   ..$ : NULL
#>   ..$ : chr [1:3] "gnp" "m1" "deflator"
head(data.ts, 5) ## Datanın yapısını ts objesi olarak inceleyelim.
#>           gnp     m1 deflator
#> 1950 Q1 267.6 110.20    56.04
#> 1950 Q2 277.1 111.75    56.21
#> 1950 Q3 294.8 112.95    56.41
#> 1950 Q4 306.3 113.93    56.67
#> 1951 Q1 320.4 115.08    56.77
datatable(data.frame(Date = as.Date(date_decimal(as.numeric(time(data.ts)))), as.matrix(data.ts), stringsAsFactors = FALSE), filter = "none", options = list(pageLength = 5, autoWidth = TRUE)) ## Datanın yapısını data frame olarak inceleyelim.
# Amerika'daki GSMH'nin para arzı üzerindeki etkisini araştıran FDL(4) modeli.
model <- dynlm(data = data.ts, formula = log(m1) ~ log(gnp) + L(log(gnp), 1) + L(log(gnp), 2) + L(log(gnp), 3) + L(log(gnp), 4), singular.ok = FALSE)
summary(model) ## Tahmin özeti.
#> 
#> Time series regression with "ts" data:
#> Start = 1951(1), End = 1983(4)
#> 
#> Call:
#> dynlm(formula = log(m1) ~ log(gnp) + L(log(gnp), 1) + L(log(gnp), 
#>     2) + L(log(gnp), 3) + L(log(gnp), 4), data = data.ts, singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.07812 -0.03445 -0.00298  0.02039  0.11668 
#> 
#> Coefficients:
#>                Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)     1.15088    0.03733  30.832   <2e-16 ***
#> log(gnp)        0.41937    0.37051   1.132    0.260    
#> L(log(gnp), 1) -0.19702    0.62853  -0.313    0.754    
#> L(log(gnp), 2)  0.39647    0.62828   0.631    0.529    
#> L(log(gnp), 3) -0.21687    0.60907  -0.356    0.722    
#> L(log(gnp), 4)  0.21402    0.34892   0.613    0.541    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.0437 on 126 degrees of freedom
#> Multiple R-squared:  0.9904, Adjusted R-squared:  0.9901 
#> F-statistic:  2612 on 5 and 126 DF,  p-value: < 2.2e-16
# Parametre isimleri daha sonra kullanılmak üzere kaydediliyor.
coef.names <- names(coef(model))

# Etki çarpanının (kısa dönem esnekliği) hesaplanması.
coef(model)[[2]]
#> [1] 0.4193652
# Uzun dönem çarpanının (uzun dönem esnekliği) hesaplanması.
coef(model)[[2]] + coef(model)[[3]] + coef(model)[[4]] + coef(model)[[5]] + coef(model)[[6]]
#> [1] 0.6159644
# Hipotez Testi 1: linearHypothesis fonksiyonu ile modelin istatistiki olarak genel anlamlılığının testi.
linearHypothesis(model, c("log(gnp) = 0", "L(log(gnp), 1) = 0", "L(log(gnp), 2) = 0", "L(log(gnp), 3) = 0", "L(log(gnp), 4) = 0"))
# linearHypothesis(model, coef.names[grep("gnp", coef.names)]) ## Yukarıdaki sonucun aynısını verir.

# Hipotez Testi 2: linearHypothesis fonksiyonu ile tüm gecikmeli değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
linearHypothesis(model, c("L(log(gnp), 1) = 0", "L(log(gnp), 2) = 0", "L(log(gnp), 3) = 0", "L(log(gnp), 4) = 0")) ## p-değeri %5 anlamlılık düzeyinden büyük olduğundan boş hipotez reddedilemez ve statik model kullanılmalıdır.
# linearHypothesis(model, coef.names[grep("L", coef.names)]) ## Yukarıdaki sonucun aynısını verir.

5 Kukla Değişkenler

  • Bu alt bölümde, zaman serileri modellerinde kukla değişkenler iki basit zaman serisi modeli kullanılarak uygulamalı olarak gösterilecektir.
    • Statik Modeller
    • Sonlu Dağıtılmış Gecikme Modelleri (Finite Distributed Lag Models) - FDL Modelleri

5.1 Örnek: 1

  • Ö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 yıllık olarak 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)
  • Daha sonra yüklediğimiz veriyi kullanarak aşağıdaki statik modeli tahmin edelim.
    • Model (Statik): \(gfr_{t} = \beta_{0} + \beta_{1}pe_{t} + \beta_{2}ww2_{t} + \beta_{3}pill_{t} + u_{t}\)
  • Son olarak model tahminini kullanarak aşağıdaki hipotezleri car R paketindeki linearHypothesis fonksiyonuyla test edelim.
    • Hipotez Testi 1 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{1} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{1} \neq 0\)
    • Hipotez Testi 2 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{2} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{2} \neq 0\)
    • Hipotez Testi 3 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{3} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{3} \neq 0\)
    • Modelin istatistiki olarak genel anlamlılığının testi.
      • Hipotez Testi 4 (\(F\)-testi): \(H_{0}: \beta_{1} = \beta_{2} = \beta_{3} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
data(fertil3) ## Datayı yüklüyoruz.
?fertil3 ## Datanın metadatası.

data <- fertil3 ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.

# Bazı değişkenlere ait önemli değerler.
min(data$gfr); max(data$gfr)
#> [1] 65.4
#> [1] 126.6
min(data$pe); max(data$pe); mean(data$pe)
#> [1] 0
#> [1] 243.83
#> [1] 100.4015
# Model : Doğurganlık, vergi muafiyeti, savaş ve doğurganlık hapı arasındaki statik model.
model <- lm(data = data, formula = gfr ~ pe + ww2 + pill, singular.ok = FALSE)
summary(model) ## Tahmin özeti.
#> 
#> Call:
#> lm(formula = gfr ~ pe + ww2 + pill, data = data, singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -27.0187  -9.6195   0.3393   9.4746  28.0730 
#> 
#> Coefficients:
#>              Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)  98.68176    3.20813  30.760  < 2e-16 ***
#> pe            0.08254    0.02965   2.784  0.00694 ** 
#> ww2         -24.23840    7.45825  -3.250  0.00180 ** 
#> pill        -31.59403    4.08107  -7.742 6.46e-11 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 14.69 on 68 degrees of freedom
#> Multiple R-squared:  0.4734, Adjusted R-squared:  0.4502 
#> F-statistic: 20.38 on 3 and 68 DF,  p-value: 1.575e-09
# Hipotez Testi 1: linearHypothesis fonksiyonu ile Beta1 için çift kuyruklu t-testi.
linearHypothesis(model, c("pe = 0"))
# Hipotez Testi 2: linearHypothesis fonksiyonu ile Beta2 için çift kuyruklu t-testi.
linearHypothesis(model, c("ww2 = 0"))
# Hipotez Testi 3: linearHypothesis fonksiyonu ile Beta3 için çift kuyruklu t-testi.
linearHypothesis(model, c("pill = 0"))
# Hipotez Testi 4: linearHypothesis fonksiyonu ile modelin istatistiki olarak genel anlamlılığının testi.
linearHypothesis(model, c("pe = 0", "ww2 = 0", "pill = 0"))

5.2 Örnek: 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 yıllık olarak 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)
  • Daha sonra yüklediğimiz veriyi kullanarak aşağıdaki FDL\(_{(2)}\) modelini tahmin edelim.
    • Model 1 (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}\)
  • Daha sonra Model 1 tahminini kullanarak aşağıdaki hipotezleri car R paketindeki linearHypothesis fonksiyonuyla test edelim.
    • \(pe\) bağımsız değişkenlerinin beraberce istatistiki anlamlılığının testi.
      • Hipotez Testi 1 (\(F\)-testi): \(H_{0}: \delta_{0} = \delta_{1} = \delta_{2} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
    • Tüm gecikmeli değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
      • Hipotez Testi 2 (\(F\)-testi): \(H_{0}: \delta_{1} = \delta_{2} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
      • Eğer boş hipotez reddedilirse, FDL\(_{(2)}\) modeline ihtiyaç vardır. Aksi durumda statik model kullanılmalıdır.
  • Daha sonra Model 1 tahminini kullanarak uzun dönem çarpanı değerini hesaplayalım.
    • Uzun dönem çarpanı: \(\hat{\theta}_{0} = \hat{\delta}_{0} + \hat{\delta}_{1} + \hat{\delta}_{2}\)
  • Daha sonra uzun dönem çarpanının istatistiki anlamlılığını test etmek için Model 1’i dönüştürüp Model 2’yi oluşturalım.
    • Model 2 (FDL\(_{(2)}\)): \(gfr_{t} = \alpha_{0} + \theta_{0}pe_{t} + \delta_{1}(pe_{t-1} - pe_{t}) + \delta_{2}(pe_{t-2} - pe_{t}) + \beta_{1}ww2_{t} + \beta_{2}pill_{t} + u_{t}\)
    • Model 2’nin çıkarılışı için ders slaytlarına bakabilirsiniz.
  • Daha sonra Model 2 tahminini kullanarak uzun dönem çarpanı \(\theta_{0}\)’nın istatistiki anlamlılığını test edelim.
    • Hipotez Testi 3 (Çift Kuyruk \(t\)-testi): \(H_{0}: \theta_{0} = 0 \;\; \text{vs.} \;\; H_{1}: \theta_{0} \neq 0\)
  • Son olarak Model 2 tahminini kullanarak uzun dönem çarpanı \(\theta_{0}\) için %95’lik güven aralığını hem confint fonksiyonunu kullanarak hem de elle hesaplayalım.
    • \(\theta_{0}\) için %95’lik güven aralığı tahmini: \([\hat{\theta}_{0} - c \cdot se(\hat{\theta}_{0}), \; \hat{\theta}_{0} + c \cdot se(\hat{\theta}_{0})]\)
      • Burada, \(c = t_{(1 - \alpha/2), \; sd} = t_{0.975, \; n-k-1}\)’dır.
data(fertil3) ## Datayı yüklüyoruz.
?fertil3 ## Datanın metadatası.

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

# Model 1 : Doğurganlık, vergi muafiyeti, savaş ve doğurganlık hapı arasındaki FDL(2) modeli.
model.1 <- dynlm(data = data.ts, formula = gfr ~ pe + L(pe, 1) + L(pe, 2) + ww2 + pill, singular.ok = FALSE)
summary(model.1) ## Tahmin özeti.
#> 
#> Time series regression with "ts" data:
#> Start = 1915, End = 1984
#> 
#> Call:
#> dynlm(formula = gfr ~ pe + L(pe, 1) + L(pe, 2) + ww2 + pill, 
#>     data = data.ts, singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -24.6461  -9.5409  -0.0312   8.3378  29.1295 
#> 
#> Coefficients:
#>              Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)  95.87050    3.28196  29.211  < 2e-16 ***
#> pe            0.07267    0.12553   0.579   0.5647    
#> L(pe, 1)     -0.00578    0.15566  -0.037   0.9705    
#> L(pe, 2)      0.03383    0.12626   0.268   0.7896    
#> ww2         -22.12650   10.73197  -2.062   0.0433 *  
#> pill        -31.30499    3.98156  -7.862 5.63e-11 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 14.27 on 64 degrees of freedom
#> Multiple R-squared:  0.4986, Adjusted R-squared:  0.4594 
#> F-statistic: 12.73 on 5 and 64 DF,  p-value: 1.353e-08
# Cari ve gecikmeli pe değerleri arasındaki korelasyon.
cor(data$pe, data$pe_1, use = "complete.obs", method = c("pearson"))
#> [1] 0.96358
cor(data$pe, data$pe_2, use = "complete.obs", method = c("pearson"))
#> [1] 0.9090107
cor(data$pe_1, data$pe_2, use = "complete.obs", method = c("pearson"))
#> [1] 0.9637233
# Hipotez Testi 1 (Model 1): linearHypothesis fonksiyonu ile cari ve gecikmeli dönemdeki pe değişkenlerinin beraberce istatistiki anlamlılığının testi.
linearHypothesis(model.1, c("pe = 0", "L(pe, 1) = 0", "L(pe, 2) = 0"))
# Hipotez Testi 2 (Model 1): linearHypothesis fonksiyonu ile tüm gecikmeli değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
linearHypothesis(model.1, c("L(pe, 1) = 0", "L(pe, 2) = 0")) ## p-değeri %5 anlamlılık düzeyinden büyük olduğundan boş hipotez reddedilemez ve statik model kullanılmalıdır.
# Model 1 tahmini kullanılarak uzun dönem çarpanının hesaplanması.
coef(model.1)[[2]] + coef(model.1)[[3]] + coef(model.1)[[4]]
#> [1] 0.1007191
# Model 2 : Doğurganlık, vergi muafiyeti, savaş ve doğurganlık hapı arasındaki FDL(2) modelinin (Model 1) uzun dönem çarpanını hesaplamak için dönüştürülmüş hali.
model.2 <- dynlm(data = data.ts, formula = gfr ~ pe + I(L(pe, 1) - pe) + I(L(pe, 2) - pe) + ww2 + pill, singular.ok = FALSE) ## Burada [pe(t-1) - pe(t)] bağımsız değişkeni modele koyabilmek için I() fonksiyonunu kullandığımıza dikkat edin.
summary(model.2) ## Tahmin özeti.
#> 
#> Time series regression with "ts" data:
#> Start = 1915, End = 1984
#> 
#> Call:
#> dynlm(formula = gfr ~ pe + I(L(pe, 1) - pe) + I(L(pe, 2) - pe) + 
#>     ww2 + pill, data = data.ts, singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -24.6461  -9.5409  -0.0312   8.3378  29.1295 
#> 
#> Coefficients:
#>                   Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)       95.87050    3.28196  29.211  < 2e-16 ***
#> pe                 0.10072    0.02980   3.380  0.00124 ** 
#> I(L(pe, 1) - pe)  -0.00578    0.15566  -0.037  0.97050    
#> I(L(pe, 2) - pe)   0.03383    0.12626   0.268  0.78962    
#> ww2              -22.12650   10.73197  -2.062  0.04330 *  
#> pill             -31.30499    3.98156  -7.862 5.63e-11 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 14.27 on 64 degrees of freedom
#> Multiple R-squared:  0.4986, Adjusted R-squared:  0.4594 
#> F-statistic: 12.73 on 5 and 64 DF,  p-value: 1.353e-08
# Hipotez Testi 3 (Model 2): hoCoef fonksiyonu ile çift ve tek kuyruklu t-testi.
hoCoef(model.2, term = 2, bo = 0, alt = c("two.sided")) ## Çift kuyruklu t-testi: H0: Theta0 = 0 vs H1: Theta0 != 0 
#>  term Ho Value  Estimate Std. Error        T df     p value
#>     2        0 0.1007191 0.02980267 3.379532 64 0.001240844
linearHypothesis(model.1, c("pe + L(pe, 1) + L(pe, 2) = 0")) ## Model 1'i dönüştürmeden direkt olarak Model 1'in sonuçlarını kullanarak uzun dönem çarpanı 
# Uzun dönem çarpanı için %95'lik güven aralığı (%5 anlamlılık düzeyinde) hesaplanması.
conf.level <- 0.95
alpha <- 1 - conf.level

## confint fonksiyonu ile güven aralığı hesaplanması.
confint(object = model.2, parm = "pe", level = conf.level)
#>         2.5 %    97.5 %
#> pe 0.04118141 0.1602568
## Elle güven aralığı hesaplanması.
estimate.beta <- coef(summary(model.2))[2, 1] ## Parametre tahmini
estimate.se <- coef(summary(model.2))[2, 2] ## Parametre için standart hata tahmini.
t.critic <- qt(p = (1 - alpha/2), df = model.2$df.residual, lower.tail = TRUE, log.p = FALSE) ## t-kritik değeri.
estimate.beta - (t.critic * estimate.se) ## Güven aralığı alt limiti.
#> [1] 0.04118141
estimate.beta + (t.critic * estimate.se) ## Güven aralığı üst limiti.
#> [1] 0.1602568

6 Trend

  • Bu alt bölümde, zaman serileri analizinde trende sahip değişkenlerin regresyonda kullanımı iki farklı yöntem ve statik zaman serisi modeli kullanılarak uygulamalı olarak gösterilecektir.
    • Trend Değişkeni Eklenmesi
    • Trendin Berteraf Edilmesi
  • Trende sahip değişkenler FDL modellerinde de aynı statik modellerdeki gibi kullanılabilir, fakat burada gösterilmemiştir.

6.1 Trend Değişkeni Eklenmesi

6.1.1 Örnek: 1

  • Örnek olarak, wooldridge R paketinden hseinv verisini yükleyelim.
  • hseinv verisi genel olarak Amerika’daki ev yatırımları ve fiyatlar değişkenlerini, ve ayrıca bu değişkenlere ait gecikme ve ilk farklar değerlerini yıllık olarak içeriyor. Örneğimizi basitleştirmek için biz sadece bazı değişkenleri kullanacağız.
    • invpc (\(invpc_{t}\)): reel kişi başı ev yatırımı (bin dolar)
    • price (\(price_{t}\)): ev fiyatları indeksi (1982 baz yılı = 1)
    • t (\(t\)): zaman trendi
  • Sonra yüklediğimiz bu verinin metadatasını ve yapısını inceleyelim.
  • Daha sonra yüklediğimiz veriyi kullanarak aşağıdaki statik modeli tahmin edelim.
    • Model 1 (Statik): \(\ln(invpc_{t}) = \beta_{0} + \beta_{1}\ln(price_{t}) + u_{t}\)
  • Daha sonra Model 1 tahminini kullanarak aşağıdaki hipotezleri hoCoef fonksiyonuyla test edelim.
    • Hipotez Testi 1 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{1} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{1} \neq 0\)
    • Hipotez Testi 2 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{1} = 1 \;\; \text{vs.} \;\; H_{1}: \beta_{1} \neq 1\)
  • Daha sonra Model 1’de kullandığımız bağımlı ve bağımsız değişkenlerde trend olup olmadığını anlamak için bu değişkenleri trend (\(t\)) üzerine regres edip aşağıdaki modelleri tahmin edelim.
    • Model 2 (Statik): \(\ln(invpc_{t}) = \alpha_{0} + \alpha_{1}t + \epsilon_{t}\)
    • Model 3 (Statik): \(\ln(price_{t}) = \alpha_{0} + \alpha_{1}t + \epsilon_{t}\)
  • Daha sonra Model 2 ve Model 3’deki trend değişkenine ait parametrelerin istatistiki olarak anlamlı olup olmadığını model tahmin sonuçlarını kullanarak bulmaya ve sonuç olarak Model 1’de kullanılan bağımlı ve bağımsız değişkenlerde trend olup olmadığına karar vermeye çalışalım.
  • Daha sonra Model 1’deki bağımlı ve bağımsız değişkenlerde trend bulunduğundan dolayı sahte regresyon problemi ile karşılaşmamak için trend değişkeni eklenmiş aşağıdaki statik modeli tahmin edelim.
    • Model 4 (Trendli Statik): \(\ln(invpc_{t}) = \beta_{0} + \beta_{1}\ln(price_{t}) + \beta_{2}t + u_{t}\)
      • Model 4 Log-Log fonksiyonel formunda olduğundan trende ait \(\beta_{2}\) parametresi bağımlı değişken \(invpc_{t}\)’deki büyüme oranını ifade edecektir. Yani, üstel trend modeli kullanılmıştır.
  • Son olarak Model 4 tahminini kullanarak aşağıdaki hipotezleri hoCoef fonksiyonuyla test edelim.
    • Hipotez Testi 3 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{1} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{1} \neq 0\)
    • Hipotez Testi 4 (Çift Kuyruk \(t\)-testi): \(H_{0}: \beta_{2} = 0 \;\; \text{vs.} \;\; H_{1}: \beta_{1} \neq 0\)
data(hseinv) ## Datayı yüklüyoruz.
?hseinv ## Datanın metadatası.

data <- hseinv ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.
str(data) ## Datanın yapısını inceleyelim.
#> 'data.frame':    42 obs. of  14 variables:
#>  $ year    : int  1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 ...
#>  $ inv     : num  54864 64717 63150 86014 70610 ...
#>  $ pop     : num  144126 146631 149188 151684 154287 ...
#>  $ price   : num  0.819 0.865 0.846 0.877 0.882 ...
#>  $ linv    : num  10.9 11.1 11.1 11.4 11.2 ...
#>  $ lpop    : num  11.9 11.9 11.9 11.9 11.9 ...
#>  $ lprice  : num  -0.2 -0.145 -0.168 -0.132 -0.126 ...
#>  $ t       : int  1 2 3 4 5 6 7 8 9 10 ...
#>  $ invpc   : num  0.381 0.441 0.423 0.567 0.458 ...
#>  $ linvpc  : num  -0.966 -0.818 -0.86 -0.567 -0.782 ...
#>  $ lprice_1: num  NA -0.2 -0.145 -0.168 -0.132 ...
#>  $ linvpc_1: num  NA -0.966 -0.818 -0.86 -0.567 ...
#>  $ gprice  : num  NA 0.05453 -0.02257 0.03589 0.00614 ...
#>  $ ginvpc  : num  NA 0.1479 -0.0418 0.2924 -0.2144 ...
#>  - attr(*, "time.stamp")= chr "25 Jun 2011 23:03"
data ## Datanın yapısını inceleyelim.
# Model 1: Ev yatırımları ve fiyatları arasındaki trendsiz statik model.
model.1 <- lm(data = data, formula = log(invpc) ~ log(price), singular.ok = FALSE)
summary(model.1) ## Tahmin özeti.
#> 
#> Call:
#> lm(formula = log(invpc) ~ log(price), data = data, singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.45991 -0.08694 -0.01264  0.08651  0.34672 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) -0.55023    0.04303 -12.788 1.03e-15 ***
#> log(price)   1.24094    0.38242   3.245  0.00238 ** 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.1554 on 40 degrees of freedom
#> Multiple R-squared:  0.2084, Adjusted R-squared:  0.1886 
#> F-statistic: 10.53 on 1 and 40 DF,  p-value: 0.002376
# Hipotez Testi 1 (Model 1): hoCoef fonksiyonu ile çift ve tek kuyruklu t-testi.
hoCoef(model.1, term = 2, bo = 0, alt = c("two.sided")) ## Çift kuyruklu t-testi: H0: Beta1 = 0 vs H1: Beta1 != 0
#>  term Ho Value Estimate Std. Error        T df     p value
#>     2        0 1.240943  0.3824192 3.244981 40 0.002376136
# Hipotez Testi 2 (Model 1): hoCoef fonksiyonu ile çift ve tek kuyruklu t-testi.
hoCoef(model.1, term = 2, bo = 1, alt = c("two.sided")) ## Çift kuyruklu t-testi: H0: Beta1 = 1 vs H1: Beta1 != 1
#>  term Ho Value Estimate Std. Error         T df   p value
#>     2        1 1.240943  0.3824192 0.6300499 40 0.5322448
# Model 2: Ev yatırımları değişkeni trend üzerine regres ediliyor.
model.2 <- lm(data = data, formula = log(invpc) ~ t, singular.ok = FALSE)
summary(model.2) ## Tahmin özeti.
#> 
#> Call:
#> lm(formula = log(invpc) ~ t, data = data, singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.46210 -0.07763 -0.01810  0.08809  0.27774 
#> 
#> Coefficients:
#>              Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) -0.841292   0.044744 -18.802  < 2e-16 ***
#> t            0.008146   0.001813   4.493 5.85e-05 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.1424 on 40 degrees of freedom
#> Multiple R-squared:  0.3354, Adjusted R-squared:  0.3188 
#> F-statistic: 20.19 on 1 and 40 DF,  p-value: 5.854e-05
# Model 3: Fiyatlar değişkeni trend üzerine regres ediliyor.
model.3 <- lm(data = data, formula = log(price) ~ t, singular.ok = FALSE)
summary(model.3) ## Tahmin özeti.
#> 
#> Call:
#> lm(formula = log(price) ~ t, data = data, singular.ok = FALSE)
#> 
#> Residuals:
#>       Min        1Q    Median        3Q       Max 
#> -0.050108 -0.025920 -0.009173  0.017513  0.080490 
#> 
#> Coefficients:
#>               Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) -0.1883860  0.0105121  -17.92  < 2e-16 ***
#> t            0.0044173  0.0004259   10.37 6.68e-13 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.03346 on 40 degrees of freedom
#> Multiple R-squared:  0.7289, Adjusted R-squared:  0.7222 
#> F-statistic: 107.6 on 1 and 40 DF,  p-value: 6.677e-13
# Model 4: Ev yatırımları ve fiyatları arasındaki trendli statik model.
model.4 <- lm(data = data, formula = log(invpc) ~ log(price) + t, singular.ok = FALSE)
summary(model.4) ## Tahmin özeti.
#> 
#> Call:
#> lm(formula = log(invpc) ~ log(price) + t, data = data, singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.45092 -0.08583 -0.01734  0.08517  0.26024 
#> 
#> Coefficients:
#>              Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) -0.913060   0.135613  -6.733    5e-08 ***
#> log(price)  -0.380961   0.678835  -0.561  0.57787    
#> t            0.009829   0.003512   2.798  0.00794 ** 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.1436 on 39 degrees of freedom
#> Multiple R-squared:  0.3408, Adjusted R-squared:  0.307 
#> F-statistic: 10.08 on 2 and 39 DF,  p-value: 0.000296
# Hipotez Testi 3 (Model 4): hoCoef fonksiyonu ile çift ve tek kuyruklu t-testi.
hoCoef(model.4, term = 2, bo = 0, alt = c("two.sided")) ## Çift kuyruklu t-testi: H0: Beta1 = 0 vs H1: Beta1 != 0
#>  term Ho Value   Estimate Std. Error          T df   p value
#>     2        0 -0.3809613  0.6788352 -0.5611985 39 0.5778728
# Hipotez Testi 4 (Model 4): hoCoef fonksiyonu ile çift ve tek kuyruklu t-testi.
hoCoef(model.4, term = 3, bo = 0, alt = c("two.sided")) ## Çift kuyruklu t-testi: H0: Beta2 = 0 vs H1: Beta2 != 0
#>  term Ho Value    Estimate Std. Error        T df     p value
#>     3        0 0.009828726 0.00351221 2.798445 39 0.007939359

6.1.2 Örnek: 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 yıllık olarak 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)
    • t (\(t\)): zaman trendi
  • Daha sonra yüklediğimiz veriyi kullanarak aşağıdaki karesel trendli statik modeli tahmin edelim.
    • Model (Statik): \(gfr_{t} = \beta_{0} + \beta_{1}pe_{t} + \beta_{2}ww2_{t} + \beta_{3}pill_{t} + \beta_{4}t + \beta_{5}t^{2} + u_{t}\)
data(fertil3) ## Datayı yüklüyoruz.
?fertil3 ## Datanın metadatası.

data <- fertil3 ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.

# Model : Doğurganlık, vergi muafiyeti, savaş ve doğurganlık hapı arasındaki karesel trendli statik model.
model <- lm(data = data, formula = gfr ~ pe + ww2 + pill + t + I(t^2), singular.ok = FALSE) ## Burada t^2 bağımsız değişkeni modele koyabilmek için I() fonksiyonunu kullandığımıza dikkat edin.
summary(model) ## Tahmin özeti.
#> 
#> Call:
#> lm(formula = gfr ~ pe + ww2 + pill + t + I(t^2), data = data, 
#>     singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -25.9791  -6.9775  -0.2713   7.7975  19.9861 
#> 
#> Coefficients:
#>               Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) 124.091935   4.360738  28.457  < 2e-16 ***
#> pe            0.347813   0.040260   8.639 1.91e-12 ***
#> ww2         -35.880277   5.707921  -6.286 2.95e-08 ***
#> pill        -10.119723   6.336094  -1.597 0.115008    
#> t            -2.531426   0.389386  -6.501 1.24e-08 ***
#> I(t^2)        0.019613   0.004971   3.945 0.000196 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 10.74 on 66 degrees of freedom
#> Multiple R-squared:  0.7267, Adjusted R-squared:  0.706 
#> F-statistic: 35.09 on 5 and 66 DF,  p-value: < 2.2e-16

6.2 Trendin Berteraf Edilmesi

  • Örnek olarak, wooldridge R paketinden hseinv verisini yükleyelim.
  • hseinv verisi genel olarak Amerika’daki ev yatırımları ve fiyatlar değişkenlerini, ve ayrıca bu değişkenlere ait gecikme ve ilk farklar değerlerini yıllık olarak içeriyor. Örneğimizi basitleştirmek için biz sadece bazı değişkenleri kullanacağız.
    • invpc (\(invpc_{t}\)): reel kişi başı ev yatırımı (bin dolar)
    • price (\(price_{t}\)): ev fiyatları indeksi (1982 baz yılı = 1)
    • t (\(t\)): zaman trendi
  • Daha sonra yüklediğimiz veriyi kullanarak aşağıdaki trendli statik modeli tahmin edelim.
    • Model 1 (Trendli Statik): \(\ln(invpc_{t}) = \beta_{0} + \beta_{1}\ln(price_{t}) + \beta_{2}t + u_{t}\)
      • Model 1 Log-Log fonksiyonel formunda olduğundan trende ait \(\beta_{2}\) parametresi bağımlı değişken \(invpc_{t}\)’deki büyüme oranını ifade edecektir. Yani, üstel trend modeli kullanılmıştır.
      • Not: Bağımlı ve bağımsız değişkenlerde trend bulunduğundan dolayı sahte regresyon problemi ile karşılaşmamak için Model 1’e trend eklenmiştir. Bakınız Trend Değişkeni Eklenmesi: Örnek 1
  • Daha sonra Model 1’de kullanılan bağımlı ve bağımsız değişkenleri trend değişkeni üzerine ayrı ayrı regres edip her modelden elde edilen kalıntıları (\(\overset{..}{y}_{t}\) ve \(\overset{..}{x}_{1t}\) gibi) hesaplayalım. Yani, tüm değişkenlerdeki trendi berteraf edelim.
    • Model 2: \(\ln(invpc_{t}) = \alpha_{0} + \alpha_{1}t + e_{t} \quad \longrightarrow \quad \hat{e}_{t} = ln(invpc_{t}) - \widehat{\ln(invpc_{t})}\)
    • Model 3: \(\ln(price_{t}) = \theta_{0} + \theta_{1}t + h_{t} \quad \longrightarrow \quad \hat{h}_{t} = ln(price_{t}) - \widehat{\ln(price_{t})}\)
  • Daha sonra Model 2 ve Model 3’den elde edilen artıkları birbiri üzerine regres edip aşağıdaki modeli tahmin edelim.
    • Model 4 (Trendsiz Statik): \(\hat{e}_{t} = \delta_{0} + \delta_{1}\hat{h}_{t} + u_{t}\)
  • Son olarak Model 1 ve Model 4 sonuçlarının aynı olup olmadığını inceleyelim.
data(hseinv) ## Datayı yüklüyoruz.
?hseinv ## Datanın metadatası.

data <- hseinv ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.

# Model 1: Ev yatırımları ve fiyatları arasındaki trendli statik model.
model.1 <- lm(data = data, formula = log(invpc) ~ log(price) + t, singular.ok = FALSE)
summary(model.1) ## Tahmin özeti.
#> 
#> Call:
#> lm(formula = log(invpc) ~ log(price) + t, data = data, singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.45092 -0.08583 -0.01734  0.08517  0.26024 
#> 
#> Coefficients:
#>              Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) -0.913060   0.135613  -6.733    5e-08 ***
#> log(price)  -0.380961   0.678835  -0.561  0.57787    
#> t            0.009829   0.003512   2.798  0.00794 ** 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.1436 on 39 degrees of freedom
#> Multiple R-squared:  0.3408, Adjusted R-squared:  0.307 
#> F-statistic: 10.08 on 2 and 39 DF,  p-value: 0.000296
#===
# Ek bilgi: Statik modeli dynlm() fonksiyonu ile tahmin etmek.
data.ts <- ts(data, start = 1947) ## Data 1947 yılından itibaren başlamış.
model.1 <- dynlm(data = data.ts, formula = log(invpc) ~ log(price) + trend(data.ts), singular.ok = FALSE) ## dynlm() fonksiyonu statik modeller için de kullanılabilir. dynlm() fonksiyonunun avantajı data içinde trend ya da mevsimsellik değişkenleri olmasa da otomatik olarak oluşturabilmesidir. trend() fonksiyonu kullanarak modele lineer trend eklenebilir.
summary(model.1) ## Tahmin özeti. Yukarıdaki lm() fonksiyonu ile elde edilen sonucun aynısı.
#> 
#> Time series regression with "ts" data:
#> Start = 1947, End = 1988
#> 
#> Call:
#> dynlm(formula = log(invpc) ~ log(price) + trend(data.ts), data = data.ts, 
#>     singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.45092 -0.08583 -0.01734  0.08517  0.26024 
#> 
#> Coefficients:
#>                 Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)    -0.913060   0.135613  -6.733    5e-08 ***
#> log(price)     -0.380961   0.678835  -0.561  0.57787    
#> trend(data.ts)  0.009829   0.003512   2.798  0.00794 ** 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.1436 on 39 degrees of freedom
#> Multiple R-squared:  0.3408, Adjusted R-squared:  0.307 
#> F-statistic: 10.08 on 2 and 39 DF,  p-value: 0.000296
#===

# Model 2: Ev yatırımları ve trend arasındaki model.
model.2 <- lm(data = data, formula = log(invpc) ~ t, singular.ok = FALSE)
ln.invpc.resid <- model.2$residuals ## Kalıntılar.

# Model 3: Fiyatlar ve trend arasındaki model.
model.3 <- lm(data = data, formula = log(price) ~ t, singular.ok = FALSE)
ln.price.resid <- model.3$residuals ## Kalıntılar.

model.4 <- lm(formula = ln.invpc.resid ~ ln.price.resid, singular.ok = FALSE) ## Data argumanını kullanmadıgımıza ve aynı uzunlukta iki değişken kullandığımıza dikkat edin.
summary(model.4) ## Tahmin özeti.
#> 
#> Call:
#> lm(formula = ln.invpc.resid ~ ln.price.resid, singular.ok = FALSE)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.45092 -0.08583 -0.01734  0.08517  0.26024 
#> 
#> Coefficients:
#>                  Estimate Std. Error t value Pr(>|t|)
#> (Intercept)     8.158e-19  2.189e-02   0.000    1.000
#> ln.price.resid -3.810e-01  6.703e-01  -0.568    0.573
#> 
#> Residual standard error: 0.1418 on 40 degrees of freedom
#> Multiple R-squared:  0.008011,   Adjusted R-squared:  -0.01679 
#> F-statistic: 0.323 on 1 and 40 DF,  p-value: 0.573
# Model 1 ve Model 4 arasında karşılaştırma yapmak amacıyla stargazer fonksiyonu kullanılıyor.
stargazer(model.1, model.4, type = "text")
#> 
#> =============================================================
#>                                Dependent variable:           
#>                     -----------------------------------------
#>                           log(invpc)         ln.invpc.resid  
#>                            dynamic                OLS        
#>                             linear                           
#>                              (1)                  (2)        
#> -------------------------------------------------------------
#> log(price)                  -0.381                           
#>                            (0.679)                           
#>                                                              
#> trend(data.ts)             0.010***                          
#>                            (0.004)                           
#>                                                              
#> ln.price.resid                                   -0.381      
#>                                                 (0.670)      
#>                                                              
#> Constant                  -0.913***              0.000       
#>                            (0.136)              (0.022)      
#>                                                              
#> -------------------------------------------------------------
#> Observations                  42                   42        
#> R2                          0.341                0.008       
#> Adjusted R2                 0.307                -0.017      
#> Residual Std. Error    0.144 (df = 39)      0.142 (df = 40)  
#> F Statistic         10.080*** (df = 2; 39) 0.323 (df = 1; 40)
#> =============================================================
#> Note:                             *p<0.1; **p<0.05; ***p<0.01

7 Mevsimsellik

  • Bu alt bölümde, zaman serileri analizinde mevsimselliğe sahip değişkenlerin regresyonda kullanımı bir yöntem ve statik zaman serisi modeli kullanılarak uygulamalı olarak gösterilecektir.
    • Mevsimsel Kukla Değişkenlerin Eklenmesi
  • Mevsimselliğe sahip değişkenler FDL modellerinde de aynı statik modellerdeki gibi kullanılabilir, fakat burada gösterilmemiştir.

7.1 Mevsimsel Kukla Değişkenlerin Eklenmesi

  • Örnek olarak, AER R paketinden USMoney verisini yükleyelim.
  • USMoney verisi genel olarak Amerika’daki para arzı ve GSMH değişkenlerini çeyreklik olarak içeriyor. Örneğimizi basitleştirmek için biz sadece bazı değişkenleri kullanacağız.
    • m1 (\(m1_{t}\)): Para Arzı (Para Stoğu M1)
    • gnp (\(gnp_{t}\)): Nominal Gayri Safi Milli Hasıla (GSMH)
  • Daha sonra yüklediğimiz veriyi kullanarak GSMH’nin para arzı üzerindeki etkisini araştıran Log-Log fonksiyonel formundaki trendli ve mevsimsel kuklalı statik modeli tahmin edelim.
    • Model (Trendli ve Mevsimsel KuklalıStatik): \(\ln(m1_{t}) = \beta_{0} + \beta_{1}\ln(gnp_{t}) + \beta_{2}t + \delta_{1}Q2_{t} + \delta_{2}Q3_{t} + \delta_{3}Q4_{t} + u_{t}\)
      • Model Log-Log fonksiyonel formunda olduğundan trende ait \(\beta_{2}\) parametresi bağımlı değişken \(m1_{t}\)’deki büyüme oranını ifade edecektir. Yani, üstel trend modeli kullanılmıştır.
      • Çeyrek 1’i ifade eden \(Q1_{t}\) baz dönem olarak alınmıştır ve bu nedenle modelde yoktur.
      • Çeyrek 1’in \(\ln(m1_{t})\) üzerindeki etkisini sabit terim \(\beta_{0}\) ifade eder.
  • Son olarak model tahminini kullanarak aşağıdaki hipotezleri car R paketindeki linearHypothesis fonksiyonuyla test edelim.
    • Tüm mevsimsel kukla değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
      • Hipotez Testi 1 (\(F\)-testi): \(H_{0}: \delta_{1} = \delta_{2} = \delta_{3} = 0 \;\; \text{vs.} \;\; H_{1}: H_{0} \ \text{doğru değil}\)
      • Eğer boş hipotez reddedilirse, \(\ln(m1_{t})\)’de ve dolayısıyla modelde mevsimsellik vardır, yani mevsimsel kukla değişkenlere ihtiyaç vardır. Aksi durumda mevsimsel kukla değişkenler kullanılmamalıdır.
data(USMoney) ## Datayı yüklüyoruz.
?USMoney ## Datanın metadatası.

data.ts <- USMoney ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz. Yüklediğimiz datanın ts yani zaman serisi objesi olduğunu unutmayın.

# Amerika'daki GSMH'nin para arzı üzerindeki etkisini araştıran trendli ve mevsimsel kuklalı statik modeli.
model <- dynlm(data = data.ts, formula = log(m1) ~ log(gnp) + trend(data.ts) + season(data.ts), singular.ok = FALSE) ## dynlm() fonksiyonu statik modeller için de kullanılabilir. dynlm() fonksiyonunun avantajı data içinde trend ya da mevsimsellik değişkenleri olmasa da otomatik olarak oluşturabilmesidir. trend() fonksiyonu kullanarak modele lineer trend eklenebilir. season() fonksiyonu kullanarak modele mevsimsel kukla değişkenleri eklenebilir (ilk dönem, baz dönem olacaktır).
summary(model) ## Tahmin özeti.
#> 
#> Time series regression with "ts" data:
#> Start = 1950(1), End = 1983(4)
#> 
#> Call:
#> dynlm(formula = log(m1) ~ log(gnp) + trend(data.ts) + season(data.ts), 
#>     data = data.ts, singular.ok = FALSE)
#> 
#> Residuals:
#>       Min        1Q    Median        3Q       Max 
#> -0.078277 -0.017159 -0.002273  0.014414  0.084624 
#> 
#> Coefficients:
#>                     Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)       -0.8003164  0.1279285  -6.256 5.28e-09 ***
#> log(gnp)           0.9719129  0.0231977  41.897  < 2e-16 ***
#> trend(data.ts)    -0.0273093  0.0017152 -15.922  < 2e-16 ***
#> season(data.ts)Q2  0.0003588  0.0065645   0.055    0.956    
#> season(data.ts)Q3 -0.0019442  0.0065654  -0.296    0.768    
#> season(data.ts)Q4  0.0008598  0.0065667   0.131    0.896    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.02707 on 130 degrees of freedom
#> Multiple R-squared:  0.9964, Adjusted R-squared:  0.9963 
#> F-statistic:  7234 on 5 and 130 DF,  p-value: < 2.2e-16
# Parametre isimleri daha sonra kullanılmak üzere kaydediliyor.
coef.names <- names(coef(model))

# Hipotez Testi 1: linearHypothesis fonksiyonu ile tüm mevsimsel kukla değişken parametrelerinin birlikte istatistiki olarak anlamlı olup olmadığının testi.
linearHypothesis(model, c("season(data.ts)Q2 = 0", "season(data.ts)Q3 = 0", "season(data.ts)Q4 = 0")) ## p-değeri %5 anlamlılık düzeyinden büyük olduğundan boş hipotez reddedilemez ve mevsimsel kukla değişkenler kullanılmamalıdır.
linearHypothesis(model, coef.names[grep("season", coef.names)]) ## Yukarıdaki sonucun aynısını verir.