【问题标题】:How do I draw unique pairs of agents who are linked in a network?如何绘制在网络中链接的唯一代理对?
【发布时间】:2014-03-05 12:06:21
【问题描述】:

我有许多通过网络链接的代理,现在我正在尝试随机抽取链接代理对。最终结果应该是一个二进制矩阵(ncol = nrow = 代理数)。每个代理在链接对中只能出现一次。

这是我到目前为止所做的。首先我画随机对

library(sna,dummies)
pairs  = matrix(sample(1:10,10,replace=F), ncol=2)

然后我将其转换为矩阵

meet = cbind(merge(c(1:10), pairs,  by.x = 1, by.y = 1, all.x = TRUE),
merge(c(1:10), pairs,  by.x = 1, by.y = 2, all.x = TRUE))
meet[,2] = ifelse(is.na(meet[,2]), meet[,4], meet[,2])
meet = meet[,-c(3,4)]
meet = data.matrix(dummy.data.frame(meet, names = "V2"))
meet = meet[,-1]
colnames(meet) = c(1:10)

假设代理通过以下网络链接

nw = rgraph(10, mode = "graph", tprob = 0.5)

如果我将 meet 和 nw 相乘,我会通过消除未链接的代理对得到一个随机抽取的对矩阵。但是,在这种情况下,我最终得到的对数非常少......

有没有办法以代理之间的链接为条件绘制对?

【问题讨论】:

  • 你能随机抽取(唯一)代理的样本,然后为每个代理查找链接代理吗?或者您是否要求每个代理最多以一对链接的形式出现?
  • 后者 - 每个代理可能只出现一对。感谢您指出,我将编辑问题。
  • 好吧,我不熟悉这里的包,但是如果你可以使用一些工具来生成一个列表对象,其中每个列表元素包含给定代理的所有链接,那么一旦你选择了一个代理,您可以随机选择一个链接代理,然后从两个代理的列表元素中删除这些链接值。 (希望这是有道理的)

标签: r social-networking sample


【解决方案1】:

这样做的目的是什么?找到尽可能多的配对很重要吗?基本上,您所描述的与图中匹配的概念有关(http://en.wikipedia.org/wiki/Matching_%28graph_theory%29)。 “最大匹配”和“最大匹配”是有区别的。

第一个很容易找到(并且可能是您尝试做的事情。这样做的“技巧”是在图中选择边而不是节点(代理)。从随机边开始(添加您的第一对代理),然后删除连接到这些代理的所有边,并从剩余边中(随机)选择一条边。重复该过程,直到没有剩余边。这是“最大”,因为您无法添加再多对。但是,您最终可能仍会得到有限数量的对。

要获得给定图表可能的最大对数,您需要更加努力(有关相关资源,请参阅 wikipedia 链接),但这是您真正想要的吗? (注意:与任何容易找到的最大匹配匹配相比,最大匹配永远不会大得多。

您可能想查看 igraph 包,它有几个处理匹配的函数(尤其是二分图)。但是,为了您的目标,可能需要一个更简单的算法(研究文献中充满了特殊情况下的匹配算法)。

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2021-02-08
    • 2016-07-14
    相关资源
    最近更新 更多