最近,我想重建Prasanna Gai发表的论文Contagion in Financial Networks中的金融传染模型。 现在我陷入了第一个数字:
(实际上是图3)。
我使用了Python和networkx
。
首先,构建具有1000个节点的ER网络,概率取决于我要模拟的平均程度。例如,如果我要模拟平均度为3,那么生成ER网络的概率为3 /(1000-1),其中1000是网络大小。
然后,对于每个节点,我发现有多少节点指向该节点并计数,以计算AiIB(权重)。如果节点1指向3个节点,则这些边缘上的权重为AiIB(纸上为0.2)/ 3(邻居数)。
为模拟感染,首先随机选择一个节点以删除其所有资产。那么如果负债超过了资本缓冲(Ki,本文为0.04),它就无法将债务偿还给其邻国。对于那些从多家银行获得负债的银行,即使每个链接的权重都小于Ki,如果这些负债的总和大于Ki,则仍被视为破产。该模型就像流行病传播一样,新的破产银行将影响新一批银行,最终在该系统中不再有银行破产。
由于蔓延定义为该网络中超过5%的破产银行(在这种情况下为50家)。
要绘制图形,每个平均度需要测试100次:
概率=发生传染的次数/此处的模拟次数为100
程度= [在发生传染的情况下]破产银行所占比例/发生传染的数量之和。
原始代码在GitHub上可用。通过运行er_100.py,您可以得到如下图:
如果您对代码有任何疑问,请告诉我。 (代码至少需要1个小时才能在带有8个vCPU的GCP上运行...)
我还尝试了60个节点的网络,看起来像是:
它的形状与图1相似。但这仍然不好,小网络不是我想要的。
我不知道我的代码有什么问题。我认为,我已经考虑了所有方面,并且应该会得到类似的结果。我什至开始质疑论文的权威性……
如果您有任何想法,请帮助我。
答案 0 :(得分:0)
这是一个很难回答的问题。
我仍然找不到该代码的任何线索。然后,我用R重写代码并运行它,这是我得到的草稿图:
您现在可以看到,该图只是本文中的那个。但是算法和结构与我用Python编写的完全相同。
也许这是一个显示 Python不能做的的情况。 如果有人对此问题感到感兴趣,想在Python和R之间的区别之间进行更多划分,这是一个很好的例子。而且我很乐意提供任何帮助。
通过R中的模型代码在GitHub中可用,并且仍在更新中。
对于那些花时间阅读我的描述的人,谢谢。
更新:
我也不敢相信这一点,因为在我看来,代码在进行计数和计算很简单。我在每一步都打印出非常多的东西,并检查了每个节点,从10个节点的小型网络到1000个节点的网络,日志文件已超过50G。一切看起来都很正常,数字(破产的一个)只是没有达到阈值。与R具有完全相同的结构不同,结果与本文仅是same
。
我真的不知道为什么,也不知道。