atrib <- read_excel("Atributos2.xlsx")
adjdf <- read_excel("amatriz2.xlsx")
adjm <- adjdf |>
column_to_rownames(var = colnames(adjdf)[1]) |>
as.matrix()
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"
)
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 <- 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 <- 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
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
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
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 <- 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
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")
| 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 |
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.