Mostrando entradas con la etiqueta Ejemplos de R. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ejemplos de R. Mostrar todas las entradas

miércoles, 23 de mayo de 2012

Test de Mantel



Nathan Mantel (1919–2002). Bioestadístico
Imagen Wikipedia

El test de Mantel, que no el test del mantel ni la prueba del algodón, está relacionado con los métodos estadísticos basados en computación intensiva (simulaciones para entendernos), y permite comparar dos matrices de datos. 

Concretamente en la siguiente web se ofrece un ejemplo de código R para el cálculo del test de Mantel que les permitirá un control total sobre el estadísitico que quieran utilizar para comparar sus dos matrices (que han de ser simétricas):

http://www.romanabades.com/Jacknife.htm

Por cierto si exploran la anterior web podrán encontrar algunos recursos interesantes. 

Más enlaces sobre el test de Mantel:

domingo, 29 de abril de 2012

Multigrafos con Igraph


Si una de sus preocupaciones es como hacer multigrafos con la librería Igraph de R, no se preocupen más, les he encontrado la solución.

Tal vez podríamos designar esta representación como un multidigrafo ya que hay varias líneas entre vértices (multígrafo) y estas están dirigidas (dígrafo), aunque realmente lo que se está haciendo es  transformar un digrafo como multigrado para representar las dos direcciones separadamente (véase: Elementos de Matemática Discreta. UNED).

Aquí lo tenemos:




library(igraph)
#Los datos
g<-graph(c(0,1,0,2,2,0,2,1,3,0,3,1,3,2,4,0,4,1),n=5)
#Definimos las propiedades como curvatura o, también podría ser FALSE, solo que no podriamos ajustar la curvatura.
 
E(g)$curved <- 0
#Y de los que nos interesen le damos curvatura
E(g, P=c(0,2,2,0))$curved <- 0.2
#Et voila!
 
plot(g,layout=layout.circle, main="Multigrafo")
Created by Pretty R at inside-R.org

martes, 24 de abril de 2012

Grafos con "Igraph"

Continuo con ejemplos de representación de redes sociales con R. Estoy seguro que este tema tan apasionante y divertido hará las delicias de todos los lectores de esta humilde bitácora.

Probaremos el paquete "Igraph" que parece que está de moda.

El paquete para R "Igraph", necesita que se le presenten los datos de la matriz de adyacencia por parejas. Es decir, una matriz de doble entrada convencional (o sociomatriz o tabla de confundido o tabla de concordancia o como la quieran llamar) ha de pasarse al formato de Igraph, como pueden ver esta hoja Excel hace automáticamente un vector con los pares que interaccionan (0 con1, 0 con 2, 2 con 0,...). Es importante tener en cuenta que Igraph empieza a contar los vértices (los sujetos) a partir de 0.


Ahora vamos a mostrar algunos grafos que podemos hacer con esta librería.

Introducimos los datos y vamos a ver diferentes representaciones del mismo grafo. 

g<-graph(c(0,1,0,2,2,0,2,1,3,0,3,1,3,2,4,0,4,1),n=5)

#Básico
png("igraph_basico.png")
plot(g,main="Tal cual")
dev.off()

#Lo representamos como un círculo
png("igraph_circulo.png")
plot(g,layout=layout.circle, main="Círculo")
dev.off()

#Lo representamos con este estilo FR
png("igraph_fruich.png")
plot(g,layout=layout.fruchterman.reingold,main="Fruchterman-Reingold")
dev.off()

#Lo representamos con este estilo "graphopt" ¿?
png("igraph_graphopt.png")
plot(g,layout=layout.graphopt,main="Graphopt")
dev.off()

Es el mismo grafo que aquí: http://spingera.blogspot.com.es/2012/04/redes-sociales-con-r.html solo que sin "pesos". 




lunes, 23 de abril de 2012

Redes sociales con R

Con el software R, pueden dibujarse redes sociales o sociogramas. Atrévase a ir más allá del Word y del Excel y flirtee con R y Lyx.

R, dispone de un paquete llamado “Network” que permite tratar los datos como si fueran redes. Una vez se descubre como, es fácil.

