sábado, 21 de abril de 2012

Un ejemplo de la librería "Network" de R.

Ejemplos para la construcción de sociogramas con R (son autonotas, así que no esperen maravillas). 
-Un manual del paquete utilizado Network.
-Una entrada que parece interesare (que solo me he mirado por encima) sobre análisis de redes.


El ejemplo: 
#Se llama a librería específica (hay que instalarla)
library(network)
#Creamos una matriz de 21x21
 m<-matrix(0,21,21)
#Añadimos las conexiones, quedará una matriz, o una tabla de doble entrada, la anterior eran todo ceros
#ejemplo, fila 1, columna 7, es decir sujeto 1 hace acción a sujeto 7.
m[1,7]<-1
#La interacción es bidireccional, la flexita tendrá dos extremos en el grafo
m[7,1]<-1
m[2,6]<-1
m[6,2]<-1
m[3,9]<-1
m[9,3]<-1
m[4,13]<-1
m[13,4]<-1
m[5,16]<-1
m[16,5]<-1
m[10,18]<-1
m[18,10]<-1
m[11,20]<-1
m[20,11]<-1
m[12,9]<-1
m[9,12]<-1
m[15,19]<-
m[19,15]<-1
#Decimos que la matriz es una red
g<-network(m)
#Dibujamos la red
plot(g,main="Agonístico Escolar")
Tal como me han aconsejado; adjunto el resultado: 
Este sociograma está basado en las líneas rojas de este otro (más abajo), que amablemente me indicó mi sobrina.Como se ve, cuando el programa aproxima a los individuos vinculados el grafo pierde glamour. Es interesante notar, que pude "adivinar" a partir de las relaciones de afinidad y de antagonismo relatadas un segundo nivel de relaciones (tipo; los enemigos de mis amigos son mis enemigos, o los enemigos de mis enemigos son mis amigos). De momento no sé poner lineas de diferentes colores, así que no puedo reproducir el grafo artesanal en R (de todas formas es el primero que hago). 



Otro ejemplo con datos de unos amigos del genero Cercocebus, que los principales lectores de este bloc habrán escuchado hablar (a veces incluso en contra de su voluntad).
¡Código!

#Se llama a librería específica
library(network)
#los datos en forma de vector

mi<-c(0,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0)
#le decimos que los ponga en una matriz de 6 columnas y que las lea por filas
ma<-matrix(mi,ncol=6,byrow=TRUE)
#Ahora si le pregunto por ma, vean lo que genera
ma

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    0    1    1    1    1    1
[2,]    1    0    1    1    1    0
[3,]    1    1    0    1    1    1
[4,]    1    0    1    0    1    1
[5,]    1    0    1    1    0    0
[6,]    0    0    0    0    0    0

#Que es la matriz que yo quiero (esto ha de decirse cantado como si fuera una zarzuela), si no le hubiera #dicho lo de las filas, por ejemplo así:

ma<-matrix(mi,ncol=6)
#Y pregunto por ma
 ma
#Da la misma matriz pero por columnas, ahora nos va a dar igual, pero en otras ocasiones nos va a interesar #diferenciar columnas de filas. 
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    0    1    1    1    1    0
[2,]    1    0    1    0    0    0
[3,]    1    1    0    1    1    0
[4,]    1    1    1    0    1    0
[5,]    1    1    1    1    0    0
[6,]    1    0    1    1    0    0

#Volvemos

ma<-matrix(mi,ncol=6,byrow=TRUE)
#Decimos que k es ma en forma de red
k<-network(ma)
#Le decimos que nos dibuje k, con el título "Ejemplo patatín patatán"
plot(k,main="Ejemplo Grooming realizado recibido")
#Y el resultado (se ha utilizado png("loquesea.png") y dev.off(), antes y después de plot() para hacer la #imagen)

Tampoco sé poner etiquetas... I'm sorry

El individuo de abajo es la cría (en las flechas parece si las relaciones son bidireccionales o no). Creo que los dos de los extremos son los dos machos (el grosor de las lineas es artefactal, la matriz está hecha con unos), bueno... puede ser un recurso interesante... 

2 comentarios:

Amaya dijo...

Sería interesante ver un pantallazo de lo que sale - si no contiene datos sujetos a protección, claro -.

Toni dijo...

Por supuesto, y si me lo pide una señorita como usted, incluso pongo otro ejemplo comentado :-).