In [1]:
# This line configures matplotlib to show figures embedded in the notebook,
# instead of opening a new window for each figure. More about that later.
# If you are using an old version of IPython, try using '%pylab inline' instead.
%matplotlib inline
from pysolve.model import Model
from pysolve.utils import is_close,round_solution
import matplotlib.pyplot as plt
In [2]:
def create_openflex_model():
model = Model()
model.set_var_default(0)
model.set_param_default(0)
model.var('BdUKUK', desc='Bills issued by the UK acquired by the UK: demand')
model.var('BsUKUK', desc='Bills issued by the UK acquired by the UK: supply')
model.var('BcbdUKUS', desc='Bills issued by the US, demanded by the UK central bank')
model.var('BcbdUKUK', desc='Bills issued by the UK, demanded by the UK central bank')
model.var('BcbsUKUK', desc='Bills issued by the UK, supplied to the UK central bank')
model.var('BsUK', desc='Bills issued by the UK - total supply')
model.var('BdUKUS', desc='Bills issued by the US acquired by the UK: demand')
model.var('BsUKUS', desc='Bills issued by the US acquired by the UK: supply')
model.var('BdUSUK', desc='Bills issued by the UK acquired by the US: demand')
model.var('BsUSUK', desc='Bills issued by the UK acquired by the US: supply')
model.var('BsUS', desc='Bills issued by the US - total supply')
model.var('BdUSUS', desc='Bills issued by the US acquired by the US: demand')
model.var('BsUSUS', desc='Bills issued by the US acquired by the US: supply')
model.var('BcbdUSUS', desc='Bills issued by the US, demanded by the US central bank')
model.var('BcbsUSUS', desc='Bills issued by the US, supplied to the US central bank')
model.var('CkUK', desc='Real consumption in the UK')
model.var('CkUS', desc='Real consumption in the US')
model.var('CABUK', desc='Current account balance in the UK')
model.var('CABUS', desc='Current account balance in the US')
model.var('CONSUK', desc='Consumption in the UK')
model.var('CONSUS', desc='Consumption in the US')
model.var('DSUK', desc='Domestic sales in the UK')
model.var('DSUS', desc='Domestic sales in the US')
model.var('DSkUK', desc='Real domestic sales in the UK')
model.var('DSkUS', desc='Real domestic sales in the US')
model.var('FcbUK', desc='Profits of the central bank in the UK')
model.var('FcbUS', desc='Profits of the central bank in the US')
model.var('GUK', desc='Government expenditure in the UK')
model.var('GUS', desc='Government expenditure in the US')
model.var('HdUK', desc='Demand for cash of the UK')
model.var('HsUK', desc='Supply of cash for the UK')
model.var('HdUS', desc='Demand for cash of the US')
model.var('HsUS', desc='Supply for cash for the US')
model.var('IMUK', desc='Imports of the UK from the US')
model.var('IMUS', desc='Imports of the US from the UK')
model.var('IMkUK', desc='Real imports of the UK from the US')
model.var('IMkUS', desc='Real imports of the US from the UK')
model.var('KABUK', desc='Current account balance in the UK')
model.var('KABUS', desc='Current account balance in the US')
model.var('KABPUK', desc='Capital account balance in the UK, excluding official transactions')
model.var('KABPUS', desc='Capital account balance in the US, excluding official transactions')
model.var('NAFAUK', desc='Net accumulation of financial assets in the UK')
model.var('NAFAUS', desc='Net accumulation of financial assets in the US')
model.var('NUK', desc='Employment in the UK')
model.var('NUS', desc='Employment in the US')
model.var('PDSUK', desc='Price of domestic sales in the UK')
model.var('PDSUS', desc='Price of domestic sales in the US')
model.var('PGUK', desc='Price of gold in the UK')
model.var('PMUK', desc='Price of imports in the UK')
model.var('PMUS', desc='Price of imports in the US')
model.var('PSUK', desc='Price of sales in the UK')
model.var('PSUS', desc='Price of sales in the US')
model.var('PSBRUK', desc='Government deficit in the UK')
model.var('PSBRUS', desc='Government deficit in the US')
model.var('PYUK', desc='Price of output in the UK')
model.var('PYUS', desc='Price of output in the US')
model.var('PXUK', desc='Price of exports in the UK')
model.var('PXUS', desc='Price of exports in the US')
model.var('SUK', desc='Real sales in the UK')
model.var('SUS', desc='Real sales in the US')
model.var('SkUK', desc='Real sales in the UK')
model.var('SkUS', desc='Real sales in the US')
model.var('TUK', desc='Tax revenue in the UK')
model.var('TUS', desc='Tax revenue in the US')
model.var('VUK', desc='Net financial assets of the UK')
model.var('VUS', desc='Net financial assets of the US')
model.var('VkUK', desc='Real net financial assets of the UK')
model.var('VkUS', desc='Real net financial assets of the US')
model.var('XUK', desc='Exports from the UK to the US')
model.var('XUS', desc='Exports from the US to the UK')
model.var('XkUK', desc='Real exports from the U to the UK')
model.var('XkUS', desc='Real exports from the U to the US')
model.var('XRUK', desc='Exchange rate: units of UK currency against 1 unit of US currency')
model.var('XRUS', desc='Exchange rate: units of US currency against 1 unit of UK currency')
model.var('YDrUK', desc='Disposable income in the UK')
model.var('YDrUS', desc='Disposable income in the US')
model.var('YDhsUK', desc='Haig-Simons disposable income in the UK')
model.var('YDhsUS', desc='Haig-Simons disposable income in the US')
model.var('YDhskUK', desc='Real Haig-Simons disposable income in the UK')
model.var('YDhskUS', desc='Real Haig-Simons disposable income in the US')
model.var('YDhsekUK', desc='Expected real Haig-Simons disposable income in the UK')
model.var('YDhsekUS', desc='Expected real Haig-Simons disposable income in the US')
model.var('YUK', desc='Income in the UK')
model.var('YUS', desc='Income in the US')
model.var('YkUK', desc='Real income in the UK')
model.var('YkUS', desc='Real income in the US')
model.param('BcbsUKUS', desc='Bills issued by the US, supplied to the UK central bank')
model.param('DXREUK', desc='Expected change in the exchange rate of the UK (measured as units of the UK currency against 1 unit of the US currency)')
model.param('DXREUS', desc='Expected change in the exchange rate of the US (measured as units of the US currency against 1 unit of the UK currency)')
model.param('GkUK', desc='Real government expenditure in the UK')
model.param('GkUS', desc='Real government expenditure in the US')
model.param('ORUK', desc='Gold reserves in the UK')
model.param('ORUS', desc='Gold reserves in the US')
model.param('PGUS', desc='Price of gold in the US')
model.param('PRUK', desc='Productivity in the UK')
model.param('PRUS', desc='Productivity in the US')
model.param('RUK', desc='Interest rate on the UK bills')
model.param('RUS', desc='Interest rate on the US bills')
model.param('WUK', desc='Nominal wage rate in the UK')
model.param('WUS', desc='Nominal wage rate in the US')
model.param('XREUK', desc='Expected exchange rate: units of UK currency against 1 unit of US currency')
model.param('XREUS', desc='Expected exchange rate: units of US currency against 1 unit of UK currency')
model.param('alpha1UK', desc='Propensity to consume out of income in the UK')
model.param('alpha2UK', desc='Propensity to consume out of wealth in the UK')
model.param('alpha1US', desc='Propensity to consume out of income in the US')
model.param('alpha2US', desc='Propensity to consume out of wealth in the US')
model.param('eps0', desc='Parameter determining real exports in the UK')
model.param('eps1', desc='Parameter determining real exports in the UK')
model.param('eps2', desc='Parameter determining real exports in the UK')
model.param('lambda10', desc='Parameter in asset demand function')
model.param('lambda11', desc='Parameter in asset demand function')
model.param('lambda12', desc='Parameter in asset demand function')
model.param('lambda20', desc='Parameter in asset demand function')
model.param('lambda21', desc='Parameter in asset demand function')
model.param('lambda22', desc='Parameter in asset demand function')
model.param('lambda30', desc='Parameter in asset demand function')
model.param('lambda31', desc='Parameter in asset demand function')
model.param('lambda32', desc='Parameter in asset demand function')
model.param('lambda40', desc='Parameter in asset demand function')
model.param('lambda41', desc='Parameter in asset demand function')
model.param('lambda42', desc='Parameter in asset demand function')
model.param('lambda50', desc='Parameter in asset demand function')
model.param('lambda51', desc='Parameter in asset demand function')
model.param('lambda52', desc='Parameter in asset demand function')
model.param('mu0', desc='Parameter determining real imports in the UK')
model.param('mu1', desc='Parameter determining real imports in the UK')
model.param('mu2', desc='Parameter determining real imports in the UK')
model.param('nu0m', desc='Parameter determining import prices in the UK')
model.param('nu1m', desc='Parameter determining import prices in the UK')
model.param('nu0x', desc='Parameter determining import prices in the UK')
model.param('nu1x', desc='Parameter determining import prices in the UK')
model.param('thetaUK', desc='Tax rate in the UK')
model.param('thetaUS', desc='Tax rate in the US')
model.param('phiUK', desc='mark-up in the UK')
model.param('phiUS', desc='mark-up in the US')
# Accounting Identities
# ---------------------
# 12.1 : Disposable income in the UK
model.add('YDrUK = (YUK + RUK(-1)*BdUKUK(-1) + XRUS*RUS(-1)*BsUKUS(-1))*(1 - thetaUK) + d(XRUS)*BsUKUS(-1)')
model.add('YDhsUK = YDrUK + d(XRUS)*BsUKUS(-1)') # 12.2 : Haig-Simons disposable income in the UK
model.add('VUK - VUK(-1) = YDrUK - CONSUK') # 12.3 : Wealth accumulation in the UK
# 12.4 : Disposable income in the US
model.add('YDrUS = (YUS + RUS(-1)*BdUSUS(-1) + XRUK*RUK(-1)*BsUSUK(-1))*(1 - thetaUS) + d(XRUK)*BsUSUK(-1)')
model.add('YDhsUS = YDrUS + d(XRUK)*BsUSUK(-1)') # 12.5 : Haig-Simons disposable income in the US
model.add('VUS - VUS(-1) = YDrUS - CONSUS') # 12.6 : Wealth accumulation in the US
model.add('TUK = thetaUK*(YUK + RUK(-1)*BdUKUK(-1) + XRUS*RUS(-1)*BsUKUS(-1))') # 12.7 : Taxes in the UK
model.add('TUS = thetaUS*(YUS + RUS(-1)*BdUSUS(-1) + XRUK*RUK(-1)*BsUSUK(-1))') # 12.8 : Taxes in the US
# Equations 12.9 and 12.10 dropped in favor on 12.53 and 12.54
model.add('FcbUK = RUK(-1)*BcbdUKUK(-1) + RUS(-1)*BcbsUKUS(-1)*XRUS') # 12.11 : UK central bank profits
model.add('FcbUS = RUS(-1)*BcbdUSUS(-1)') # 12.12 : US central bank profits
model.add('BsUK = BsUK(-1) + GUK + RUK(-1)*BsUK(-1) - TUK - FcbUK') # 12.13 : UK Govt budget constraint
model.add('BsUS = BsUS(-1) + GUS + RUS(-1)*BsUS(-1) - TUS - FcbUS') # 12.14 : US Govt budget constraint
# 12.15 : UK Current account balance
model.add('CABUK = XUK - IMUK + XRUS*RUS(-1)*BsUKUS(-1) - RUK(-1)*BsUSUK(-1) + RUS(-1)*BcbsUKUS(-1)*XRUS')
# 12.16 : UK Capital account balance
model.add('KABUK = KABPUK - (XRUS*d(BcbsUKUS) + PGUK*d(ORUK))')
# 12.17 : US Current acount balance
model.add('CABUS = XUS - IMUS + XRUK*RUK(-1)*BsUSUK(-1) - RUS(-1)*BsUKUS(-1) - RUS(-1)*BcbsUKUS(-1)')
# 12.18 : US Capital account balance
model.add('KABUS = KABPUS + d(BcbsUKUS) - PGUS*d(ORUS)')
model.add('KABPUK = -d(BsUKUS)*XRUS + d(BsUSUK)') # 12.19 : UK capital account balance, net of official transactions
model.add('KABPUS = -d(BsUSUK)*XRUK + d(BsUKUS)') # 12.20 : US capital account balance, net of official transactions
# Trade
# -----
# 12.21 : Import prices in UK
model.add('PMUK = exp(nu0m + nu1m*log(PYUS) + (1 - nu1m)*log(PYUK) - nu1m*log(XRUK))')
# 12.22 : Export prices in UK
model.add('PXUK = exp(nu0x + nu1x*log(PYUS) + (1 - nu1x)*log(PYUK) - nu1x*log(XRUK))')
model.add('PXUS = PMUK*XRUK') # 12.23 : Export prices in US
model.add('PMUS = PXUK*XRUK') # 12.24 : Import prices in US
# 12.25 : Real exports from UK, depends on current relative price
model.add('XkUK = exp(eps0 - eps1*log(PMUS/PYUS) + eps2*log(YkUS))')
# 12.26 : Real imports of UK
model.add('IMkUK = exp(mu0 - mu1*log(PMUK(-1)/PYUK(-1)) + mu2*log(YkUK))')
model.add('XkUS = IMkUK') # 12.27 : Real exports from US
model.add('IMkUS = XkUK') # 12.28 : Real imports of US
model.add('XUK = XkUK*PXUK') # 12.29 : Exports of UK
model.add('XUS = XkUS*PXUS') # 12.30 : Exports of US
model.add('IMUK = IMkUK*PMUK') # 12.31 : Imports of UK
model.add('IMUS = IMkUS*PMUS') # 12.32 : Imports of US
# Income and expenditure
# ----------------------
model.add('VkUK = VUK/PDSUK') # 12.33 : Real wealth in UK
model.add('VkUS = VUS/PDSUS') # 12.34 : Real wealth in US
# 12.35 : Real Haig-Simons disposable income in UK
model.add('YDhskUK = YDrUK/PDSUK - VkUK(-1)*d(PDSUK)/PDSUK')
# 12.36 : Real Haig-Simons disposable income in US
model.add('YDhskUS = YDrUS/PDSUS - VkUS(-1)*d(PDSUS)/PDSUS')
# 12.37 : Real consumption in UK
model.add('CkUK = alpha1UK*YDhsekUK + alpha2UK*VkUK(-1)')
# 12.38 : Real consumption in US
model.add('CkUS = alpha1US*YDhsekUS + alpha2US*VkUS(-1)')
# 12.39 Expected real Haig-Simons disposable income in UK
model.add('YDhsekUK = (YDhskUK + YDhskUK(-1))/2')
# 12.40 Expected real Haig-Simons disposable income in US
model.add('YDhsekUS = (YDhskUS + YDhskUS(-1))/2')
model.add('SkUK = CkUK + GkUK + XkUK') # 12.41 : Real sales in UK
model.add('SkUS = CkUS + GkUS + XkUS') # 12.42 : Real sales in US
model.add('SUK = SkUK*PSUK') # 12.43 : Value of sales in UK
model.add('SUS = SkUS*PSUS') # 12.44 : Value of sales in US
model.add('PSUK = (1 + phiUK)*(WUK*NUK + IMUK)/SkUK') # 12.45 : Price of sales in UK
model.add('PSUS = (1 + phiUS)*(WUS*NUS + IMUS)/SkUS') # 12.46 : Price of sales in US
model.add('PDSUK = (SUK - XUK)/(SkUK - XkUK)') # 12.47 : Price of domestic sales in UK
model.add('PDSUS = (SUS - XUS)/(SkUS - XkUS)') # 12.48 : Price of domestic sales in US
model.add('DSUK = SUK - XUK') # 12.49 : Domestic sales in UK
model.add('DSUS = SUS - XUS') # 12.50 : Domestic sales in US
model.add('DSkUK = CkUK + GkUK') # 12.51 : Real domestic sales in UK
model.add('DSkUS = CkUS + GkUS') # 12.52 : Real domestic sales in US
model.add('YUK = SUK - IMUK') # 12.53 : Value of output in UK
model.add('YUS = SUS - IMUS') # 12.54 : Value of output in US
model.add('YkUK = SkUK - IMkUK') # 12.55 : Value of real output in UK
model.add('YkUS = SkUS - IMkUS') # 12.56 : Value of real output in US
model.add('PYUK = YUK/YkUK') # 12.57 : Price of output in UK
model.add('PYUS = YUS/YkUS') # 12.58 : Price of output in US
model.add('CONSUK = CkUK*PDSUK') # 12.59 : Consumption in UK
model.add('CONSUS = CkUS*PDSUS') # 12.60 : Consumption in US
model.add('GUK = GkUK*PDSUK') # 12.61 : Govt expenditure in UK
model.add('GUS = GkUS*PDSUS') # 12.62 : Govt expenditure in US
# Note : tax definitions in the book as eqns 12.63 and 12.64 are
# already defined here as eqns 12.7 and 12.8
model.add('NUK = YkUK/PRUK') # 12.65 : Employment in UK
model.add('NUS = YkUS/PRUS') # 12.66 : Employment in US
# Asset Demands
# -------------
# 12.67 : Demand for UK bills in UK
model.add('BdUKUK = VUK*(lambda10 + lambda11*RUK - lambda12*(RUS + DXREUS))')
# 12.68 : Demand for US bills in UK
model.add('BdUKUS = VUK*(lambda20 - lambda21*RUK + lambda22*(RUS + DXREUS))')
model.add('HdUK = VUK - BdUKUK - BdUKUS') # 12.69 : Demand for money in UK
# 12.70 : Demand for US bills in US
model.add('BdUSUS = VUS*(lambda40 + lambda41*RUS - lambda42*(RUK + DXREUK))')
# 12.71 : Demand for UK bills in US
model.add('BdUSUK = VUS*(lambda50 - lambda51*RUS + lambda52*(RUK + DXREUK))')
model.add('HdUS = VUS - BdUSUS - BdUSUK') # 12.72 : Demand for money in US
# Asset Supplies
# --------------
model.add('HsUS = HdUS') # 12.77 : Supply of cash in US
model.add('BsUSUS = BdUSUS') # 12.78 : Supply of US bills to US
model.add('BcbsUSUS = BcbdUSUS') # 12.79 : Supply of US bills to US central bank
model.add('HsUK = HdUK') # 12.80 : Supply of cash in UK
model.add('BsUKUK = BdUKUK') # 12.81 : Bills issued by UK acquired by UK
model.add('BcbsUKUK = BcbdUKUK') # 12.82 : Supply of UK bills to UK central bank
# model.add('BcbsUKUK = BsUK - BsUKUK - BsUSUK')
# 12.83 : Balance sheet of US central bank
model.add('BcbdUSUS = BcbdUSUS(-1) + d(HsUS) - d(ORUS)*PGUS ')
# 12.84 : Balance sheet of UK central bank
model.add('BcbdUKUK = BcbdUKUK(-1) + d(HsUK) - d(BcbsUKUS)*XRUS - d(ORUK)*PGUK')
model.add('PGUK = PGUS/XRUK') # 12.85 : Price of gold is equal in US and UK
model.add('XRUS = 1/XRUK') # 12.86 : US exchange rate
model.add('BsUSUK = BdUSUK*XRUS') # 12.87 : Equilibrium condition for bills issued by UK acquired by US
model.add('BcbdUKUS = BcbsUKUS*XRUS') # 12.88 : Equilibrium conditioin for bills issued by US acquired by UK central bank
# 12.89FL : UK Exchange rate
model.add('XRUK = BsUKUS/BdUKUS') # 12.89FL :
# 12.90FL: Supply of UK bills to US
model.add('BsUKUS = BsUS - BsUSUS - BcbdUSUS - BcbsUKUS')
# 12.90F : Supply of UK bills to us
# model.add('BcbsUKUS = BsUS - BsUSUS - BcbdUSUS - BsUKUS')
# Government deficits in the UK
model.add('PSBRUK = GUK + RUK(-1)*BsUK(-1) - TUK - FcbUK')
# Government deficits in the US
model.add('PSBRUS = GUS + RUS(-1)*BsUS(-1) - TUS - FcbUS')
model.add('NAFAUK = PSBRUK + CABUK') # Net accumulation of financial assets in the UK
model.add('NAFAUS = PSBRUS + CABUS') # Net accumulation of financial assets in the US
return model
openflex_parameters = {'alpha1UK': 0.75,
'alpha1US': 0.75,
'alpha2UK': 0.13333,
'alpha2US': 0.13333,
'eps0': -2.1,
'eps1': 0.7,
'eps2': 1,
'lambda10': 0.7,
'lambda11': 5,
'lambda12': 5,
'lambda20': 0.25,
'lambda21': 5,
'lambda22': 5,
'lambda40': 0.7,
'lambda41': 5,
'lambda42': 5,
'lambda50': 0.25,
'lambda51': 5,
'lambda52': 5,
'mu0': -2.1,
'mu1': 0.7,
'mu2': 1,
'nu0m': -0.00001,
'nu0x': -0.00001,
'nu1m': 0.7,
'nu1x': 0.5,
'phiUK': 0.2381,
'phiUS': 0.2381,
'thetaUK': 0.2,
'thetaUS': 0.2,
}
openflex_exogenous = {'BcbsUKUS': 0.02031,
'DXREUS': 0,
'GkUK': 16,
'GkUS': 16,
'ORUK': 7,
'PGUS': 1,
'PRUK': 1.3333,
'PRUS': 1.3333,
'RUK': 0.03,
'RUS': 0.03,
'WUK': 1,
'WUS': 1,
'BcbdUKUK': 0.27984,
'BcbsUKUK': 0.27984,
'BcbdUKUS': 0.0203,
'BcbdUSUS': 0.29843,
'BcbsUSUS': 0.29843,
'BsUK': 138.94,
'BdUKUK': 102.18,
'BsUKUK': 102.18,
'BdUKUS': 36.493,
'BsUKUS': 36.504,
'BsUS': 139.02,
'BdUSUK': 36.497,
'BsUSUK': 36.487,
'BdUSUS': 102.19,
'BsUSUS': 102.19,
'HdUK': 7.2987,
'HsUK': 7.2987,
'HdUS': 7.2995,
'HsUS': 7.2995,
'ORUS': 7,
'VkUK': 152.62,
'VkUS': 152.63,
'VUK': 145.97,
'VUS': 145.99001,
'CkUK': 81.393,
'CkUS': 81.401,
'CABUK': 0,
'CABUS': 0,
'CONSUK': 77.851,
'CONSUS': 77.86,
'DSkUK': 97.393,
'DSkUS': 97.401,
'DSUK': 93.154,
'DSUS': 93.164,
'DXREUK': 0,
'FcbUK': 0.00869,
'FcbUS': 0.00895,
'GUK': 15.304,
'GUS': 15.304,
'IMkUK': 11.928,
'IMkUS': 11.926,
'IMUK': 11.407,
'IMUS': 11.409,
'KABPUK': 0.00002,
'KABPUS': -0.00002,
'NUK': 73.046,
'NUS': 73.054,
'PDSUK': 0.95648,
'PDSUS': 0.95649,
'PGUK': 0.99971,
'PMUK': 0.95628,
'PMUS': 0.95661,
'PSUK': 0.95646,
'PSUS': .9565,
'PXUK': 0.95634,
'PXUS': 0.95656,
'PYUK': 0.95648,
'PYUS': 0.95649,
'SkUK': 109.32,
'SkUS': 109.33,
'SUK': 104.56,
'SUS': 104.57,
'TUK': 19.463,
'TUS': 19.465,
'XkUK': 11.926,
'XkUS': 11.928,
'XUK': 11.406,
'XUS': 11.41,
'XRUK': 1.0003,
'XRUS': 0.99971,
'XREUK': 1.0003,
'XREUS': 0.99971,
'YkUK': 97.392,
'YkUS': 97.403,
'YUK': 93.154,
'YUS': 93.164,
'YDrUK': 77.851,
'YDrUS': 77.86,
'YDhskUK': 81.394,
'YDhskUS': 81.402,
'YDhsekUK': 81.394,
'YDhsekUS': 81.402,
}
In [3]:
baseline = create_openflex_model()
baseline.set_values(openflex_parameters)
baseline.set_values(openflex_exogenous)
# To get the model to converge, I use a different method for solving the set of equations.
for i in xrange(100):
baseline.solve(iterations=200, threshold=1e-4, method='broyden')
In [4]:
eps0 = create_openflex_model()
eps0.set_values(openflex_parameters)
eps0.set_values(openflex_exogenous)
for _ in xrange(10):
eps0.solve(iterations=200, threshold=1e-4, method='broyden')
eps0.set_values({'eps0': -2.2})
for _ in xrange(90):
eps0.solve(iterations=200, threshold=1e-4, method='broyden')
In [5]:
caption = '''
Figure 12.5A Effect of an decrease in the UK propensity to export, within a
flexible exchange rate regime, on various UK variables: current account balance,
trade balance and government budget deficit.'''
cabdata = [s['CABUK'] for s in eps0.solutions[5:]]
xidata = [s['XUK'] - s['IMUK'] for s in eps0.solutions[5:]]
psbrdata = [s['PSBRUK'] for s in eps0.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.plot(cabdata, linestyle='-', color='b')
axes.plot(xidata, linestyle='--', linewidth=2, color='g')
axes.plot(psbrdata, linestyle=':', linewidth=2, color='r')
# add labels
plt.text(18, -0.5, 'UK current account balance')
plt.text(15, 0, 'UK trade balance')
plt.text(6, 0.35, 'UK budget deficit')
fig.text(0.1, -.15, caption);
In [6]:
caption = '''
Figure 12.5B Effect of the sterling exchange rate of a decrease in the
UK propensity to export, within a flexible exchange rate regime.'''
xrdata = [s['XRUK'] for s in eps0.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.plot(xrdata, linestyle='-', color='b')
# add labels
plt.text(21, 0.9, 'UK currency in dollars')
fig.text(0.1, -.05, caption);
In [7]:
caption = '''
Figure 12.5C Effect of a decrease in the UK propensity to export, within a
flexible exchange rate regime, on various UK price indices: export prices,
import prices and domestic sales prices.'''
pxdata = [s['PXUK'] for s in eps0.solutions[5:]]
pmdata = [s['PMUK'] for s in eps0.solutions[5:]]
pdsdata = [s['PDSUK'] for s in eps0.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.set_ylim(0.95, 1.16)
axes.plot(pxdata, linestyle='-', color='b')
axes.plot(pmdata, linestyle='--', linewidth=2, color='g')
axes.plot(pdsdata, linestyle=':', linewidth=2, color='r')
# add labels
plt.text(40, 1.03, 'Price of UK exports')
plt.text(20, 1.10, 'Price of UK imports')
plt.text(40, 0.97, 'Price of UK domestic sales')
fig.text(0.1, -.1, caption);
In [8]:
caption = '''
Figure 12.5D Effect of a decrease in the UK propensity to export, within a
flexible exchange rate regime, on the UK and US real GDP.'''
ukdata = [s['YkUK'] for s in eps0.solutions[5:]]
usdata = [s['YkUS'] for s in eps0.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.plot(ukdata, linestyle='-', color='b')
axes.plot(usdata, linestyle='--', linewidth=2, color='g')
# add labels
plt.text(15, 96, 'UK real GDP')
plt.text(15, 98.7, 'US real GDP')
fig.text(0.1, -.05, caption);
In [9]:
gkus = create_openflex_model()
gkus.set_values(openflex_parameters)
gkus.set_values(openflex_exogenous)
for _ in xrange(10):
gkus.solve(iterations=200, threshold=1e-4, method='broyden')
gkus.set_values({'GkUS': 18})
for _ in xrange(90):
gkus.solve(iterations=200, threshold=1e-4, method='broyden')
In [10]:
caption = '''
Figure 12.6A Effect of a step increase in real US government expenditures, within
a flexible exchange rate regime, on the US and UK real GDP.'''
ukdata = [s['YkUK'] for s in gkus.solutions[5:]]
usdata = [s['YkUS'] for s in gkus.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.plot(ukdata, linestyle='-', color='b')
axes.plot(usdata, linestyle='--', linewidth=2, color='g')
# add labels
plt.text(25, 98, 'UK real output')
plt.text(25, 106, 'US real output')
fig.text(0.1, -.05, caption);
In [11]:
caption = '''
Figure 12.6B Effect of a step increase in real US government expenditures, within a
flexible exchange rate regime, on the main US balances, net accumulation of financial
assets, government budget deficit, and current account balance.'''
nafadata = [s['NAFAUS'] for s in gkus.solutions[5:]]
cabdata = [s['CABUS'] for s in gkus.solutions[5:]]
psbrdata = [s['PSBRUS'] for s in gkus.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.plot(nafadata, linestyle='-', color='b')
axes.plot(cabdata, linestyle='--', linewidth=2, color='g')
axes.plot(psbrdata, linestyle=':', linewidth=2, color='r')
# add labels
plt.text(7, 0.25, 'NAFA')
plt.text(7, 0.15, 'in the US')
plt.text(40, -0.3, 'US current account balance')
plt.text(20, 0.6, 'US government budget deficit')
fig.text(0.1, -.1, caption);
In [12]:
caption = '''
Figure 12.6C Effect of a step increase in real US government expenditures, within a
flexible exchange rate regime, on the share of the wealth of UK residents held in the
form of US Treasury bills, when denominated in dollars and then in sterling.'''
dollardata = [(s['BdUKUS']/s['XRUS'])/s['VUK'] for s in gkus.solutions[5:]]
pounddata = [s['BdUKUS']/s['VUK'] for s in gkus.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.set_ylim(0.24, 0.33)
axes.plot(dollardata, linestyle='-', color='b')
axes.plot(pounddata, linestyle='--', linewidth=2, color='g')
# add labels
plt.text(20, 0.31, 'US Treasury bills held by UK residents')
plt.text(20, 0.306, '(denominated in dollars)')
plt.text(20, 0.302, 'as share of the wealth')
plt.text(20, 0.298, 'of UK residents')
plt.text(40, 0.264, 'US Treasury bills held by UK residents')
plt.text(40, 0.260, '(denomiated in sterling)')
plt.text(40, 0.256, 'as share of the wealth of US residents')
fig.text(0.1, -.1, caption);
In [13]:
caption = '''
Figure 12.6D Effect on the dollar exchange rate of a step increase in the US
government expenditures, within a flexible rate regime.'''
data = [s['XRUS'] for s in gkus.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.set_ylim(0.75, 1.05)
axes.plot(data, linestyle='-', color='b')
# add labels
plt.text(24, 0.95, 'Dollar exchange rate')
plt.text(24, 0.935, u'(value of the dollar in sterling (\u00a3) units)')
fig.text(0.1, -.1, caption);
In [14]:
lambdaX = create_openflex_model()
lambdaX.set_values(openflex_parameters)
lambdaX.set_values(openflex_exogenous)
for _ in xrange(10):
lambdaX.solve(iterations=200, threshold=1e-4, method='broyden')
lambdaX.set_values({'lambda20': 0.30, 'lambda40': 0.75})
for _ in xrange(90):
lambdaX.solve(iterations=200, threshold=1e-4, method='broyden')
In [15]:
caption = '''
Figure 12.7A Effect on the dollar exchange rate of an increase in the desire to
hold US Treasury bills, within a flexible exchange rate regime.'''
data = [s['XRUS'] for s in lambdaX.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.plot(data, linestyle='-', color='b')
# add labels
plt.text(24, 1.05, 'Dollar exchange rate')
plt.text(24, 1.04, '(value of the dollar in sterling units)')
fig.text(0.1, -.05, caption);
In [16]:
caption = '''
Figure 12.7B Effect of an increase in the desire to hold US Treasury bills,
within a flexible exchange rate regime, on the share of the wealth of UK
residents held in the form of US Treasury bills, when denomiated in dollars
and then in sterling.'''
dollardata = [(s['BdUKUS']/s['XRUS'])/s['VUK'] for s in lambdaX.solutions[5:]]
pounddata = [s['BdUKUS']/s['VUK'] for s in lambdaX.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.set_ylim(0.24, 0.33)
axes.plot(dollardata, linestyle='-', color='b')
axes.plot(pounddata, linestyle='--', linewidth=2, color='g')
# add labels
plt.text(12, 0.32, 'US Treasury bills held by UK residents')
plt.text(12, 0.316, '(denominated in dollars)')
plt.text(12, 0.312, 'as share of the wealth')
plt.text(12, 0.308, 'of UK residents')
plt.text(50, 0.294, 'US Treasury bills held by UK residents')
plt.text(50, 0.290, '(denomiated in sterling)')
plt.text(50, 0.286, 'as share of the wealth of US residents')
fig.text(0.1, -.15, caption);
In [17]:
caption = '''
Figure 12.7C Effect of UK and US real GDP of an increase in the desire to hold US
Treasury bills, within a flexible rate regime.'''
ukdata = [s['YkUK'] for s in lambdaX.solutions[5:]]
usdata = [s['YkUS'] for s in lambdaX.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.plot(ukdata, linestyle='-', color='b')
axes.plot(usdata, linestyle='--', linewidth=2, color='g')
# add labels
plt.text(10, 101, 'UK real output')
plt.text(10, 94, 'US real output')
fig.text(0.1, -.05, caption);
In [18]:
caption = '''
Figure 12.7D Effect of an increase in the desire to hold US Treasury bills, within a
flexible exchange rate regime, on various US variables: net accumulation of financial
assets, government budget deficit, current account balance and trade balance.'''
nafadata = [s['NAFAUS'] for s in lambdaX.solutions[5:]]
cabdata = [s['CABUS'] for s in lambdaX.solutions[5:]]
xidata = [s['XUS'] - s['IMUS'] for s in lambdaX.solutions[5:]]
psbrdata = [s['PSBRUS'] for s in lambdaX.solutions[5:]]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1.1, 1.1])
axes.tick_params(top='off', right='off')
axes.spines['top'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.plot(nafadata, linestyle='-', color='b')
axes.plot(cabdata, linestyle='--', linewidth=2, color='g')
axes.plot(xidata, linestyle=':', linewidth=2, color='r')
axes.plot(psbrdata, linestyle='-.', linewidth=2, color='b')
# add labels
plt.text(10, 0.24, 'NAFA')
plt.text(10, 0.17, 'in the US')
plt.text(22, -0.4, 'US current account balance')
plt.text(60, 0.28, 'US trade balance')
plt.text(8, 0.8, 'US government budget deficit')
fig.text(0.1, -.1, caption);
In [ ]: