Leading Indicators of Currency Crises
Carmen Reinhart and Graciela Kaminsky and Saul Lizondo
University of Maryland
1998
Last active
August 29, 2015 14:01
-
-
Save timelyportfolio/158074e46c457685d8ee to your computer and use it in GitHub Desktop.
dimple + rCharts on Reinhart (1998)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype HTML> | |
<meta charset = 'utf-8'> | |
<html> | |
<head> | |
<script src='http://d3js.org/d3.v3.min.js' type='text/javascript'></script> | |
<script src='http://dimplejs.org/dist/dimple.v1.1.5.min.js' type='text/javascript'></script> | |
<style> | |
.rChart { | |
display: block; | |
margin-left: auto; | |
margin-right: auto; | |
width: 1000px; | |
height: 600px; | |
} | |
.tooltip {opacity:1;} | |
</style> | |
</head> | |
<body > | |
<div id = 'chart229c57375985' class = 'rChart dimple'></div> | |
<script type="text/javascript"> | |
var opts = { | |
"dom": "chart229c57375985", | |
"width": 1000, | |
"height": 600, | |
"xAxis": { | |
"type": "addMeasureAxis", | |
"showPercent": false | |
}, | |
"yAxis": { | |
"type": "addCategoryAxis", | |
"showPercent": false, | |
"orderRule": "measurenum" | |
}, | |
"zAxis": [], | |
"colorAxis": [], | |
"defaultColors": [], | |
"layers": [], | |
"legend": [], | |
"x": "value", | |
"y": [ "measurenum", "indicator" ], | |
"groups": [ "measure", "indicator" ], | |
"type": "bar", | |
"id": "chart229c57375985" | |
}, | |
data = [{"indicator":"Real exchange rate","measurenum":"V2","value":"72","measure":"Number of crises for which there is data"},{"indicator":"Banking crises","measurenum":"V2","value":"26","measure":"Number of crises for which there is data"},{"indicator":"Exports","measurenum":"V2","value":"72","measure":"Number of crises for which there is data"},{"indicator":"Stock prices","measurenum":"V2","value":"53","measure":"Number of crises for which there is data"},{"indicator":"M2linternational reserves","measurenum":"V2","value":"70","measure":"Number of crises for which there is data"},{"indicator":"Output","measurenum":"V2","value":"57","measure":"Number of crises for which there is data"},{"indicator":"\u201cExcess\u201d M I balances","measurenum":"V2","value":"66","measure":"Number of crises for which there is data"},{"indicator":"International reserves","measurenum":"V2","value":"72","measure":"Number of crises for which there is data"},{"indicator":"M2 multiplier","measurenum":"V2","value":"70","measure":"Number of crises for which there is data"},{"indicator":"Domestic creditlGDP","measurenum":"V2","value":"62","measure":"Number of crises for which there is data"},{"indicator":"Real interest rate","measurenum":"V2","value":"44","measure":"Number of crises for which there is data"},{"indicator":"Terms of trade","measurenum":"V2","value":"58","measure":"Number of crises for which there is data"},{"indicator":"Real interest differential","measurenum":"V2","value":"42","measure":"Number of crises for which there is data"},{"indicator":"Imports","measurenum":"V2","value":"71","measure":"Number of crises for which there is data"},{"indicator":"Bank deposits","measurenum":"V2","value":"69","measure":"Number of crises for which there is data"},{"indicator":"Lending rate/deposit rate","measurenum":"V2","value":"33","measure":"Number of crises for which there is data"},{"indicator":"Real exchange rate","measurenum":"V3","value":"57","measure":"Percentage of crises called"},{"indicator":"Banking crises","measurenum":"V3","value":"37","measure":"Percentage of crises called"},{"indicator":"Exports","measurenum":"V3","value":"85","measure":"Percentage of crises called"},{"indicator":"Stock prices","measurenum":"V3","value":"64","measure":"Percentage of crises called"},{"indicator":"M2linternational reserves","measurenum":"V3","value":"80","measure":"Percentage of crises called"},{"indicator":"Output","measurenum":"V3","value":"77","measure":"Percentage of crises called"},{"indicator":"\u201cExcess\u201d M I balances","measurenum":"V3","value":"61","measure":"Percentage of crises called"},{"indicator":"International reserves","measurenum":"V3","value":"75","measure":"Percentage of crises called"},{"indicator":"M2 multiplier","measurenum":"V3","value":"73","measure":"Percentage of crises called"},{"indicator":"Domestic creditlGDP","measurenum":"V3","value":"56","measure":"Percentage of crises called"},{"indicator":"Real interest rate","measurenum":"V3","value":"89","measure":"Percentage of crises called"},{"indicator":"Terms of trade","measurenum":"V3","value":"79","measure":"Percentage of crises called"},{"indicator":"Real interest differential","measurenum":"V3","value":"86","measure":"Percentage of crises called"},{"indicator":"Imports","measurenum":"V3","value":"54","measure":"Percentage of crises called"},{"indicator":"Bank deposits","measurenum":"V3","value":"49","measure":"Percentage of crises called"},{"indicator":"Lending rate/deposit rate","measurenum":"V3","value":"67","measure":"Percentage of crises called"},{"indicator":"Real exchange rate","measurenum":"V4","value":"25","measure":"Good signals as percentage of possible good signals"},{"indicator":"Banking crises","measurenum":"V4","value":"19","measure":"Good signals as percentage of possible good signals"},{"indicator":"Exports","measurenum":"V4","value":"17","measure":"Good signals as percentage of possible good signals"},{"indicator":"Stock prices","measurenum":"V4","value":"17","measure":"Good signals as percentage of possible good signals"},{"indicator":"M2linternational reserves","measurenum":"V4","value":"21","measure":"Good signals as percentage of possible good signals"},{"indicator":"Output","measurenum":"V4","value":"16","measure":"Good signals as percentage of possible good signals"},{"indicator":"\u201cExcess\u201d M I balances","measurenum":"V4","value":"16","measure":"Good signals as percentage of possible good signals"},{"indicator":"International reserves","measurenum":"V4","value":"22","measure":"Good signals as percentage of possible good signals"},{"indicator":"M2 multiplier","measurenum":"V4","value":"20","measure":"Good signals as percentage of possible good signals"},{"indicator":"Domestic creditlGDP","measurenum":"V4","value":"14","measure":"Good signals as percentage of possible good signals"},{"indicator":"Real interest rate","measurenum":"V4","value":"15","measure":"Good signals as percentage of possible good signals"},{"indicator":"Terms of trade","measurenum":"V4","value":"19","measure":"Good signals as percentage of possible good signals"},{"indicator":"Real interest differential","measurenum":"V4","value":"11","measure":"Good signals as percentage of possible good signals"},{"indicator":"Imports","measurenum":"V4","value":"9","measure":"Good signals as percentage of possible good signals"},{"indicator":"Bank deposits","measurenum":"V4","value":"16","measure":"Good signals as percentage of possible good signals"},{"indicator":"Lending rate/deposit rate","measurenum":"V4","value":"13","measure":"Good signals as percentage of possible good signals"},{"indicator":"Real exchange rate","measurenum":"V5","value":"5","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Banking crises","measurenum":"V5","value":"6","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Exports","measurenum":"V5","value":"7","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Stock prices","measurenum":"V5","value":"8","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"M2linternational reserves","measurenum":"V5","value":"10","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Output","measurenum":"V5","value":"8","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"\u201cExcess\u201d M I balances","measurenum":"V5","value":"8","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"International reserves","measurenum":"V5","value":"12","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"M2 multiplier","measurenum":"V5","value":"12","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Domestic creditlGDP","measurenum":"V5","value":"9","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Real interest rate","measurenum":"V5","value":"11","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Terms of trade","measurenum":"V5","value":"15","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Real interest differential","measurenum":"V5","value":"11","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Imports","measurenum":"V5","value":"11","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Bank deposits","measurenum":"V5","value":"19","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Lending rate/deposit rate","measurenum":"V5","value":"22","measure":"Bad signals as percentage of possible bad signals"},{"indicator":"Real exchange rate","measurenum":"V6","value":"0.190000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Banking crises","measurenum":"V6","value":"0.340000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Exports","measurenum":"V6","value":"0.420000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Stock prices","measurenum":"V6","value":"0.470000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"M2linternational reserves","measurenum":"V6","value":"0.480000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Output","measurenum":"V6","value":"0.520000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"\u201cExcess\u201d M I balances","measurenum":"V6","value":"0.520000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"International reserves","measurenum":"V6","value":"0.550000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"M2 multiplier","measurenum":"V6","value":"0.610000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Domestic creditlGDP","measurenum":"V6","value":"0.620000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Real interest rate","measurenum":"V6","value":"0.770000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Terms of trade","measurenum":"V6","value":"0.770000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Real interest differential","measurenum":"V6","value":"0.990000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Imports","measurenum":"V6","value":"1.160000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Bank deposits","measurenum":"V6","value":"1.200000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Lending rate/deposit rate","measurenum":"V6","value":"1.690000000000000","measure":"Noise/signal (adjusted)"},{"indicator":"Real exchange rate","measurenum":"V7","value":"67","measure":"P(crisis/signal)"},{"indicator":"Banking crises","measurenum":"V7","value":"46","measure":"P(crisis/signal)"},{"indicator":"Exports","measurenum":"V7","value":"49","measure":"P(crisis/signal)"},{"indicator":"Stock prices","measurenum":"V7","value":"49","measure":"P(crisis/signal)"},{"indicator":"M2linternational reserves","measurenum":"V7","value":"46","measure":"P(crisis/signal)"},{"indicator":"Output","measurenum":"V7","value":"49","measure":"P(crisis/signal)"},{"indicator":"\u201cExcess\u201d M I balances","measurenum":"V7","value":"43","measure":"P(crisis/signal)"},{"indicator":"International reserves","measurenum":"V7","value":"41","measure":"P(crisis/signal)"},{"indicator":"M2 multiplier","measurenum":"V7","value":"40","measure":"P(crisis/signal)"},{"indicator":"Domestic creditlGDP","measurenum":"V7","value":"39","measure":"P(crisis/signal)"},{"indicator":"Real interest rate","measurenum":"V7","value":"34","measure":"P(crisis/signal)"},{"indicator":"Terms of trade","measurenum":"V7","value":"36","measure":"P(crisis/signal)"},{"indicator":"Real interest differential","measurenum":"V7","value":"29","measure":"P(crisis/signal)"},{"indicator":"Imports","measurenum":"V7","value":"26","measure":"P(crisis/signal)"},{"indicator":"Bank deposits","measurenum":"V7","value":"25","measure":"P(crisis/signal)"},{"indicator":"Lending rate/deposit rate","measurenum":"V7","value":"18","measure":"P(crisis/signal)"},{"indicator":"Real exchange rate","measurenum":"V8","value":"39","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Banking crises","measurenum":"V8","value":"17","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Exports","measurenum":"V8","value":"20","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Stock prices","measurenum":"V8","value":"18","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"M2linternational reserves","measurenum":"V8","value":"17","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Output","measurenum":"V8","value":"16","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"\u201cExcess\u201d M I balances","measurenum":"V8","value":"15","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"International reserves","measurenum":"V8","value":"13","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"M2 multiplier","measurenum":"V8","value":"11","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Domestic creditlGDP","measurenum":"V8","value":"11","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Real interest rate","measurenum":"V8","value":"6","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Terms of trade","measurenum":"V8","value":"6","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Real interest differential","measurenum":"V8","value":"0","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Imports","measurenum":"V8","value":"-3.000000000000000","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Bank deposits","measurenum":"V8","value":"-4.000000000000000","measure":"P(crisis/signal) - P(crisis)"},{"indicator":"Lending rate/deposit rate","measurenum":"V8","value":"-9.000000000000000","measure":"P(crisis/signal) - P(crisis)"}]; | |
var svg = dimple.newSvg("#" + opts.id, opts.width, opts.height); | |
//data = dimple.filterData(data, "Owner", ["Aperture", "Black Mesa"]) | |
var myChart = new dimple.chart(svg, data); | |
if (opts.bounds) { | |
myChart.setBounds(opts.bounds.x, opts.bounds.y, opts.bounds.width, opts.bounds.height);//myChart.setBounds(80, 30, 480, 330); | |
} | |
//dimple allows use of custom CSS with noFormats | |
if(opts.noFormats) { myChart.noFormats = opts.noFormats; }; | |
//for markimekko and addAxis also have third parameter measure | |
//so need to evaluate if measure provided | |
//function to build axes | |
function buildAxis(position,layer){ | |
var axis; | |
var axisopts = opts[position+"Axis"]; | |
if(axisopts.measure) { | |
axis = myChart[axisopts.type](position,layer[position],axisopts.measure); | |
} else { | |
axis = myChart[axisopts.type](position, layer[position]); | |
}; | |
if(!(axisopts.type === "addPctAxis")) axis.showPercent = axisopts.showPercent; | |
if (axisopts.orderRule) axis.addOrderRule(axisopts.orderRule); | |
if (axisopts.grouporderRule) axis.addGroupOrderRule(axisopts.grouporderRule); | |
if (axisopts.overrideMin) axis.overrideMin = axisopts.overrideMin; | |
if (axisopts.overrideMax) axis.overrideMax = axisopts.overrideMax; | |
if (axisopts.overrideMax) axis.overrideMax = axisopts.overrideMax; | |
if (axisopts.inputFormat) axis.dateParseFormat = axisopts.inputFormat; | |
if (axisopts.outputFormat) axis.tickFormat = axisopts.outputFormat; | |
return axis; | |
}; | |
var c = null; | |
if(d3.keys(opts.colorAxis).length > 0) { | |
c = myChart[opts.colorAxis.type](opts.colorAxis.colorSeries,opts.colorAxis.palette) ; | |
} | |
//allow manipulation of default colors to use with dimple | |
if(opts.defaultColors.length) { | |
//opts.defaultColors = opts.defaultColors[0]; | |
if (typeof(opts.defaultColors) == "function") { | |
//assume this is a d3 scale | |
//for now loop through first 20 but need a better way to handle | |
defaultColorsArray = []; | |
for (var n=0;n<20;n++) { | |
defaultColorsArray.push(opts.defaultColors(n)); | |
}; | |
opts.defaultColors = defaultColorsArray; | |
} | |
opts.defaultColors.forEach(function(d,i) { | |
opts.defaultColors[i] = new dimple.color(d); | |
}) | |
myChart.defaultColors = opts.defaultColors; | |
} | |
//do series | |
//set up a function since same for each | |
//as of now we have x,y,groups,data,type in opts for primary layer | |
//and other layers reside in opts.layers | |
function buildSeries(layer, hidden){ | |
//inherit from primary layer if not intentionally changed or xAxis, yAxis, zAxis null | |
if (!layer.xAxis) layer.xAxis = opts.xAxis; | |
if (!layer.yAxis) layer.yAxis = opts.yAxis; | |
if (!layer.zAxis) layer.zAxis = opts.zAxis; | |
var x = buildAxis("x", layer); | |
x.hidden = hidden; | |
var y = buildAxis("y", layer); | |
y.hidden = hidden; | |
//z for bubbles | |
var z = null; | |
if (!(typeof(layer.zAxis) === 'undefined') && layer.zAxis.type){ | |
z = buildAxis("z", layer); | |
}; | |
//here think I need to evaluate group and if missing do null | |
//as the group argument | |
//if provided need to use groups from layer | |
var s = new dimple.series(myChart, null, x, y, z, c, dimple.plot[layer.type], dimple.aggregateMethod.avg, dimple.plot[layer.type].stacked); | |
//as of v1.1.4 dimple can use different dataset for each series | |
if(layer.data){ | |
//convert to an array of objects | |
var tempdata; | |
//avoid lodash for now | |
datakeys = d3.keys(layer.data) | |
tempdata = layer.data[datakeys[1]].map(function(d,i){ | |
var tempobj = {} | |
datakeys.forEach(function(key){ | |
tempobj[key] = layer.data[key][i] | |
}) | |
return tempobj | |
}) | |
s.data = tempdata; | |
} | |
if(layer.hasOwnProperty("groups")) { | |
s.categoryFields = (typeof layer.groups === "object") ? layer.groups : [layer.groups]; | |
//series offers an aggregate method that we will also need to check if available | |
//options available are avg, count, max, min, sum | |
} | |
if (!(typeof(layer.aggregate) === 'undefined')) { | |
s.aggregate = eval(layer.aggregate); | |
} | |
if (!(typeof(layer.lineWeight) === 'undefined')) { | |
s.lineWeight = eval(layer.lineWeight); | |
} | |
if (!(typeof(layer.barGap) === 'undefined')) { | |
s.barGap = eval(layer.barGap); | |
} | |
/* if (!(typeof(layer.eventHandler) === 'undefined')) { | |
layer.eventHandler = (layer.eventHandler.length === "undefined") ? layer.eventHandler : [layer.eventHandler]; | |
layer.eventHandler.forEach(function(evt){ | |
s.addEventHandler(evt.event, eval(evt.handler)) | |
}) | |
}*/ | |
myChart.series.push(s); | |
/*placeholder fix domain of primary scale for new series data | |
//not working right now but something like this | |
//for now just use overrideMin and overrideMax from rCharts | |
for( var i = 0; i<2; i++) { | |
if (!myChart.axes[i].overrideMin) { | |
myChart.series[0]._axisBounds(i==0?"x":"y").min = myChart.series[0]._axisBounds(i==0?"x":"y").min < s._axisBounds(i==0?"x":"y").min ? myChart.series[0]._axisBounds(i==0?"x":"y").min : s._axisBounds(i==0?"x":"y").min; | |
} | |
if (!myChart.axes[i].overrideMax) { | |
myChart.series[0]._axisBounds(i==0?"x":"y")._max = myChart.series[0]._axisBounds(i==0?"x":"y").max > s._axisBounds(i==0?"x":"y").max ? myChart.series[0]._axisBounds(i==0?"x":"y").max : s._axisBounds(i==0?"x":"y").max; | |
} | |
myChart.axes[i]._update(); | |
} | |
*/ | |
return s; | |
}; | |
buildSeries(opts, false); | |
if (opts.layers.length > 0) { | |
opts.layers.forEach(function(layer){ | |
buildSeries(layer, true); | |
}) | |
} | |
//unsure if this is best but if legend is provided (not empty) then evaluate | |
if(d3.keys(opts.legend).length > 0) { | |
var l =myChart.addLegend(); | |
d3.keys(opts.legend).forEach(function(d){ | |
l[d] = opts.legend[d]; | |
}); | |
} | |
//quick way to get this going but need to make this cleaner | |
if(opts.storyboard) { | |
myChart.setStoryboard(opts.storyboard); | |
}; | |
myChart.draw(); | |
</script> | |
<script></script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment