Carga de Datos

atrib <- read_excel("Atributos2.xlsx")
adjdf <- read_excel("amatriz2.xlsx")

adjm <- adjdf |>
  column_to_rownames(var = colnames(adjdf)[1]) |>  
  as.matrix()

Grafo General

gfeeds <- graph_from_adjacency_matrix(adjm, mode = "undirected", diag = FALSE, weighted = TRUE)

atrib$Programa <- as.factor(atrib$Programa)
n_colores <- length(levels(atrib$Programa))
paleta_colores <- brewer.pal(n = min(n_colores, 12), name = "Set3")
mapa_colores <- setNames(paleta_colores, levels(atrib$Programa))

atrib <- atrib %>% 
  filter(`NOMBRE APELLIDO` %in% V(gfeeds)$name) %>%
  arrange(match(`NOMBRE APELLIDO`, V(gfeeds)$name))

V(gfeeds)$color <- mapa_colores[atrib$Programa]

plot(
  gfeeds,
  vertex.label = V(gfeeds)$name,
  vertex.size = 10,
  vertex.color = V(gfeeds)$color,
  vertex.label.cex = 0.4,
  vertex.label.color = "black",
  vertex.frame.color = "darkgray",
  edge.width = 1.2,
  edge.color = "#555555"
)
legend(x = -4.5, y = 0.2,
       legend = levels(atrib$Programa),
       col = paleta_colores,
       cex = 0.6,
       pch = 19,
       pt.cex = 1,
       bty = "n"
)

Métricas Generales

densidad <- edge_density(gfeeds, loops = FALSE)
diametro <- diameter(gfeeds, directed = FALSE)
longm <- average.path.length(gfeeds)
deg <- igraph::degree(gfeeds)
avgdeg <- mean(deg)

data.frame(
  Densidad = densidad,
  Diametro = diametro,
  Longitud_Media = longm,
  Grado_Promedio = avgdeg
)
##     Densidad Diametro Longitud_Media Grado_Promedio
## 1 0.03968254        9       3.751759            2.5

Finanzas y Comercio Internacional

finanzas <- atrib %>% filter(Programa == "Finanzas y Comercio Internacional") %>% pull(`NOMBRE APELLIDO`)
adjfin <- adjm[finanzas, finanzas, drop = FALSE]
gfin <- graph_from_adjacency_matrix(adjfin, mode = "undirected", diag = FALSE, weighted = TRUE)

plot(
  gfin,
  vertex.label = V(gfin)$name,
  vertex.size = 20,
  vertex.color = "#80B1D3",
  vertex.frame.color = "darkgray",
  vertex.label.color = "black",
  vertex.label.cex = 0.5
)

data.frame(
  Densidad = edge_density(gfin, loops = FALSE),
  Diametro = diameter(gfin, directed = FALSE),
  Longitud_Media = average.path.length(gfin),
  Grado_Promedio = mean(igraph::degree(gfin))
)
##     Densidad Diametro Longitud_Media Grado_Promedio
## 1 0.08791209        5       2.444444       1.142857

Negocios y Relaciones Internacionales

negocios <- atrib %>% filter(Programa == "Negocios y Relaciones Internacionales") %>% pull(`NOMBRE APELLIDO`)
adjneg <- adjm[negocios, negocios, drop = FALSE]
gneg <- graph_from_adjacency_matrix(adjneg, mode = "undirected", diag = FALSE, weighted = TRUE)

plot(
  gneg,
  vertex.label = V(gneg)$name,
  vertex.size = 20,
  vertex.color = "#FDB462",
  vertex.frame.color = "darkgray",
  vertex.label.color = "black",
  vertex.label.cex = 0.5
)

data.frame(
  Densidad = edge_density(gneg, loops = FALSE),
  Diametro = diameter(gneg, directed = FALSE),
  Longitud_Media = average.path.length(gneg),
  Grado_Promedio = mean(igraph::degree(gneg))
)
##    Densidad Diametro Longitud_Media Grado_Promedio
## 1 0.1538462        7       2.982143       1.846154

Administración de Empresas

administracion <- atrib %>% filter(Programa == "Administración de Empresas") %>% pull(`NOMBRE APELLIDO`)
adjadm <- adjm[administracion, administracion, drop = FALSE]
gadm <- graph_from_adjacency_matrix(adjadm, mode = "undirected", diag = FALSE, weighted = TRUE)

plot(
  gadm,
  vertex.label = V(gadm)$name,
  vertex.size = 20,
  vertex.color = "#8DD3C7",
  vertex.frame.color = "darkgray",
  vertex.label.color = "black",
  vertex.label.cex = 0.5
)

data.frame(
  Densidad = edge_density(gadm, loops = FALSE),
  Diametro = diameter(gadm, directed = FALSE),
  Longitud_Media = average.path.length(gadm),
  Grado_Promedio = mean(igraph::degree(gadm))
)
##     Densidad Diametro Longitud_Media Grado_Promedio
## 1 0.07189542        3       1.411765       1.222222

Economía

economia <- atrib %>% filter(Programa == "Economía") %>% pull(`NOMBRE APELLIDO`)
adjeco <- adjm[economia, economia, drop = FALSE]
geco <- graph_from_adjacency_matrix(adjeco, mode = "undirected", diag = FALSE, weighted = TRUE)

plot(
  geco,
  vertex.label = V(geco)$name,
  vertex.size = 20,
  vertex.color = "#FB8072",
  vertex.frame.color = "darkgray",
  vertex.label.color = "black",
  vertex.label.cex = 0.5
)

