数字对于 R 来说太大了。如何近似概率质量函数?

机器算法验证 可能性 近似 社交网络
2022-03-15 13:31:31

社交网络数据经常以两种模式出现:人与他们参加的活动、人与他们参加的课程、国家与他们签署的条约等。分析此数据的策略是投影矩形二进制矩阵成一个模式矩阵然后,新矩阵的每个单元格将具有人共同参加事件的次数但是,他们共同参加活动的次数是否超出了偶然预期的次数?XP=(XX)Aijij

我发现了一篇关于这个主题的有趣论文,它直接解决了这个问题。作者提出了这个 PMF,其中人和人恰好参加个事件的概率:ijC

Pr(Pij=C)=(EC)(ECPiiC)(EPiiPjjC)(EPii)(EPjj)

图形化 PMF

在一个相当小的网络中,计算这个没有困难。但是我有一个包含数千个节点的网络。分子和分母中的数字是巨大的。如此之大,以至于R只返回Inf而我得到一个毫无意义的结果。

我认为我应该做的是找到一种方法来近似这个 PMF。我还在考虑编写一些通过模拟近似分布的代码。有没有更好的方法来近似这个分布?是否有一些已知分布与所提出的理论分布非常接近(阅读。足够接近)?

1个回答

几乎任何体面的 stats 包都将提供 log-gamma 或 log-factorial 函数。

你提到R;它有:

  • lgamma这是伽玛函数的对数

  • lfactorial这是阶乘函数的对数

  • lchoose这是二项式系数的对数。

使用其中任何一个,您都可以计算出所需概率的对数。如果它不会导致下溢,你可以在最后对其取幂。

?gamma

如果您没有这样的功能,另一种方法是将每个二项式系数的所有项保留在 bin 中(也就是说,如果在分子上展开二项式系数时存在“11”,则将“1”添加到“11 ” bin,如果分母上有“11”,则减去“1”。在你通过所有系数之后,你可以按这样的顺序进行乘法和除法,以使结果不会太远1(至少在您用完分子项之前)。这种方法的一个优点是,如果您愿意,您可以将结果保留为精确的分数。(您可以通过在开始乘法和除法之前取消公因数来使其更复杂。 ..但如果您只想要一个数字答案,那可能不值得。)

第三种选择是通过斯特林近似生成近似答案,但这不是必需的(如果我在脑海中解决它,我会这样做)。