Aquí añado un ejemplo más y su resultado.


#***************************
#* Ejemplo en R de una red *
#***************************
#****Llamamos a la librería
library(network)
#****Introcucimos el vector de datos
t<-c(0,3,5,0,0,0,0,0,0,0,4,1,0,0,0,3,3,1,0,0,2,15,0,0,0)
#****Creamos una matriz de adyacencia, que es una matriz cuadrada qeu representa relaciones binarias (quien se 
 
relaciona con quien)
tt<-matrix(t,ncol=5,byrow=TRUE)
#****Transformamos la matriz en una red
ttz<-network(tt)
#****Definimos los nombres de los vértices
network.vertex.names(ttz)<-c("Kasi","Hermes","Monika","Yani","Francoise")
#****Hacemos un vector con los pesos, OJO! Estan tomados a partiz de la matriz en vertical
peso<-c(4,3,2,3,1,3,15,5,1)
#****Dibujamos la red ttz
png("redamenaza.png")
plot.network(ttz,label = network.vertex.names(ttz),label.cex=0.9,edge.lwd=peso,arrowhead.cex=2,main="Amenaza")
dev.off()
#**************************
#****Nombre de las etiquetas: label = network.vertex.names(ttz)
#****Tamaño del texto de las etiquetas: label.cex=1.5,
#****Grueso de las lineas (es el del vector "peso": edge.lwd=peso,
#****Tamaño de las puntas de las flexas: arrowhead.cex=2)
Created by Pretty R at inside-R.org

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... 

lunes, 16 de abril de 2012

apuntes R

aseo<-c(2660,1110,1912,1573,765,1611,615,640,1859,2599)

eti<-c("Kasi","Hermes","Monika","Yani","Francoise")


aseo2<-matrix(aseo,ncol=5,byrow=TRUE)

png("barrasmasterbw.png")

barplot(aseo2,names=eti,main="Aseo Social",xlab="En negro el aseo que realiza, en gris el aseo que recibe")
dev.off()

lunes, 2 de abril de 2012

R

plot(0,0 , xlim=c(0, 1), ylim=c(0, 1))

a<-c(1,0)
b<-c(0,0)
#linea abajo
lines(a,b)
c<-c(1,1)
#linea arriba
lines(a,c)
#sujetos
sa<-c(0.075,0.03)
sb<-c(0.317,0.313)
sc<-c(0.446,0.5)
sd<-c(0.161,0.157)
#origen de y
lin<-c(1,0)
#lineas de los sujetos
lines(sa,lin,lty=4)
lines(sb,lin,lty=5)
lines(sc,lin,lty=6)
lines(sd,lin,lty=1)

Puede ejecutarse aquí:
http://pbil.univ-lyon1.fr/Rweb/

Apunte (autonota)
 http://www.gardenersown.co.uk/Education/Lectures/R/graphs3.htm

domingo, 1 de abril de 2012

Un mono en ASCII y más ejemplos con R





Ejemplo de visionado y borrado de elementos.

> objects()
[1] "a" "b" "col" "et2" "etiquetas"
> rm(b)
> objects()
[1] "a" "col" "et2" "etiquetas"
> #le preguntamos qué es lo que hay, después borramos "b"

Ejemplo de indexación de matriz.

En la primera nos da la columna 2 de la matriz a. En la segunda instrucción nos da la fila 1 de la matriz a ( se puede pedir también un dato concreto conminando la fila y la columna).

> a
Aseo Amenaza
Sujeto A 0.451 0.16
Sujeto B 0.348 0.50
Sujeto C 0.125 0.20
Sujeto D 0.076 0.14
> a[,2]
Sujeto A Sujeto B Sujeto C Sujeto D
0.16 0.50 0.20 0.14
> a[1,]
Aseo Amenaza
0.451 0.160

Otro ejemplo para tratar los datos:

> agre<-matrix(scan("c:/r/agrefabre.txt")) Read 12 items 
> agre
[,1]
[1,] 2.05
[2,] 1.65
[3,] 0.68
[4,] 0.90
[5,] 15.38
[6,] 2.23
[7,] 1.66
[8,] 23.77
[9,] 0.61
[10,] 1.79
[11,] 7.44
[12,] 0.18


