%matplotlib inline
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
from pandas_datareader.data import DataReader
from matplotlib import rcParams
# Restore old behavior of rounding default axis ranges
rcParams['axes.autolimit_mode'] = 'round_numbers'
rcParams['axes.xmargin'] = 0
rcParams['axes.ymargin'] = 0
dta_pl = pd.read_stata('data/data_PL.dta')
dta_pl.head()
yy = (2000+(dta_pl['t']-1)//4).astype(str)
qq = (1+(dta_pl['t']-1)%4).astype(str)
date = yy+'Q'+qq
from statsmodels.tsa.base.datetools import dates_from_str
date = dates_from_str(date)
dta_pl.index = date
dta_pl.head()
model_pl = sm.tsa.VAR(dta_pl[['GDP','HICP','WIB3M']])
results_pl = model_pl.fit(4)
results_pl.summary()
irf_pl = results_pl.irf(20)
irf_pl.plot(orth=True, impulse='WIB3M', signif=0.1)
fred = DataReader(['GDPC1','GDPDEF','FEDFUNDS','M2SL'], 'fred', start='1945', end='2020')
temp = fred.resample('QS').mean()
iacoviel = 100*np.log(temp).diff(4)
iacoviel['FEDFUNDS'] = temp['FEDFUNDS']
iacoviel = iacoviel.dropna()
iacoviel.columns = ['Y','P','R','M']
iacoviel.head()
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(14, 9))
iacoviel['Y'].to_period('D').plot(ax=ax1)
iacoviel['P'].to_period('D').plot(ax=ax2)
iacoviel['M'].to_period('D').plot(ax=ax3)
iacoviel['R'].to_period('D').plot(ax=ax4)
plt.show()
model = sm.tsa.VAR(iacoviel[['Y','P','R','M']])
model.select_order(8)
results = model.fit(6)
results.irf(20).plot()
plt.show()
results.irf(20).plot(orth=True, impulse='R', signif=0.05)
plt.savefig('Simple_VAR.pdf', transparent=True, bbox_inches='tight', pad_inches=0.05)
results.plot_forecast(4)