data.frame(
  Densidad = edge_density(geco, loops = FALSE),
  Diametro = diameter(geco, directed = FALSE),
  Longitud_Media = average.path.length(geco),
  Grado_Promedio = mean(igraph::degree(geco))
)
##    Densidad Diametro Longitud_Media Grado_Promedio
## 1 0.1428571        1              1              1

Contaduría Pública

contaduria <- atrib %>% filter(Programa == "Contaduría Pública") %>% pull(`NOMBRE APELLIDO`)
adjcon <- adjm[contaduria, contaduria, drop = FALSE]
gcon <- graph_from_adjacency_matrix(adjcon, mode = "undirected", diag = FALSE, weighted = TRUE)

plot(
  gcon,
  vertex.label = V(gcon)$name,
  vertex.size = 20,
  vertex.color = "#FFFFB3",
  vertex.frame.color = "darkgray",
  vertex.label.color = "black",
  vertex.label.cex = 0.5
)

data.frame(
  Densidad = edge_density(gcon, loops = FALSE),
  Diametro = diameter(gcon, directed = FALSE),
  Longitud_Media = average.path.length(gcon),
  Grado_Promedio = mean(igraph::degree(gcon))
)
##    Densidad Diametro Longitud_Media Grado_Promedio
## 1 0.5357143        3       1.571429           3.75

Doctorado en Estudios del Desarrollo y Territorio

doctorado <- atrib %>% filter(Programa == "Doctorado en Estudios del Desarrollo y Territorio") %>% pull(`NOMBRE APELLIDO`)
adjdoc <- adjm[doctorado, doctorado, drop = FALSE]
gdoc <- graph_from_adjacency_matrix(adjdoc, mode = "undirected", diag = FALSE, weighted = TRUE)

plot(
  gdoc,
  vertex.label = V(gdoc)$name,
  vertex.size = 20,
  vertex.color = "#BEBADA",
  vertex.frame.color = "darkgray",
  vertex.label.color = "black",
  vertex.label.cex = 0.5
)

# Evitar errores si la red no tiene conexiones
dens_doc <- edge_density(gdoc, loops = FALSE)
deg_doc <- igraph::degree(gdoc)
diam_doc <- if (ecount(gdoc) > 0) diameter(gdoc, directed = FALSE) else NA
long_doc <- if (ecount(gdoc) > 0) average.path.length(gdoc) else NA
avgdeg_doc <- mean(deg_doc)

data.frame(
  Densidad = dens_doc,
  Diametro = diam_doc,
  Longitud_Media = long_doc,
  Grado_Promedio = avgdeg_doc
)
##   Densidad Diametro Longitud_Media Grado_Promedio
## 1        0       NA             NA              0

Comparación e Interpretación de Métricas

metricas <- tibble::tibble(
  Programa = c("FEEDS (General)", "Finanzas", "Negocios", "Administración", "Economía", "Contaduría", "Doctorado EDT"),
  Densidad = c(densidad, edge_density(gfin, FALSE), edge_density(gneg, FALSE), edge_density(gadm, FALSE),
               edge_density(geco, FALSE), edge_density(gcon, FALSE), dens_doc),
  Diametro = c(diametro, diameter(gfin, FALSE), diameter(gneg, FALSE), diameter(gadm, FALSE),
               diameter(geco, FALSE), diameter(gcon, FALSE), diam_doc),
  Longitud_Media = c(longm, average.path.length(gfin), average.path.length(gneg), average.path.length(gadm),
                     average.path.length(geco), average.path.length(gcon), long_doc),
  Grado_Promedio = c(avgdeg, mean(igraph::degree(gfin)), mean(igraph::degree(gneg)), mean(igraph::degree(gadm)),
                     mean(igraph::degree(geco)), mean(igraph::degree(gcon)), avgdeg_doc)
)

knitr::kable(metricas, digits = 2, caption = "Comparación de Métricas entre Programas y Red General FEEDS")
Comparación de Métricas entre Programas y Red General FEEDS
Programa Densidad Diametro Longitud_Media Grado_Promedio
FEEDS (General) 0.04 9 3.75 2.50
Finanzas 0.09 5 2.44 1.14
Negocios 0.15 7 2.98 1.85
Administración 0.07 3 1.41 1.22
Economía 0.14 1 1.00 1.00
Contaduría 0.54 3 1.57 3.75
Doctorado EDT 0.00 NA NA 0.00

Interpretación

  • Densidad: La red de Contaduría Pública muestra la mayor densidad (53.57%), indicando una comunidad muy interconectada. En contraste, Doctorado EDT y la red FEEDS general muestran densidades bajas, reflejando redes más dispersas.
  • Diámetro: El mayor diámetro se presenta en la red general (9), lo que sugiere que algunos investigadores están muy alejados entre sí. En comparación, redes como Economía y Contaduría tienen diámetros pequeños, reflejando una mayor cohesión.
  • Longitud Media de Camino: Las redes más conectadas (Economía, Contaduría) tienen caminos promedio más cortos, facilitando el flujo de información. La red general presenta una longitud media de 3.75, indicando que se requieren más pasos para conectar nodos alejados.
  • Grado Promedio: En promedio, cada miembro de Contaduría tiene 3.75 conexiones, lo que puede representar un ambiente colaborativo activo. En cambio, el Doctorado EDT tiene grado promedio cero, indicando desconexión total entre los investigadores del programa.

Estas métricas permiten identificar cuáles programas necesitan mayor articulación dentro del ecosistema y cuáles podrían servir como modelos de interconexión.