Taller 6

Inferencia estadística usando los modelos ERGM y STERGM en un problema social


Propósito

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.

Contenido

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:

  1. http://vlado.fmf.uni-lj.si/pub/networks/data/esna/sampson.htm.

Situación problema

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.

Instrucciones generales

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:

  1. No crear, eliminar o modificar celdas de este Notebook (salvo lo que se le indique) pues puedeverse afectado el proceso de calificación.
  2. No cambiar los nombres de las variables propuestas en los enunciados los ejercicios.
  3. Cuando se le solicite declarar una estructura de datos debe usar el nombre exigido.
  4. Utilizar estrictamente los tipos de datos y nombres de variable sugeridas en los enunciados de los ejercicios.

Desarrollo

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)

Evaluando los procesos sobre la red agregada (ERGM)

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.

  1. Corriendo el ERGM: Implemente el ergm para estimar los procesos requeridos por el grupo. Utilice las propiedades estructurales necesarias para asegurar la convergencia del modelo.
# 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.

  1. Evaluando el desempeño del modelo: Ahora, evalúe los resultados del modelo utilizando la función GOF. Utilice 1000 simulaciones para validar el comportamiento. Grafique los resultados del GOF y evalue la convergencia de su modelo. Concluya al respecto de la significancia de los estimadores y la convergencia del modelo. Haga los cambios pertinentes para asegurar que el modelo converja antes de seguir al siguiente literal.
# Correr el GOF

gf1 <- gof(m1, control = control.gof.ergm(nsim = 1000))
par(mfrow = c(3,2))
plot(gf1, main = "")

Evaluando los procesos sobre la red temporal (STERGM)

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.

  1. Corriendo el STERGM: Implemente el stergm para estimar los procesos requeridos por el grupo. Utilice las propiedades estructurales necesarias para asegurar la convergencia del modelo. Utilice las mismas propiedades para los procesos de formación y disolución.
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.

  1. Evaluando el desempeño del modelo: Ahora evalúe los resultados del modelo utilizando la función GOF. Utilice 100 simulaciones para validar el comportamiento. Grafique los resultados del GOF y evalue la convergencia de su modelo. Concluya al respecto de la significancia de los estimadores y la convergencia del modelo. Haga los cambios pertinentes para asegurar que el modelo converja antes de seguir al siguiente literal.
# Correr el GOF
gf2 <- gof(m2, control = control.gof.ergm(nsim = 100))
par(mfrow = c(3,2))
plot(gf2, main = "")

  1. Conclusiones finales: Teniendo en cuenta los resultados de la simulaciones con los modelos ERGM y STERGM, ¿qué podría concluir sobre las dinámicas de las redes de estos grupos de monjes? Los resultados del ERGM sugieren que la red agregada está estructurada principalmente por mecanismos de reciprocidad y efectos estructurales de grado y transitividad. Sin embargo, el efecto de homofilia por grupo en el modelo agregado puede verse afectado por la mezcla de procesos dinámicos.

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.