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