Hay dos tipos de m�tricas que se utilizan en el an�lisis de redes sociales: 1) aquellas que se
realizan a los nodos, que tienen que ver con su prominencia en funci�n de la posici�n
estructural que ocupan; 2) aquellas que hacemos sobre toda la red, para conocer por ejemplo:
su densidad, di�metro, grado de agrupamiento, etc.



# cargamos este paquete
library(igraph)
##############################################################################
# CREAMOS UNA GRAFICA
g2 <- rewire.edges(graph.lattice(100, nei=2, dir=TRUE, mutual=TRUE),
                   p=10/100)
# ESTA NO ES UNA GRAFICA AL AZAR, ES UNA QUE ASEMEJA MAS A UNA REAL, ES DE 100 NODOS,
# PROBABILIDAD DE QUE OCURRA UN LAZO DE 10/100, DIRIGIDA (dir=TRUE), ACEPTA 
# LAZOS RECIPROCOS (mutual=TRUE)
class(g2)
# es un objeto del tipo igraph
##############################################################################
# GRAFICAMOS
plot(g2, layout=layout.fruchterman.reingold, vertex.label=NA, vertex.size=10,
     edge.arrow.size=0.3)

##############################################################################
# FUENTE
# modificado y traducido de 
# https://assemblingnetwork.wordpress.com/2013/06/10/network-basics-with-r-and-igraph-part-ii-of-iii/

##############################################################################
# 6.3.1 CENTRALIDAD DE GRADO
# grado de entrada de cada nodo, es decir cuantos lo nominaron
in.deg.g2<-degree(g2,v=V(g2),mode="in")
in.deg.g2
# grado de salida, es decir cuantos nomin� el.
out.deg.g2<-degree(g2,v=V(g2),mode="out")
out.deg.g2
# la suma de ambos
all.deg.g2<-degree(g2,v=V(test.graph),mode="all")
all.deg.g2
# como se distribuye la conectividad de los nodos o actores
hist(all.deg.g2)
##############################################################################
# 6.2.1 TRANSITIVIDAD
reciprocity(g2)
##############################################################################
# 6.2.2 TRANSITIVIDAD
transitivity(g2)
##############################################################################
# 6.2.3 DENSIDAD
# Densidad (No de lazos / posibles lazos)
graph.density(g2)
##############################################################################
# 6.2.4 DISTANCIA GEODESICA

# di�metro de la red, m�xima distancia geod�sica de la red, el camino m�s largo.
# la distancia geod�sica es la distancia m�s corta entre dos nodos.
# Por ejemplo: 1----->2----->3------>4, la distancia es de 3
# si no hay caminito de un nodo a otro la distacia geod�sica se va a infinito (inf)
# una gr�fica esta fuertemente conectada si hay un camino de entre todos los nodos.
# en el caso de grafos dirigidos, los caminos que ignoran la direcci�n de las
# flechas se les llama semi-caminos. Para la distancia geod�sica de un grafo 
# dirigido respetamos las flechas, como si fueramos manejando por avenidas de un 
# solo sentido


diameter(g2) #
#en la siguiente linea vamos a saber cuales son los nodos que est�n el 
# el camino del di�metro, es decir, el camino m�s largo dentro de la 
# red.
nodes.diameter<-get.diameter(g2, directed = TRUE); nodes.diameter
# �C�mo puedo ver gr�ficamente el di�metro?
# defino los atributos de los nodos y lazos
V(g2)$color<-"skyblue"
# nodos azul cielo
V(g2)$size<-7
# nodos de tama�o 7
# cambio de color los nodos del camino del di�metro
V(g2)[nodes.diameter]$color<-"darkgreen"
V(g2)[nodes.diameter]$size<-10
V(g2)[nodes.diameter]$label.color<-"white"
# es decir los nodos en el di�metro deben de ser color verde oscuro y
# mas grandes que el resto de los nodos, con una etiqueta blanca en vez de
# negra. Esto har� que el di�metro resalte. 


E(g2)$color<-"grey"
# todos los lazos que no est�n en el di�metro ser�n grises
E(g2,path=nodes.diameter)$color<-"darkgreen"
E(g2,path=nodes.diameter)$width<-2
# los lazos en el di�metro deben de ser tambi�n verde oscuro y un poco m�s
# gruesos

# graficamos
plot.igraph(g2,
            layout=layout.fruchterman.reingold,
            vertex.label.cex=.5,
            edge.arrow.size=.5)
##############################################################################
# g2 es un objeto exclusivo de de Igraph, �Qu� pasa si nuestro objeto lo queremos
# usar con otro paquete? por ejemplo "sna" que tiene la funci�n "gplot3d"
# este paquete te permite hacer esas transformaciones
library(intergraph)

g22=asNetwork(g2)


gplot3d(g22)
#############