最近,我想在论文中重建财务传染模型: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相似。但这仍然不好,小型网络不是我想要的。
我不知道我的代码有什么问题。我认为,我已经到处考虑过,并且应该会得到类似的结果。我什至开始质疑这份文件的权威性。
如果您有任何想法请帮助我。
最佳答案
这是一个“难”的问题。
我仍然找不到该代码的任何线索。然后,我用R重写代码并运行它,这是我得到的草稿图:
正如您现在所看到的,该图只是本文中的那个。但是算法和结构与我用Python编写的完全相同。
也许这是一个显示Python无法做到的情况。
如果有人对此问题感到感兴趣,想在Python和R之间的差异中进行更多划分,这是一个很好的例子。我很高兴提供任何帮助。
顺便说一句,R中的模型代码在GitHub中可用,并且仍在更新中。
对于那些花时间阅读我的描述的人,谢谢您的时间。
更新:
我也不敢相信这一点,因为在我看来,代码在进行计数和计算很简单。我在每一步都打印出非常多的东西,并检查了每个节点,从10个节点的小型网络到1000个节点的网络,日志文件已超过50G。一切看起来都很正常,数字(破产的一个)只是没有达到阈值。与R完全相同的结构不同,结果与本文相同。
我真的不知道为什么,也不知道。