## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ---- message = FALSE, eval = TRUE--------------------------------------------
# Load R package mlergm
library(mlergm)

# Networks can be created in the same was as other packages 
net <- network.initialize(90, directed = FALSE)

# The difference with mlergm is that we also have a block membership structure 
node_memb <- c(rep(1, 30), rep(2, 30), rep(3, 30))

## ---- echo = FALSE, eval = TRUE-----------------------------------------------
load("vig_data.rda")

## ---- fig.width = 4, fig.height = 3, out.width = "50%", dpi = 300, fig.align = "center", eval = FALSE----
#  # Simulate a network from the edge + gwesp model
#  net <- simulate_mlnet(form = net ~ edges + gwesp,
#                        node_memb = node_memb,
#                        seed = 123,
#                        theta = c(-3, 1, .5))
#  plot(net)

## ---- fig.width = 4, fig.height = 3, out.width = "50%", dpi = 300, fig.align = "center", eval = TRUE, echo = FALSE----
plot(net)

## ---- fig.width = 6, fig.height = 3, fig.align = "center", out.width = "80%", out.height = "30%", dpi = 300----
# Let us use the sampson data set as an example 
data(sampson)
sampson_net <- mlnet(network = samplike, 
                     node_memb = get.vertex.attribute(samplike, "group"))
plot(sampson_net, arrow.size = 2.5, arrow.gap = 0.025)

## ---- eval = FALSE------------------------------------------------------------
#  # Estimate the edge + gwesp model for the simulated network
#  model_est <- mlergm(net ~ edges + gwesp, verbose = 0, seed = 123)

## ---- eval = TRUE, echo = TRUE------------------------------------------------
summary(model_est)

## ---- fig.width = 8, fig.height = 4.5, fig.align = "center", out.height = "70%", out.width = "90%", dpi = 300, eval = FALSE----
#  # We can call the gof.mlergm method directly by calling 'gof' on an object of class 'mlergm'
#  gof_res <- gof(model_est)
#  plot(gof_res, cutoff = 15, pretty_x = TRUE)

## ---- fig.width = 8, fig.height = 4.5, fig.align = "center", out.height = "70%", out.width = "90%", dpi = 300, eval = TRUE, echo = FALSE----
plot(gof_res, cutoff = 15, pretty_x = TRUE)

## ---- eval = FALSE------------------------------------------------------------
#  offset_est <- mlergm(sampson_net ~ edges + mutual,
#                       seed = 123,
#                       parameterization = "offset")

## ---- eval = TRUE-------------------------------------------------------------
summary(offset_est)

## ---- eval = FALSE------------------------------------------------------------
#  mlergm(net ~ edges + gwesp,
#         options = set_options(burnin = 5000, interval = 500, sample_size = 2500))

## ---- eval = FALSE------------------------------------------------------------
#  mlergm(net ~ edges + gwesp,
#         options = set_options(number_cores = 3))

## ---- eval = FALSE------------------------------------------------------------
#  # Adjust the step length manually
#  mlergm(net ~ edges + gwesp,
#         options = set_options(step_len = 0.25))
#  
#  # Use the naive adaptive step length
#  mlergm(net ~ edges + gwesp,
#         options = set_options(adaptive_step_len == TRUE))

## ---- eval = FALSE------------------------------------------------------------
#  mlergm(net ~ edges + gwesp,
#         options = set_options(MCMLE_max_iter = 10,
#                               NR_max_iter = 100,
#                               NR_tol = 1e-4))

