【问题标题】:Dominance-directed (tournament) graph metrics优势导向(锦标赛)图指标
【发布时间】:2013-09-23 23:10:18
【问题描述】:

我有兴趣为优势有向图(也称为锦标赛图)中的节点推导优势指标(如在优势层次结构中)。我可以使用 R 和包 igraph 轻松构建这样的图表,例如

library(igraph)

创建边缘数据框

the.froms <- c(1,1,1,2,2,3)

the.tos <- c(2,3,4,3,4,4)

the.set <- data.frame(the.froms, the.tos)

set.graph <- graph.data.frame(the.set)

plot(set.graph)

此绘制的图表显示节点 1 影响节点 2、3 和 4(对它们起主导作用),2 对 3 和 4 起主导作用,而 3 对 4 起主导作用。

但是,我看不到像页面中那样实际计算支配层次结构的简单方法:https://www.math.ucdavis.edu/~daddel/linear_algebra_appl/Applications/GraphTheory/GraphTheory_9_17/node11.html 所以,我的第一个也是主要的问题是,有没有人知道如何使用 R 中的一些希望已经编码的解决方案为这样的图导出支配层次结构/基于节点的支配度量?

此外,在我的真实案例中,我实际上有一个稀疏矩阵,它缺少一些交互,例如

incomplete.set <- the.set[-2, ]

incomplete.graph <- graph.data.frame(incomplete.set)

plot(incomplete.graph)

在这个绘制的图中,物种 1 和 3 之间没有联系,但是对传递性做一些假设,优势层次与上面相同。

这是一个复杂得多的问题,但如果有人对我如何为这样的稀疏矩阵推导基于节点的优势指标有任何意见,请告诉我。我希望在 R 中有一个已经编码的解决方案,但我当然更愿意自己编码。

提前致谢!

【问题讨论】:

  • 对于非图论者,最好在您的问题中解释优势概念。不过,这取决于您;其他人可能知道你在说什么。此外,如果您的问题是关于数学而不是编码,那么 SO 可能不适合。
  • 谢谢弗兰克。我把它修改得更清楚了,我希望。简而言之,我的第一个问题肯定是关于编程的,而第二个问题可能更多是关于数学的……尽管我希望暂时绕过数学并找到一个编码解决方案来摆弄,同时我试图理解更复杂的方面。
  • relations 包有用吗?它似乎能够处理一个节点对另一个节点的优势的计算 - cran.r-project.org/web/packages/relations/vignettes/…
  • 说实话,我不知道你的问题到底是什么。您的示例图的输出是什么?您想得出一个指标,但这个指标到底要衡量什么?如果您不知道要计算什么,为什么这是一个 stackoverflow 问题?
  • @GaborCsardi 非常感谢您的回复!我知道我想计算什么。我想要一个数字来描述有向图中每个节点的优势层次结构中的排名,如我在原始帖子中提供的链接所示。因此,在我提供的示例代码中,节点 1 为 1,节点 2 为 2,节点 3 为 3,节点 4 为 4。我想在更复杂的网络中,可能有这个度量的值是联系,或范围,或类似的东西,特别是如果网络不是有向无环图或者它是稀疏矩阵。

标签: r social-networking graph-theory igraph


【解决方案1】:

不确定这是否完美或我完全理解这一点,但经过反复试验,它似乎可以正常工作:

library(relations)
result <- relation_consensus(endorelation(graph=the.set),method="Borda")
relation_class_ids(result)
#1 2 3 4 
#1 2 3 4 

method= 有很多潜在的选项来处理关系等 - 请参阅 ?relation_consensus 了解更多信息。使用线性顺序 method="SD/L" 可能最适合您的数据,尽管由于更复杂示例中的冲突,它可以建议多种可能的解决方案。对于当前的简单数据,情况并非如此 - 尝试:

result <- relation_consensus(endorelation(graph=the.set),method="SD/L",
                             control=list(n="all"))
result
#An ensemble of 1 relation of size 4 x 4.

lapply(result,relation_class_ids)
#[[1]]
#1 2 3 4 
#1 2 3 4 

?relation_consensus 中的示例再次提供了处理此问题的方法。

【讨论】:

  • 这很好用。特别是,即使矩阵缺少值,这里的第二个选项似乎也能返回正确的线性顺序,就像我提供的第二个示例一样。我非常感谢,谢谢@thelatemail。顺便说一句,在上面的代码中,您将对象称为“the.new”。我不确定这是从哪里来的,尽管它不影响这个答案的正确性。干杯
  • @forlooper - 不用担心,“the.new”错误现在也已修复 - 这只是我工作数据集的名称。
猜你喜欢
  • 2012-04-03
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 2017-05-21
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多