在 R 中设置 statnet 模型

Setting up a statnet model in R

我想模拟指数族随机图,我刚开始学习使用 statnetergm R 包。从我在网上找到的 tutorial,我能够从示例数据集中学习 ERGM 模型:

# install.packages('statnet')
# install.packages('ergm')
# install.packages('coda')

library(statnet)

set.seed(123)

data(package='ergm') # tells us the datasets in our packages
data(florentine) # loads flomarriage and flobusiness data

# Triad model
flomodel <- ergm(flomarriage ~ edges + triangle) 
summary(flomodel)

目前,我想使用 simulate 命令根据预先指定的公式(不是从任何特定数据集学习的)来模拟具有预先指定数量节点的网络,例如, P(y) = 1/Z exp(a * num_edges + b * num_triangles),其中 ab 是用户指定的系数。 我应该如何在 statnet 中编写这样的模型?

您可以使用 simulate(或 simulate.formula)从给定的公式进行模拟:

simulate(flomarriage ~ edges + triangles, coef = c(3,1))

将模拟修复为与给定图形具有相同数量的边(在本例中为婚姻)

simulate(flomarriage ~ edges + triangles, coef = c(3,1), constraints = ~edges)

并非您可能想要应用的所有约束都可用,因为每个约束都需要特定的 mcmc 采样器,但有关可用内容的列表,请参阅 ?ergm.constraints

要修复模拟以具有任意数量的节点和边(不基于观察到的数据),解决方法是先创建这样一个网络。例如,模拟具有 17 个节点和 16 个边的网络。

test.mat = matrix(0, 17, 17)
test.mat[1,] = 1 #adds 16 edges
test.net = as.network(test.mat, directed = F)
test.sim = simulate(test.net ~ triangles, coef = 1, constraints = ~edges)
summary.statistics(test.sim ~ edges() + triangles())

p.s。我不建议在 ERGM 模型中使用 triangles 项。几何加权项 (gwesp, gwdsp) 是更稳定的最佳替代项。