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

如何基于指定节点属性计算政治网络的模块化分数?

基于指定节点属性计算网络模块化的方法

要基于已有的partisanship节点属性计算模块化,分两种核心场景处理:


1. 计算整个网络基于党派分组的模块化(衡量党派聚类效果)

这里将党派属性直接作为预定义的社区分组,计算整个网络的模块化分数——分数越高,说明同党派节点间的修辞相似度(边权重)显著高于跨党派节点,党派群体的聚类效果越好。

实现代码:

# 将字符型党派属性转换为数值型社区归属向量
party_membership <- as.integer(factor(V(g)$partisanship))

# 计算基于党派分组的模块化(支持边权重)
party_overall_mod <- modularity(g, membership = party_membership, weights = E(g)$weight)
cat("整个网络基于党派的模块化分数:", party_overall_mod, "\n")

2. 分别计算民主党/共和党子图的内部模块化(衡量党派内部社区结构)

如果需要单独分析每个党派内部的社区划分效果,先提取对应子图,再用社区检测算法计算子图的模块化分数——分数越高,说明该党派内部存在更清晰的子社区结构。

实现代码:

# 提取民主党节点构成的子图
dem_subgraph <- induced_subgraph(g, v = which(V(g)$partisanship == "democrat"))
# 提取共和党节点构成的子图
rep_subgraph <- induced_subgraph(g, v = which(V(g)$partisanship == "republican"))

# 计算民主党子图的模块化(以Louvain算法为例,可替换为你常用的walktrap等)
if (ecount(dem_subgraph) > 0) {
  dem_cl <- cluster_louvain(dem_subgraph, weights = E(dem_subgraph)$weight)
  dem_mod <- modularity(dem_cl)
  cat("民主党子图内部模块化分数:", dem_mod, "\n")
} else {
  cat("民主党子图无有效边,无法计算模块化\n")
}

# 计算共和党子图的模块化
if (ecount(rep_subgraph) > 0) {
  rep_cl <- cluster_louvain(rep_subgraph, weights = E(rep_subgraph)$weight)
  rep_mod <- modularity(rep_cl)
  cat("共和党子图内部模块化分数:", rep_mod, "\n")
} else {
  cat("共和党子图无有效边,无法计算模块化\n")
}

补充说明

  • 若要替换社区检测算法,只需把cluster_louvain换成你之前用的cluster_walktrap或cluster_leading_eigen即可,参数保持一致。
  • 模块化分数范围通常在[-1,1]之间,正数代表社区内部连接比随机情况更紧密,负数则相反。

内容的提问来源于stack exchange,提问作者lwe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:54:56