如何在R中计算固定衰减参数邻接矩阵的GWESP并输出矩阵结果
R实现给定邻接矩阵计算二元组GWESP矩阵的方法
目前CRAN上的igraph、ergm等相关包确实没有直接输出全二元组GWESP矩阵的现成函数,我们可以根据GWESP的定义自定义实现,逻辑和代码如下:
核心计算逻辑
该实现完全符合Hunter(2007)提出的GWESP定义,计算步骤如下:
- 先计算任意两个节点的共享伙伴数量:对无向图邻接矩阵做矩阵乘法,得到的矩阵每个元素(i,j)就是节点i和j的共享邻居数$s_{ij}$
- 对每个$s_{ij}$做几何加权求和,公式为:
- 当$s_{ij}=0$时GWESP值为0
- 当$s_{ij}≥1$且$alpha≠0$时,$GWESP = \frac{1 - e^{-\alpha \times s_{ij}}}{1 - e^{-\alpha}}$
- 当$alpha=0$时无衰减,GWESP等于$s_{ij}$本身
自定义函数代码
calculate_gwesp_matrix <- function(adjm, alpha, diag_value = 0) { # 校验输入邻接矩阵为方阵 if(nrow(adjm) != ncol(adjm)) stop("邻接矩阵必须为方阵") # 计算共享伙伴数量矩阵 s_matrix <- adjm %*% adjm # 处理alpha=0的特殊情况 if(alpha == 0) { gwesp_matrix <- s_matrix } else { # 等比数列求和计算GWESP值 gwesp_matrix <- (1 - exp(-alpha * s_matrix)) / (1 - exp(-alpha)) # 共享伙伴为0的位置赋值为0(避免数值计算误差) gwesp_matrix[s_matrix == 0] <- 0 } # 处理对角线元素(自身和自身的二元组无实际意义,可自定义取值) diag(gwesp_matrix) <- diag_value return(gwesp_matrix) }
使用示例
# 给定邻接矩阵(adjm) adjm <- matrix(sample(0:1, 100, replace=TRUE, prob=c(0.6,0.4)), nc=10) # 固定alpha=0.25,计算GWESP矩阵 gwesp_mat <- calculate_gwesp_matrix(adjm, alpha = 0.25) # 查看输出维度,和输入邻接矩阵一致 dim(gwesp_mat)
如果是有向图的GWESP计算,只需要调整共享伙伴的计数逻辑(比如仅统计出边共享、入边共享等),修改s_matrix的计算方式即可。
内容的提问来源于stack exchange,提问作者Chris T.
相关产品推荐
相关产品推荐

