Nothing
## ----include = FALSE----------------------------------------------------------
options(rmarkdown.html_vignette.check_title = FALSE)
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
out.width = "100%"
)
## ----eval=FALSE---------------------------------------------------------------
# install.packages("bigergm")
## ----setup, results=FALSE, message=FALSE, warning=FALSE, echo=FALSE-----------
library(bigergm)
library(ergm)
library(dplyr)
## ----message=FALSE------------------------------------------------------------
# Load the network object.
data(toyNet)
# Plot the network.
plot(toyNet, vertex.col = rep(c("tomato", "steelblue", "darkgreen", "black"),
each = toyNet$gal$n/4))
## -----------------------------------------------------------------------------
model_formula <- toyNet ~ edges + nodematch("x") + nodematch("y") + triangle
## ----message=FALSE------------------------------------------------------------
res <-bigergm(
# The model you would like to estimate
object = model_formula,
# The number of blocks
n_blocks = 4,
# The maximum number of MM algorithm steps
n_MM_step_max = 100,
# The tolarence for the MM algorithm
tol_MM_step = 1e-6,
# Perform parameter estimation after the block recovery step
estimate_parameters = TRUE,
# Indicate that clustering must take into account nodematch on characteristics
clustering_with_features = TRUE,
# Keep track of block memberships at each EM iteration
check_block_membership = TRUE,
# Name the heuristic algorithm used for initializing the block memberships
initialization = "walktrap"
)
## -----------------------------------------------------------------------------
plot(1:length(res$MM_lower_bound),
res$MM_lower_bound, type = "l", xlab = "Iterations", ylab = "Lower Bound")
## -----------------------------------------------------------------------------
plot(res)
## -----------------------------------------------------------------------------
# For the between networks
summary(res$est_between)
## -----------------------------------------------------------------------------
# For the within networks
summary(res$est_within)
## ----message=FALSE, echo=TRUE-------------------------------------------------
simulate(res, seed = 1)
## ----message=FALSE, echo=TRUE-------------------------------------------------
sim_net <- bigergm::simulate_bigergm(
formula = model_formula,
# The coefficients for the between connections
coef_between = res$est_between$coefficients,
# The coefficients for the within connections
coef_within = res$est_within$coefficients,
# Number of simulations to return
nsim = 1,
# If `stats` a list with network statistics
# for the between and within connections is returned
output = "network"
)
## -----------------------------------------------------------------------------
plot(sim_net)
## ----message=FALSE------------------------------------------------------------
gof_res <- gof(
# The object returned by bigergm::bigergm()
object = res,
# The number of simulations to use
nsim = 100,
# Compute the geodesic distance for the observed and each simulated network
compute_geodesic_distance = TRUE,
# Set a seed for reproducibility
seed = 1234,
# Start at the observed network
start_from_observed = TRUE, type = "within",
# The control parameters for the simulation
control_within = ergm::control.simulate.formula(MCMC.burnin = 1000, MCMC.interval = 1000)
)
## ----message=FALSE, warning=FALSE---------------------------------------------
degree_gof <-
gof_res$simulated$degree_dist %>%
dplyr::group_by(degree) %>%
dplyr::summarise(log_mean_share = mean(log(share)),
log_sd_share = sd(log(share))) %>%
dplyr::ungroup()
plot(degree_gof$degree, degree_gof$log_mean_share,
xlab = "Degree", ylab = "Log Prop. of Nodes",
ylim = c(-5.5,-1.8), xlim = c(6,17), type = "l", lty = 2)
lines(degree_gof$degree, degree_gof$log_mean_share+ 1.96 * degree_gof$log_sd_share, type = "l", lty = 2)
lines(degree_gof$degree, degree_gof$log_mean_share- 1.96 * degree_gof$log_sd_share, type = "l", lty = 2)
tmp_info <- gof_res$original$degree_dist %>%
dplyr::filter(share > 0 & degree < 22)
lines(tmp_info$degree, log(tmp_info$share), lty = 1)
## -----------------------------------------------------------------------------
plot(gof_res)
## ----message=FALSE------------------------------------------------------------
res_second <-
bigergm::bigergm(object = res)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.