0

我想模拟指数族随机图,我刚开始学习使用statnetergmR 包。从我在网上找到的教程中,我能够从示例数据集中学习 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

4

1 回答 1

1

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

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())

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

于 2018-03-16T19:11:47.063 回答