# Aquí le preguntamos los datos de 1 a 3.
> agre[1:3]
[1] 2.05 1.65 0.68
> a<-agre[1:3] 
> b<-agre[4:6] 
> c<-agre[7:9] 
> d<-agre[10:12] 
#Aquí hemos asignado nombre a unos vectores de datos que corresponden a 4 sujetos 
> t<-c(a,b,c,d) 
#Aquí el total 
> t
#Llamamos o invocamos a t y nos responde esto:
[1] 2.05 1.65 0.68 0.90 15.38 2.23 1.66 23.77 0.61 1.79 7.44 0.18


En R podemos realizar calculos de forma rápida, sin tener que hacer tantas filigranas como en el Excel (que parace más sencillo).


> range(t)
[1] 0.18 23.77
#El rango de todos lo suejtos
> max(range(t))-min(range(t))
[1] 23.59
#La amplitud del rango. Máximo del rango menos el mínimo.
> ra<-max(range(a))-min(range(a)) 
> ra
[1] 1.37
> rt<-max(range(t))-min(range(t)) 
> rt
#Les ponemos un aetiqueta para poder usar los datos más comodamente
[1] 23.59
> ra/rt
[1] 0.05807546
# Voila! La proporción del sujeto A respecto al rango del grupo.


Aquí un gráfico de 0 a 1.


> plot(0,0 , xlim=c(0, 1), ylim=c(0, 1))




Y material de la UB sobre R.
http://www.ub.edu/stat/docencia/EADB/Curso%20basico%20de%20R.htm#material

Un elegante "tutorial" sobre R.
http://www.statmethods.net/index.html

sábado, 31 de marzo de 2012

Otra minisesión de R

Más ejemplos en R.


> a<-matrix(scan("f:/daseo.txt"),ncol=2) 
> a
[,1] [,2]
[1,] 0.451 0.16
[2,] 0.348 0.50
[3,] 0.125 0.20
[4,] 0.076 0.14


Le digo que cargue un listado de números y los presente como una matriz de dos columnas. 


> dimnames(a)<-list(c("Sujeto A","Sujeto B","Sujeto C","Sujeto D" ),c("Aseo","Amenaza")) 
> a
Aseo Amenaza
Sujeto A 0.451 0.16
Sujeto B 0.348 0.50
Sujeto C 0.125 0.20
Sujeto D 0.076 0.14


Se ponen etiquetas a filas y columnas.


> summary(a)
Aseo Amenaza
Min. :0.0760 Min. :0.140
1st Qu.:0.1128 1st Qu.:0.155
Median :0.2365 Median :0.180
Mean :0.2500 Mean :0.250
3rd Qu.:0.3738 3rd Qu.:0.275
Max. :0.4510 Max. :0.500


Se pide un resumen de los datos y se hacen un par de gráficas.


> jpeg("cajas.png")
> boxplot(a)
> dev.off()
windows
2
> jpeg("barras.png")
> barplot(a,names=et2,col=col,main="Micos")
> dev.off()
windows
2
>

jueves, 29 de marzo de 2012

Un "Hola mundo" en R



Imagen solo enlazada
Escribir una matriz, guardarla en un txt y abrirla. Por algo se empieza...


> a<-(c("hola","adios"))
> a
[1] "hola"  "adios"
> b<-(c(1,2))
> b
[1] 1 2
> w<-cbind(a,b)
> w
     a       b
[1,] "hola"  "1"
[2,] "adios" "2"
> z<-rbind(a,b)
> z
  [,1]   [,2]  
a "hola" "adios"
b "1"    "2"  
> write.table(w,file="c:/r/datos3.txt")
> read.table("c:/r/datos3.txt")
      a b
1  hola 1
2 adios 2
>

¿Qué es R?
http://es.wikipedia.org/wiki/R_(lenguaje_de_programaci%C3%B3n)
¿Se pueden hacer cosas bonitas con R?
http://addictedtor.free.fr/graphiques/