Çalışmada enflasyon ve nominal faiz oranı verileri kullanılacaktır. Veri seti Dünya Bankası’ndan elde edildiğine göre ilk olarak WDI’yı çalıştırıyoruz
library(WDI)
Veri setimiz WDI’den elde edildiğinden dolayı aşağıdaki işlemi uygulaya biliriz. Sadece Türkiye için değerlendirme yapıldığı için ülkeyi TR olarak yazdık. Verileri isimlendirmek için “data” ismini kullandık.
“FR.INR.DPST” kodu ile gösterilen veri nominal faiz oranı,
“FP.CPI.TOTL.ZG” kodu ile gösterilen veri ise enflasyon oranını göstermektedir.
Kullanılan verilerin başlangıç tarihi 1978 yılından başladığından dolayı fonksiyonda start=1978 olarak gösterilmiştir.
data<-WDI(indicator=c("FR.INR.DPST","FP.CPI.TOTL.ZG"),country =c("TR"),start = 1978 )
Daha sonra veri setinin ilk 6 satırını görmek adına head(), fonksiyonu kullanılmıştır.
head(data)
## country iso2c iso3c year FR.INR.DPST FP.CPI.TOTL.ZG
## 1 Turkiye TR TUR 1978 6.000000 61.89704
## 2 Turkiye TR TUR 1979 7.333333 63.54311
## 3 Turkiye TR TUR 1980 8.000000 94.26086
## 4 Turkiye TR TUR 1981 26.500000 37.61478
## 5 Turkiye TR TUR 1982 45.000000 29.13751
## 6 Turkiye TR TUR 1983 45.333333 31.39027
Ardından veri setine ait değişkenlerin son 6 satrını görmek için tail(), fonskyionu kullanılmıştır.
tail(data)
## country iso2c iso3c year FR.INR.DPST FP.CPI.TOTL.ZG
## 40 Turkiye TR TUR 2017 15.28833 11.14431
## 41 Turkiye TR TUR 2018 23.28333 16.33246
## 42 Turkiye TR TUR 2019 25.40917 15.17682
## 43 Turkiye TR TUR 2020 13.35667 12.27896
## 44 Turkiye TR TUR 2021 20.70000 19.59649
## 45 Turkiye TR TUR 2022 27.04083 72.30884
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Veri seti kodlarla gösterilmiştir. Bunun için yeniden isimlendirmemiz gerekmektedir. Veri setine ait değişkenleri isimlendirmek için aşağıdaki işlemi uygulayabiliriz. Veri setinde nominal faiz oranına ait veriler 5. enflasyona ait veriler ise 6. sütunda olduğundan dolayı isimlendirirken interestrate=5, inflation=6 olarak yazılmıştır. Veri seti “df”olarak isimlendirilmiştir.
df<- data %>%
rename(interestrate=5,
inflation=6)
Daha sonra ise veri setinde fazla olan, yani veri setinde yer almasını istemediğimiz verileri select() fonksiyonu yardımı ile çıkara biliriz.
Bunun için select() fonksiyonuna veri setinde yer almasını istemediğimiz veri isimlerinin başına “-” işareti yazarak veri setinden çıkara biliriz.
Burada ise 2. yöntem kullanılmıştır. Veri setinde yer almasını istemediğimiz veri isimlerinin başına eksi işareti yazarak veri setinden çıkardık.
df <- df %>% select(-iso2c,-iso3c,-country)
Veri setini zaman serisine dönüştürmek için aşağıdaki işlem uygulanabilir.
İlk olarak “df” olarak isimlendirdiğimiz veri setinden nominal faiz oranını zaman serisine dönüştürmek için aşağıdaki işlemi uygulayabiliriz.
df$interestrate <- ts(df$interestrate,start=1978)
ardından “df” olarak isimlendirdiğimiz veri setinden enflasyon oranını zaman serisine dönüştürmek için aşağıdaki işlemi uygulayabiliriz.
df$inflation <- ts(df$inflation,start=1978)
Ardından veri setine ait grafiği elde etmek için plot() fonksiyonunu kullandık.
Aşağıda uygulanan işlemde “df” veri seti içinde yer alan enflasyon oranına ait grafiği gösterirsek “df$inflation” şeklinde yazmamız gerekmektedir. Ardından grafiğin renkli olmasını istersek col=“herhangi bir renk” yazılabilir. Son olarakta yatay eksenin ismi aynı kalır zaman gösterdiğinden dolayı dikey ekseninin ismini değiştirirsek ise ylab=“inflation” olarak yazılabilmektedir.
plot(df$inflation,col="green", ylab="inflation")
Veri setinde yer alan enflasyona ait açıklama nominal faiz oranı için de geçerli olup grafiği gösterilmektedir.
plot(df$interestrate,col="blue", ylab="interest rate")
Veri setine ait her iki değişkeni aynı grafik üzerinde gösterirsek aşağıdaki işlemi uygulayabiliriz.
Bunun için yine plot() fonksiyonu kullandık. Fonksiyon dahilinde yer alan
lty:line type’ın kısaltılması,(anlamı ise çizginin türünü gösterir,yani doğrunun kesik kesik olmasını gösterir,bunu 1,2,3 veya farklı sayı da yazılabilmektedir.)
lwd:line width’in kısaltmasıdır.(anlamı ise çizginin genişliğini göstermektedir. Yani çizginin kalın veya ince olmasını gösterir)
col: yine yukarıda ayrı ayrı grafikte de gösterildiği gibim grafikte yer alan doğruların rengini göstermektedir.
ylab: yatay hangi ismi istersek yazabiliriz. Yani yatay ekseni isimlendirmek için ylab kullanılmıştır.
daha sonra iki değişkeni de aynı grafik üzerinde gösterdiğimiz için ilk olarak df içinde inflation yazdık fakat df içinde interestrate’ i de göstermemiz için lines() fonksiyonu kullanılmıştır. Yine inflation için kullanılan işlemler interestrate için de kullanılmıştır. Ardından ise grafik üzerinde değişken isimlerini, renklerini ve grafikte nerede gösterildiğini göstermek aşağıdaki işlem uygulandı. Bunun için legend() fonksiyonu kullanılmış ve fonksiyon dahilinde ise değişken isimlerinin sağ üst köşede yer almasını istediğimiz için “topright” yazılmıştır. Eğer sol üst köşede yer almasını isteseydik o zaman “topleft” yazabilirdik.
Ardından yerini belirledikten sonra grafik üzerinde yer alan değişkenlere ait isimleri fonksiyon dahilinde c(“inflation”,“interest rate”) şeklinde yazdıktan sonra yine yukarıda açıklandığı üzere yine çizgi türü lty ve çizginin kalınlığını göstermek için ise lwd kullanılmıştır.
plot(df$inflation,lty=4,lwd=3,col="green",ylab="inflation and interest rate")
lines(df$interestrate,lty=6,lwd=3,col="blue")
legend("topright",c("inflation","interest rate"),lty = c(4,6),lwd = c(3,3),col=c("green","blue"))
VAR MODELİ
library(vars)
## Zorunlu paket yükleniyor: MASS
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
## Zorunlu paket yükleniyor: strucchange
## Zorunlu paket yükleniyor: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Zorunlu paket yükleniyor: sandwich
## Zorunlu paket yükleniyor: urca
## Zorunlu paket yükleniyor: lmtest
require(vars)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.4
## ✔ ggplot2 3.4.2 ✔ stringr 1.5.0
## ✔ lubridate 1.9.2 ✔ tibble 3.2.1
## ✔ purrr 1.0.1 ✔ tidyr 1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ stringr::boundary() masks strucchange::boundary()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ MASS::select() masks dplyr::select()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(urca)
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(tidyverse)
library(stargazer)
##
## Please cite as:
## Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
## R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
İlk olarak serilerin durağan olup olmadığını test etmek amacıyla ADF birim kök testi uygulanmıştır.
df<-as_tibble(df)
library(psych)
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
Veri setine ait değişkenlerin tanımlayıcı istatistiklerini elde etmek için describe(), fonksiyonu kullanılmıştır.
describe(df)
## vars n mean sd median trimmed mad min max range
## year 1 45 2000.00 13.13 2000.00 2000.00 16.31 1978.00 2022.00 44.00
## interestrate 2 45 38.14 24.18 27.04 36.58 20.29 6.00 87.79 81.79
## inflation 3 45 40.43 29.95 37.61 38.30 41.54 6.25 105.21 98.96
## skew kurtosis se
## year 0.00 -1.28 1.96
## interestrate 0.54 -1.06 3.60
## inflation 0.36 -1.25 4.46
Tanımlayıcı istatistiklerde dikkat edilecek en önemli bulgular çarpıklık(Skewness), basıklık (Kurtosis) ve normal dağılıma uygunluk değerleridir.
Tanımlayıcı istatistiklerde öncelikle çarpıklık değerleri 0’dan büyük bir değer ise sağa çarpık, 0’dan küçük değer ise sola çarpık olacaktır. Beklentimiz ise sola çarpık bir serinin olmasıdır. Dolayısıyla tablo değerlerine bakıldığı zaman nominal faiz oranı ve enflasyon değişkenlerine ait çarpıklık değerleri sırasıyla 0,54 ve 0,36’dır. Değerlerin 0 değerinin sağında yer almasından dolayı sağa çarpık olduğu görülmektedir.
Tabloda yer alan basıklık değerleri 3’ten büyük olduğu durumda seri sivri olacak ve 3’ten küçük olduğu durumda ise basık seri olacaktır. Beklentimiz serinin sivri olmasıdır (Cihangir ve Uğurlu, 2017: 290). Basıklık değerlerine bakıldığı zaman ise nominal faiz oranının basıklık değeri -1,06 ve enflasyonun basıklık değeri ise -1,25’ dir. Faiz oranının basıklık değeri 3’ten küçük olduğu için serinin basık olduğu ve enflasyonun basıklık değeri 3’ten küçük olduğu için ise serinin basık olduğu görülmektedir.
Daha sonra veri setine ait değişkenlerin durağanlık seviyelerini ölçmek için urca(), fonksiyonu kullanılmıştır.
library(urca)
ADF birim kök test sonuçlarını elde etmek için ilk olarak faiz oranının birim kök testi analizi yapılmıştır.
ADF birim kök sonuçları durağan olmadığından dolayı serilerin 1. dereceden farkı alınarak analiz edilmiştir.
InterestRateADFfark<-diff(df$interestrate, k=1)
InterestRateADF<-ur.df(df$interestrate,type = "drift",selectlags = "AIC")
Ardından enflasyona ait birim kök test analizi yapılmıştır.
InflationADF<-ur.df(df$inflation,type = "drift",selectlags = "AIC")
Birim kök testlerini özet halinda görebilmek adına summary(), fonksiyonu kullanılmıştır.
summary(InterestRateADF)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression drift
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -27.853 -4.644 -1.273 5.055 24.733
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.71921 3.18194 1.483 0.146
## z.lag.1 -0.10739 0.06993 -1.536 0.133
## z.diff.lag -0.16805 0.15355 -1.094 0.280
##
## Residual standard error: 10.75 on 40 degrees of freedom
## Multiple R-squared: 0.09855, Adjusted R-squared: 0.05347
## F-statistic: 2.186 on 2 and 40 DF, p-value: 0.1256
##
##
## Value of test-statistic is: -1.5356 1.2316
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau2 -3.58 -2.93 -2.60
## phi1 7.06 4.86 3.94
Sonuç olarak her değişkenlere ait birim kök testine göre seriler durağan değildir Ho= Faiz oranı, durağandır. Hipotez reddedilir. Test istatistik değerine bakıldığı zaman ve (tau2 değerlerinin sağında yer aldığı için) ve aynı zamanda olasılık değerlerine bakıldığı zaman da 0,05 değerinden büyük olduğu için serilerin durağan olmadığını görebiliriz.
summary(InflationADF)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression drift
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -48.013 -6.261 -2.765 2.234 49.873
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.88048 4.29143 1.370 0.178
## z.lag.1 -0.14550 0.08743 -1.664 0.104
## z.diff.lag -0.02601 0.17995 -0.145 0.886
##
## Residual standard error: 16.53 on 40 degrees of freedom
## Multiple R-squared: 0.07159, Adjusted R-squared: 0.02517
## F-statistic: 1.542 on 2 and 40 DF, p-value: 0.2264
##
##
## Value of test-statistic is: -1.6641 1.3856
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau2 -3.58 -2.93 -2.60
## phi1 7.06 4.86 3.94
Sonuç olarak her değişkenlere ait birim kök testine göre seriler durağan değildir Ho= Enflasyon oranı, durağandır. Hipotez reddedilir. Test istatistik değerine bakıldığı zaman ve (tau2 değerlerinin sağında yer aldığı için) ve aynı zamanda olasılık değerlerine bakıldığı zaman da 0,05 değerinden büyük olduğu için serilerin durağan olmadığını görebiliriz.
VAR MODELİ
Birim kök testlerinin ardından VAR analizi uygulanmıştır. Bunun için aşağıdaki işlemler sırasıyla uygulanmışıtır.
İlk olarak veri setine ait değişkenlein en uygun gecikme uzunluğunu bulmak için VARselect(), fonksiyonu kullanılmıştır.
lag<- VARselect(df, lag.max = 4)
estim<- VAR(df, p=1, type = "none")
Var modelini özet olarak görebilmemiz adına summary(), fonksiyonu kullanılmıltır.
summary(estim)
##
## VAR Estimation Results:
## =========================
## Endogenous variables: year, interestrate, inflation
## Deterministic variables: none
## Sample size: 44
## Log Likelihood: -168.411
## Roots of the characteristic polynomial:
## 1.001 0.8918 0.6275
## Call:
## VAR(y = df, p = 1, type = "none")
##
##
## Estimation results for equation year:
## =====================================
## year = year.l1 + interestrate.l1 + inflation.l1
##
## Estimate Std. Error t value Pr(>|t|)
## year.l1 1.000e+00 6.814e-07 1.468e+06 < 2e-16 ***
## interestrate.l1 -6.989e-05 4.404e-05 -1.587e+00 0.12
## inflation.l1 1.834e-04 3.588e-05 5.113e+00 7.8e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.004785 on 41 degrees of freedom
## Multiple R-Squared: 1, Adjusted R-squared: 1
## F-statistic: 2.563e+12 on 3 and 41 DF, p-value: < 2.2e-16
##
##
## Estimation results for equation interestrate:
## =============================================
## interestrate = year.l1 + interestrate.l1 + inflation.l1
##
## Estimate Std. Error t value Pr(>|t|)
## year.l1 0.002001 0.001430 1.399 0.1692
## interestrate.l1 0.712177 0.092419 7.706 1.69e-09 ***
## inflation.l1 0.189454 0.075295 2.516 0.0159 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 10.04 on 41 degrees of freedom
## Multiple R-Squared: 0.9546, Adjusted R-squared: 0.9513
## F-statistic: 287.6 on 3 and 41 DF, p-value: < 2.2e-16
##
##
## Estimation results for equation inflation:
## ==========================================
## inflation = year.l1 + interestrate.l1 + inflation.l1
##
## Estimate Std. Error t value Pr(>|t|)
## year.l1 0.002404 0.002320 1.036 0.306
## interestrate.l1 0.080301 0.149908 0.536 0.595
## inflation.l1 0.807115 0.122131 6.609 5.9e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 16.29 on 41 degrees of freedom
## Multiple R-Squared: 0.9004, Adjusted R-squared: 0.8931
## F-statistic: 123.5 on 3 and 41 DF, p-value: < 2.2e-16
##
##
##
## Covariance matrix of residuals:
## year interestrate inflation
## year 0.0000229 3.841e-03 6.394e-03
## interestrate 0.0038410 1.009e+02 6.057e+01
## inflation 0.0063939 6.057e+01 2.654e+02
##
## Correlation matrix of residuals:
## year interestrate inflation
## year 1.00000 0.07993 0.08203
## interestrate 0.07993 1.00000 0.37022
## inflation 0.08203 0.37022 1.00000
En uygun gecikme uzunluğu AIC bilgi kriterlerine göre 2 olarak bulunmuştur.
varmodeli<-var(1:length(df),)
var.a <- VAR(df,
lag.max = 1,
ic = "AIC",
type = "none")
summary(var.a)
##
## VAR Estimation Results:
## =========================
## Endogenous variables: year, interestrate, inflation
## Deterministic variables: none
## Sample size: 44
## Log Likelihood: -168.411
## Roots of the characteristic polynomial:
## 1.001 0.8918 0.6275
## Call:
## VAR(y = df, type = "none", lag.max = 1, ic = "AIC")
##
##
## Estimation results for equation year:
## =====================================
## year = year.l1 + interestrate.l1 + inflation.l1
##
## Estimate Std. Error t value Pr(>|t|)
## year.l1 1.000e+00 6.814e-07 1.468e+06 < 2e-16 ***
## interestrate.l1 -6.989e-05 4.404e-05 -1.587e+00 0.12
## inflation.l1 1.834e-04 3.588e-05 5.113e+00 7.8e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.004785 on 41 degrees of freedom
## Multiple R-Squared: 1, Adjusted R-squared: 1
## F-statistic: 2.563e+12 on 3 and 41 DF, p-value: < 2.2e-16
##
##
## Estimation results for equation interestrate:
## =============================================
## interestrate = year.l1 + interestrate.l1 + inflation.l1
##
## Estimate Std. Error t value Pr(>|t|)
## year.l1 0.002001 0.001430 1.399 0.1692
## interestrate.l1 0.712177 0.092419 7.706 1.69e-09 ***
## inflation.l1 0.189454 0.075295 2.516 0.0159 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 10.04 on 41 degrees of freedom
## Multiple R-Squared: 0.9546, Adjusted R-squared: 0.9513
## F-statistic: 287.6 on 3 and 41 DF, p-value: < 2.2e-16
##
##
## Estimation results for equation inflation:
## ==========================================
## inflation = year.l1 + interestrate.l1 + inflation.l1
##
## Estimate Std. Error t value Pr(>|t|)
## year.l1 0.002404 0.002320 1.036 0.306
## interestrate.l1 0.080301 0.149908 0.536 0.595
## inflation.l1 0.807115 0.122131 6.609 5.9e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 16.29 on 41 degrees of freedom
## Multiple R-Squared: 0.9004, Adjusted R-squared: 0.8931
## F-statistic: 123.5 on 3 and 41 DF, p-value: < 2.2e-16
##
##
##
## Covariance matrix of residuals:
## year interestrate inflation
## year 0.0000229 3.841e-03 6.394e-03
## interestrate 0.0038410 1.009e+02 6.057e+01
## inflation 0.0063939 6.057e+01 2.654e+02
##
## Correlation matrix of residuals:
## year interestrate inflation
## year 1.00000 0.07993 0.08203
## interestrate 0.07993 1.00000 0.37022
## inflation 0.08203 0.37022 1.00000
var modelini tek başına yorumlamak anlamlı değil bunu araç olarak kullanıyoruz. Bunun için etki tepki fonksiyonlarını alıp eğer bir standart sapmalı şok verilirse bapımlı değişken bağımsız değişkenden nasıl etkileniyor ona bakmamız gerekir. Bunun için etki tepki fonksiyonu kullanırız.
impulse: etki
response: tepki( cevap)
n.ahead = 20 ise 20 dönemi incelediğimizi gösterir
etki_tepki <-irf(var.a,
impulse = c("inflation"),
response = "interestrate",
n.ahead = 20)
Ardından etki tepki fonksiyonlarını inceleyip grafik şeklinde görebilmemiz için aşağıdaki işlem uygulanmıştır.
plot(etki_tepki)
Kırmızı çizgi standart hatayı göstermektedir. Bu kırmızı çizgi içerisinde yer alan band anlamlı değildir.
Yaklaşık 7 dönem boyunca artan standart hataya karşılık faiz oranı artan tepki göstermiştir.
Enflasyona verilen tepki ilk 7 dönem arttı zamanla azaldı ardından dengeye geldiği görülmüştür.
Eğer bandın içerisinde 0 değeri olursa ( neredeyse 9. ve 15.dönemler arasında) bu şekilde tepki gösterdiğini ifade edemeyiz.
Dolayısıyla çalışma sonucuna bakılırsa şokların, kırılmaların olduğu yapısal değişiklerin olduğu dummylere dikkat edilmediği görülmüştür.