指数随机图模型 ERGM(Exponential Random Graph Models)

指数随机图模型 ERGM(Exponential Random Graph Models)

指数随机图模型(Exponential Random Graph Models,ERGM),也称为 p* 模型,是一种用于分析网络数据的统计模型。该模型通过考虑图中节点和边之间的依赖关系,来捕捉网络结构的复杂性。ERGM 的基本思想是,通过定义一系列统计量(称为图统计量),这些统计量反映了图的结构特征,然后使用这些统计量来描述网络的生成过程。
ERGM 的主要步骤包括:

  1. 定义图统计量
    图统计量是网络中结构特征的定量表示,例如节点的度数分布、三角形闭包、节点属性的同质性等。这些统计量反映了网络中的局部和全局结构特征。

  2. 构建概率模型
    ERGM 假设给定图统计量的线性组合(加权和)可以用于描述网络的概率分布。具体来说,ERGM 模型的形式可以表示为:
    P(Y = y) = \frac{\exp(\theta^T g(y,X))}{c(\theta)}

  • Y 是随机关系集;y 是特定的关系集,当Y=1时表示有连接,Y=0 时表示无连接,这种连接既可以是有向的,也可以是无向的。
  • \theta是模型参数,g(y,X)是模型对应的统计量,X是影响因素,c(\theta)是归一化常数,确保概率和为 1。
  • 给定该分布中的特定图y,它出现的概率可以通过该公式进行推导,并且依赖于网络y中的统计值 g(y,X)和对应参数θ,因此,ERGM可以解释某一网络中的各种可能结构规律。
  1. 参数估计
    通过最大似然估计(MLE)或贝叶斯方法来估计模型参数 \theta。由于归一化常数c(\theta) 的计算涉及所有可能图的遍历,因此参数估计过程通常需要使用蒙特卡罗方法或伪似然估计。

  2. 模型检验和诊断
    通过检查模型的拟合优度和残差来评估模型的合理性。例如,可以使用 MCMC 方法生成样本网络,并将其与实际网络进行比较,以验证模型的拟合情况。

ERGM 的优点在于它能够灵活地捕捉网络中的复杂依赖关系和结构特征。然而,由于模型的计算复杂性,特别是对于大规模网络,模型的估计和检验过程可能会比较耗时。

应用领域

ERGM 被广泛应用于社会网络分析、生物网络研究、通信网络建模等领域。例如,在社会网络分析中,ERGM 可以用于研究社交网络中的节点之间的关系模式和影响因素,识别关键节点和社区结构。

示例

假设我们有一个包含 10 个节点的社交网络,节点之间的连边表示友谊关系。我们可以定义一些图统计量,如节点的度数(表示每个节点的朋友数量)、三角形闭包(表示朋友的朋友也是朋友的情况)。通过这些统计量,ERGM 可以用来分析和预测网络的结构特征,例如预测哪些节点更可能形成新的友谊关系。

参考文献

  • Robins, G., Pattison, P., Kalish, Y., & Lusher, D. (2007). An introduction to exponential random graph (p*) models for social networks. Social Networks, 29(2), 173-191.
  • Wasserman, S., & Faust, K. (1994). Social Network Analysis: Methods and Applications. Cambridge University Press.
library(statnet)
library(ergm)
library(sna)
# 读取数据
data("faux.magnolia.high")
fmh <- faux.magnolia.high
plot(fmh,displayisolates=FALSE,vertex.cex=0.8)
Relational Graph.png
# 读取数据成分--》计算度数和节点个数之间的关联
table(component.dist(fmh)$csize)
Degree-Count Matrix.png
# 描述图
summary(fmh)
network attributes.png

vertex attributes.png
# 按类别绘制不同颜色的图
plot(fmh,displayisolates=TRUE,vertex.col="Grade",vertex.cex=0.8)
Classified By Grade.png
# 节点度的计算
fmh.degreedist <- table(degree(fmh,cmode="indegree"))
fmh.degreedist
Degree Matrix.png
#根据分类变量来查看度数分布情况
summary(fmh ~ degree(0:8,"Sex"))
# 内含三元组
summary(fmh ~ triangle)
# 内含边+三元组
summary(fmh ~ edges + triangle)
# 混合矩阵
mixingmatrix(fmh,"Grade")
mixingmatrix(fmh,"Race")
Results.png
# ermg
model_ergm<-ergm(fmh ~ edges)
summary(model_ergm)
# 网络密度
exp(-6.998)/(1+exp(-6.998))
# 模型结果
names(model_ergm)
model_ergm$coefficients
ergm results.png
# 拟合结构=增加星形==>模型退化
model_ergm1<-ergm(fmh ~ edges+kstar(2)+kstar(3))
summary(model_ergm1)
# 拟合结构=增加三角形==>模型退化
model_ergm2<-ergm(fmh ~ edges+triangle)
summary(model_ergm2)
simu<-simulate(model_ergm1,burnin=1e+6,verbose = TRUE,seed = 9)
mixingmatrix(simu,"Race")
mixingmatrix(fmh,"Race")
# 采用图形观测实际值和观测值之间的拟合差异
plot(summary(fmh ~ degree(0:10)),type="l",lty=1,lwd=2,xlab="Degree",ylab="Count")
lines(summary(simu ~ degree(0:10)),type="l",lty=2,lwd=3,xlab="Degree",ylab="Count")
legend("topright",legend = c("observed","simulated"),lwd = 2:3,lty =1:2)
Comparision between Simulates Data and Actual Data.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容