我想模拟指数族随机图,我刚刚开始学习使用statnet和ergm R包。从我在网上找到的教程中,我可以从一个示例数据集中学习一个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),其中a和b是用户指定的系数。我应该如何用statnet编写这样的模型?
发布于 2018-03-16 19:11:47
您可以使用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())附注:我不建议在ERGM模型中使用triangles术语。几何加权项(gwesp,gwdsp)是最稳定的替代项。
https://stackoverflow.com/questions/48453737
复制相似问题