In [33]:
import pandas as pd
import numpy as np
import scipy as sp
import seaborn as sns
import statsmodels.api as sm
from statsmodels.formula.api import ols, rlm
import matplotlib.pyplot as plt
from patsy import dmatrix
%matplotlib inline
In [2]:
df = pd.read_csv("../data/brazil_gdp_inflation_ir.csv", dtype={'Time':np.float64, 'GDP':np.float64, 'Inflation':np.float64, 'Interest':np.float64}, index_col="Time")
In [3]:
df['RInterest'] = df.Interest - df.Inflation
brazil = df.sort()
brazil
Out[3]:
In [4]:
filter = brazil.Inflation < 11.0
sns.set(style="darkgrid")
plt.title(u"PIB vs Inflação até faixa de 10%")
ax = sns.regplot(brazil[filter].Inflation, brazil[filter].GDP, robust=True, n_boot=500)
ax.set_xlabel(u"Inflação")
ax.set_ylabel(u"PIB")
Out[4]:
In [5]:
sns.coefplot("GDP ~ Inflation", data=brazil[filter])
In [6]:
sns.residplot(brazil[brazil.Inflation < 11.0].Inflation, brazil[brazil.Inflation < 11.0].GDP, lowess=True)
Out[6]:
Um estudo recente [4] aponta para a falta de evidências nas explicações frequentemente fornecidas para que as taxas de juros no Brasil precisem ser tão altas e por tão longo tempo e sugerem:
Hence a wise central bank should consider "testing" the market to make sure it is not dealing with an extreme equilibrium configuration or a long standing disequilibrium.
Inpirado pelos 4 estudos citados até aqui resolvemos verificar a correlação entre taxas de juros e inflação nos patamares de até 10%.
In [7]:
filter = brazil.Inflation < 11.0
color = sns.color_palette()[2]
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
f.set_figwidth(12)
sns.regplot(brazil[filter].Interest, brazil[filter].Inflation, robust=True, n_boot=500, ax=ax1)
sns.regplot(brazil[filter].RInterest, brazil[filter].Inflation, robust=True, n_boot=500, ax=ax2).set_ylabel("")
ax1.set_xlabel(u"Taxa de juros nominal")
ax2.set_xlabel(u"Taxa de juros real")
ax1.set_ylabel(u"Inflação")
f.tight_layout()
Note inflação correlaciona positivamente com taxa de juros, porém isso se explica pelo fato de se subir os juros quando se entende que inflação está elevada. Alega-se em geral que variações nas taxas de juros levam ao menos 6 meses para atuarem sobre o mercado, assim nas próximas seções fazemos um shift de um e dois anos sobre a taxa de juros.
In [8]:
f = plt.figure()
filter = brazil.index > 1998
l1, = plt.plot(brazil[filter].index, brazil[filter].Interest, figure=f, label=u"Tx juros nominal")
l2, = plt.plot(brazil[filter].index, brazil[filter].Inflation, figure=f, label=u"Inflação")
l3, = plt.plot(brazil[filter].index, brazil[filter].RInterest, figure=f, label=u"Tx juros real")
f.legend(handles=[l1,l2,l3], labels=[u"Tx juros nominal",u"Inflação", u"Tx juros real"])
plt.title(u"Gráfico da série histórica analisada")
#f.tight_layout()
Out[8]:
In [9]:
brazil[filter].describe()
Out[9]:
Shift de um ano na taxa de juros.
In [10]:
del filter
brazil_ir_s1 = brazil.copy()
brazil_ir_s1.Interest = brazil.Interest.shift(1)
brazil_ir_s1.RInterest = brazil.RInterest.shift(1)
Sanity check
In [11]:
brazil_ir_s1
Out[11]:
In [12]:
color = sns.color_palette()[2]
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
f.set_figwidth(12)
sns.regplot(brazil_ir_s1.Interest, brazil_ir_s1.Inflation, robust=True, n_boot=500, ax=ax1)
sns.regplot(brazil_ir_s1.RInterest, brazil_ir_s1.Inflation, robust=True, n_boot=500, ax=ax2).set_ylabel("")
ax1.set_xlabel(u"Taxa de juros nominal do ano anterior")
ax2.set_xlabel(u"Taxa de juros real do ano anterior")
ax1.set_ylabel(u"Inflação")
f.tight_layout()
In [13]:
sns.coefplot("Inflation ~ RInterest", data=brazil_ir_s1, intercept=False)
In [44]:
model = ols("Inflation ~ RInterest + 1", brazil_ir_s1).fit()
model.summary()
Out[44]:
In [51]:
sns.residplot(brazil_ir_s1.RInterest, brazil_ir_s1.Inflation)
Out[51]:
In [47]:
model = rlm("Inflation ~ RInterest + 1", brazil_ir_s1).fit()
model.summary2()
Out[47]:
In [16]:
brazil_ir_s1.describe()
Out[16]:
Note que a não há evidência estatística de que taxas de juros maiores provocaram redução da inflação no ano seguinte!
Talvez os efeitos da taxas de juros no Brasil sejam meio retardados... :-) Vamos verificar para 2 anos de diferença
In [17]:
brazil_ir_s2 = brazil.copy()
brazil_ir_s2.Interest = brazil.Interest.shift(2)
brazil_ir_s2.RInterest = brazil.RInterest.shift(2)
In [18]:
sns.set(style="darkgrid")
color = sns.color_palette()[2]
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
f.set_figwidth(12)
sns.regplot(brazil_ir_s2.Interest, brazil_ir_s2.Inflation, robust=True, n_boot=500, ax=ax1)
sns.regplot(brazil_ir_s2.RInterest, brazil_ir_s2.Inflation, robust=True, n_boot=500, ax=ax2).set_ylabel("")
ax1.set_xlabel(u"Taxa de juros nominal de dois anos antes")
ax2.set_xlabel(u"Taxa de juros real de dois anos antes")
ax1.set_ylabel(u"Inflação")
f.tight_layout()
In [19]:
sns.coefplot("Inflation ~ RInterest", data=brazil_ir_s2)
In [52]:
model = ols("Inflation ~ RInterest + 1", brazil_ir_s2).fit()
model.summary()
Out[52]:
In [53]:
sns.residplot(brazil_ir_s2.RInterest, brazil_ir_s2.Inflation)
Out[53]:
In [49]:
model = rlm("Inflation ~ RInterest + 1", brazil_ir_s2).fit()
model.summary()
Out[49]:
Note que a não há evidência estatística de que taxas de juros maiores tenham provocado redução da inflação dois anos após!
Work in progress
In [ ]:
In [ ]: