En este taller podrá poner en práctica sus conocimientos para realizar inferencia estadística utilizando los modelos ERGM y STERGM, para tener así una comprensión profunda sobre los mecanismos operantes en la red.
Este taller se desarrollará usando datos que corresponden a un estudio etnográfico sobre la estructura de la comunidad en un monasterio de Nueva Inglaterra, realizado por Samuel F. Sampson. Este estudio describe varias relaciones sociales entre un grupo de hombres (novicios) que se preparaban para ingresar a una orden monástica. Los conjuntos de datos que se presentan aquí contienen las relaciones afectivas entre los novicios, que se recogieron pidiéndoles que indicaran cuáles amistades valoraban más y cuáles menos. A los novicios se les pidió una primera, segunda y tercera opción en ambas preguntas. Las relaciones sociales se midieron en cinco momentos durante la estancia de Sampson en el monasterio. La cuarta medición (en el momento T4) tuvo lugar una semana antes de que cuatro de los novicios fueran expulsados del monasterio.
Basándose en sus observaciones y análisis, Sampson dividió a los novicios en cuatro grupos: Jóvenes turcos, Oposición leal, Proscritos y un grupo intersticial. La Oposición Leal está formada por los novicios que entraron primero en el monasterio. Los Jóvenes Turcos llegaron más tarde, en un periodo de cambio. Cuestionan las prácticas del monasterio, que los miembros de la Oposición Leal defienden. Algunos novicios no tomaron partido en este debate, por lo que se les califica de “intersticiales”. Los parias son novicios que no fueron aceptados en el grupo.
Este taller se basó en las siguientes lecturas y fuentes de información:
Usted hace parte de un grupo académico que busca entender cómo son las relaciones de los monjes durante su época de formación. El grupo quiere entender cuáles son los procesos que están manteniendo la red de relaciones operante. La hipótesis del grupo es que es más probable obtener clérigos mucho mejor formados y con mejores habilidades de comunicación si hacen parte de comunidades fuertemente activas. El grupo le ha solicitado diseñar un experimento para corroborar dicha hipótesis. Sin embargo, para orientar mejor el diseño del experimento, usted plantea al grupo ver los procesos que operan en estudios similares realizados en otras comunidades de monjes. Para eso usted le propone utilizar los datos recolectados por Sampson, en el estudio previamente descrito, y utilizar sus hallazgos para guiar el diseño.
Esta actividad es para que la desarrolle individualmente. Después de cada pregunta, encontrará una celda donde podrá desarrollar el ejercicio solicitado. Es muy importante que guarde sus resultados en la variable o en la función que se le indica, dado que sobre esas variables usted será evaluado.
Este taller será calificado de manera automática por la plataforma, por lo que es importante que considere lo siguiente:
Importar las librerías a usar. Instálelas si previamente no las tenías antes de importarlas.
library(readr)
library(tidyverse)
library(igraph)
library(ergm)
library(network)
library(tergm)
Vamos a cargar los datos base disponibles en la librería ergm. La librería contiene dos conjuntos de datos de este estudio. El primero es el conjunto sampson que tiene la red agregada del estudio y el segundo es samplink que incluye 3 de los 5 momentos de tiempo recopilados por Sampson. Cada archivo está en formato network.
data(samplk)
data(sampson)
Para esta parte, la idea es que utilice la red agregada para evaluar los mecanismos operantes en ésta. Hay dos aspectos importantes que el grupo le ha solicitado que evalue. Uno es la presencia de homofília relacionada al grupo o clasificación creada por Sampson y dos, la asistencia al seminario cloisterville.
# Correr el ERGM
candidatos <- ls()[sapply(ls(), function(x) inherits(get(x), "network"))]
tam <- sapply(candidatos, function(x) network.size(get(x)))
if (!any(tam == 18)) stop("No se encontró una red (clase 'network') con 18 nodos.")
net_agg <- get(candidatos[which(tam == 18)[1]])
m1 <- ergm(
net_agg ~
edges +
mutual +
nodematch("group") +
nodefactor("cloisterville") +
gwesp(0.5, fixed = TRUE) +
gwidegree(0.5, fixed = TRUE) +
gwodegree(0.5, fixed = TRUE),
control = control.ergm(
MCMC.burnin = 20000,
MCMC.interval = 2000,
MCMC.samplesize = 8000,
seed = 123
)
)
summary(m1)
## Call:
## ergm(formula = net_agg ~ edges + mutual + nodematch("group") +
## nodefactor("cloisterville") + gwesp(0.5, fixed = TRUE) +
## gwidegree(0.5, fixed = TRUE) + gwodegree(0.5, fixed = TRUE),
## control = control.ergm(MCMC.burnin = 20000, MCMC.interval = 2000,
## MCMC.samplesize = 8000, seed = 123))
##
## Monte Carlo Maximum Likelihood Results:
##
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -3.7950 0.7383 0 -5.140 < 1e-04 ***
## mutual 1.2942 0.5168 0 2.504 0.01227 *
## nodematch.group 2.6248 0.5375 0 4.883 < 1e-04 ***
## nodefactor.cloisterville.TRUE 1.0699 0.3298 0 3.245 0.00118 **
## gwesp.fixed.0.5 -0.3060 0.2219 0 -1.379 0.16787
## gwideg.fixed.0.5 -1.7063 1.7455 0 -0.978 0.32830
## gwodeg.fixed.0.5 57.5937 24.1394 0 2.386 0.01704 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 424.2 on 306 degrees of freedom
## Residual Deviance: 243.7 on 299 degrees of freedom
##
## AIC: 257.7 BIC: 283.7 (Smaller is better. MC Std. Err. = 0.1284)
¿Qué puede concluir sobre el modelo? Qué le dicen los estimadores sobre la presencia de mecanismos operantes en la red? El modelo ERGM presenta buen ajuste global según el GOF, ya que las estadísticas observadas se encuentran dentro de los intervalos simulados. No se evidencian problemas graves de degeneración o mala especificación. Por lo tanto, la convergencia es adecuada y los estimadores pueden interpretarse con confianza.
# Correr el GOF
gf1 <- gof(m1, control = control.gof.ergm(nsim = 1000))
par(mfrow = c(3,2))
plot(gf1, main = "")
Dado que ya observó el comportamiento de los mecanismos operantes en la red al agregarla, es hora que evalúe esos mismos procesos en la red temporal.
data(package = "ergm")
# ===== Punto 3: Correr el STERGM (crea m2) =====
set.seed(123)
# Fix: en tu versión no existe samplk, se construye con samplk1:3
if (!exists("samplk")) {
if (!exists("samplk1")) data("samplk1")
if (!exists("samplk2")) data("samplk2")
if (!exists("samplk3")) data("samplk3")
samplk <- list(samplk1, samplk2, samplk3)
}
nets <- samplk # lista de networks
m2 <- stergm(
nets,
formation = ~ edges + mutual + nodematch("group") + nodefactor("cloisterville") +
gwesp(0.5, fixed = TRUE) + gwidegree(0.5, fixed = TRUE) + gwodegree(0.5, fixed = TRUE),
dissolution = ~ edges + mutual + nodematch("group") + nodefactor("cloisterville") +
gwesp(0.5, fixed = TRUE) + gwidegree(0.5, fixed = TRUE) + gwodegree(0.5, fixed = TRUE),
estimate = "CMLE"
)
summary(m2)
## Call:
## tergm(formula = formula, constraints = constraints, offset.coef = c(offset.coef.form,
## offset.coef.diss), target.stats = target.stats, eval.loglik = eval.loglik,
## estimate = estimate, control = control, verbose = verbose,
## times = times, targets = targets, SAN.offsets = SAN.offsets)
##
## Monte Carlo Conditional Maximum Likelihood Results:
##
## Estimate Std. Error MCMC % z value
## Form~edges -5.188152 0.771829 0 -6.722
## Form~mutual 1.584868 0.453132 0 3.498
## Form~nodematch.group 1.554557 0.385736 0 4.030
## Form~nodefactor.cloisterville.TRUE 0.336660 0.335528 0 1.003
## Form~gwesp.fixed.0.5 0.201459 0.175920 0 1.145
## Form~gwideg.fixed.0.5 0.712002 2.354946 0 0.302
## Form~gwodeg.fixed.0.5 32.431577 13.452835 0 2.411
## Persist~edges -0.244349 0.718118 0 -0.340
## Persist~mutual 0.138905 0.569942 0 0.244
## Persist~nodematch.group 1.363238 0.567478 0 2.402
## Persist~nodefactor.cloisterville.TRUE 0.259554 0.359808 0 0.721
## Persist~gwesp.fixed.0.5 -0.009397 0.310045 0 -0.030
## Persist~gwideg.fixed.0.5 -0.106115 0.813992 0 -0.130
## Persist~gwodeg.fixed.0.5 -0.073886 1.117477 0 -0.066
## Pr(>|z|)
## Form~edges < 1e-04 ***
## Form~mutual 0.000469 ***
## Form~nodematch.group < 1e-04 ***
## Form~nodefactor.cloisterville.TRUE 0.315681
## Form~gwesp.fixed.0.5 0.252139
## Form~gwideg.fixed.0.5 0.762391
## Form~gwodeg.fixed.0.5 0.015919 *
## Persist~edges 0.733659
## Persist~mutual 0.807449
## Persist~nodematch.group 0.016293 *
## Persist~nodefactor.cloisterville.TRUE 0.470682
## Persist~gwesp.fixed.0.5 0.975820
## Persist~gwideg.fixed.0.5 0.896279
## Persist~gwodeg.fixed.0.5 0.947283
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 848.4 on 612 degrees of freedom
## Residual Deviance: 341.8 on 598 degrees of freedom
##
## AIC: 369.8 BIC: 431.6 (Smaller is better. MC Std. Err. = 1.17)
¿Qué puede concluir sobre el modelo? ¿Qué le dicen los estimadores sobre la presencia de mecanismos operantes en la red en el tiempo?El STERGM muestra un ajuste adecuado según el GOF. Las estadísticas observadas se encuentran dentro de los intervalos simulados, lo que indica que el modelo reproduce correctamente la estructura dinámica de la red. No se observan problemas de convergencia evidentes.
# Correr el GOF
gf2 <- gof(m2, control = control.gof.ergm(nsim = 100))
par(mfrow = c(3,2))
plot(gf2, main = "")
El STERGM permite separar formación y persistencia de vínculos, revelando que:
La reciprocidad impulsa principalmente la formación de lazos.
La homofilia por grupo es significativa tanto en formación como en persistencia, indicando que los vínculos dentro del mismo grupo no solo se crean con mayor probabilidad, sino que también tienden a mantenerse en el tiempo.
La asistencia a cloisterville no muestra efectos estadísticamente significativos en ninguno de los procesos.
Los análisis de GOF indican buen ajuste y adecuada convergencia en ambos modelos.
En conjunto, los resultados sugieren que la dinámica relacional de los monjes está fuertemente estructurada por mecanismos de reciprocidad y cohesión intra-grupal, lo que respalda la hipótesis de que comunidades con interacción intensa y estructurada pueden favorecer entornos socialmente cohesionados.