在R中设置statnet模型

时间:2018-01-25 23:44:13

标签: r social-networking network-analysis statnet

我想模拟指数族随机图,我刚开始学习使用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命令来模拟具有预先指定的节点数量的网络(不是从任何特定数据集中学习的),例如{{1} 1}},其中P(y) = 1/Z exp(a * num_edges + b * num_triangles)a是用户指定的系数。 我应该如何在b中编写这样的模型?

1 个答案:

答案 0 :(得分:1)

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

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

修复模拟以获得与给定图形相同数量的边缘(在这种情况下为flomarriage)

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)是更稳定的最佳替代品。