You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:30:00