从 R 中的经纪角色分析中找到个体经纪三合会

问题描述 投票:0回答:1

我正在使用 sna for R 的经纪(g,属性)函数来查找我的网络的 Gould Fernandez 经纪角色。然后我想找到这个经纪角色的具体三合会,以进一步分析不同自我之间的关系。

有人知道我可以使用哪个公式来识别这个特定的三元组吗?

可复制样本

g2 <- make_graph(~  A --+ B:D, B --+ D:F, C--+B , D--+A:B:F:E, E--+ D, F--+ A:E:G, G--+ F)
type<-c("one","two","three","one","two","three","one")
vertex_attr(g2,"type")<-type
g2_N<-intergraph::asNetwork(g2)

brokerage_roles<-brokerage(g2_N,type)
brokerage_roles$raw.nli

我收到以下经纪角色输出

   w_I w_O b_IO b_OI b_O t
A   0   0    2    0   0 2
B   0   1    2    0   0 3
D   0   1    3    2   1 7
F   1   0    1    3   1 6
C   0   0    0    0   0 0
E   0   0    0    1   0 1
G   0   0    0    0   0 0

我想找到一种方法来找出例如在经纪角色节点普查中找到的 2 b_01 三元组中哪些特定的变更节点 A 正在经纪以及它们具有什么类型(节点属性)。

示例网络中很容易识别,但我的实际数据集包含 125 个节点。

提前感谢您的帮助!

潜在方法

我尝试了此处描述的潜在方法来查找所有可能的三合会,根据三合会普查术语对它们进行分类,然后筛选开放的三合会以开始识别经纪机会。

然而,结果似乎与经纪角色分析不一致,因此该方法是错误的。

node_triad_census(g2_N)

triads <- combn(1:network.size(g2_N),3, simplify = F) # all potential triad combinations

triad_census_test <- lapply(1:length(triads), 
                            function(x) triad.classify(g,tri=triads[[x]])) #create data frame with all possible triads

triads <- data.frame(matrix(unlist(triads), nrow=length(triads), byrow=T),
                     triad = unlist(triad_census_test)) #give classification to each triad
open_triads <- triads[which(triads$triad == "021D" |  # subset of triads 
                              triads$triad == "021U" | 
                              triads$triad == "021C" |
                              triads$triad == "111D" |
                              triads$triad == "111U" |
                              triads$triad == "201"),]

r social-networking sna
1个回答
0
投票

我不知道答案,但请注意,经纪函数调用了一个名为brokerage_R 的C 函数(请参阅源代码此处)。通过检查此函数以了解幕后发生的情况,您可能会取得一些进展。我通过修改经纪函数以仅输出 C 代码的原始结果来检查该函数的输出:

rawbrokerage <- function (g, cl) 
{
  g <- as.edgelist.sna(g)
  if (is.list(g)) 
    return(lapply(g, brokerage, cl))
  N <- attr(g, "n")
  m <- NROW(g)
  classes <- unique(cl)
  icl <- match(cl, classes)
  br <- matrix(0, N, 5)
  br <- .C("brokerage_R", as.double(g), as.integer(N), 
                  as.integer(m), as.integer(icl), brok = as.double(br), 
                  PACKAGE = "sna", NAOK = TRUE)
  
  return(br)
}

但是我没有发现这很有启发性,这就是为什么检查 C 代码可能会有所帮助。我在 SNA 源代码中找不到 C 代码,但它一定在某个地方。该方法基于最短路径,而不是三元组普查,因此即使它仅限于长度为 2 的路径,我也不确定您是否可以重现三元组普查的结果。

© www.soinside.com 2019 - 2024. All rights reserved.