miércoles, 25 de enero de 2017

ConSha: calculo de configuraciones (de landmarks) consenso para múltiples especies

Hola a todos,

después de meses de abandono, empiezo a actualizar los posts que tenía pendientes en mente.
Así que en está ocasión traigo un función que sirve para calcular las configuraciones consenso de múltiples especies. El nombre de la función es ConSha por sus siglas en inglés: Consensus Shapes.

Pero como siempre en R para Chibchombianos, voy a tratar de desglosar bien lo que hace la función y como utilizarla: Supongamos que tenemos un (1) solo archivo de datos de landmarks en formato .tps que contiene la info. de múltiples especímenes para cada una de múltiples especies (e.g. 100 individuos de la especie A, 30 individuos de la especie B, 47 individuos de la especie C, etc.). Estos datos pueden (o no) estar en desorden, es decir, no necesariamente tienen que estar primero los especímenes de la especie A, y después los de la B y así sucesivamente, de hecho, pueden estar intercalados.
De manera que lo que realiza la función es tomar las configuraciones de cada uno de los 100 especímenes de la especie A y calcular la forma consenso de la especie A, después tomar las configuraciones de cada uno de los 30 especímenes de la especie B y calcular la forma consenso de la especie B, y así sucesivamente calcular las formas consenso de las especies que tengamos en nuestro archivo .tps. De tal forma que al final obtendremos un archivo .tps con las configuraciones consenso de cada especie en el archivo (A,B,C...).

La función se encuentra en mi repositorio de Github en el cual pueden encontrar el archivo de la función ConSha,R, y adicionalmente un archivo dataset.tps para probar la función.
Si abriéramos el archivo de prueba podemos ver que luce de la siguiente forma:

LM=14
3.13045250691872E-001 7.29322525506001E-003 
3.42809792245237E-001 -3.57034721605956E-002 
2.63173123011433E-001 -1.22199144089513E-001 
5.35197442861358E-002 -5.39596439130598E-002 
2.53453105780066E-001 2.62027443048166E-002 
2.04168063279065E-001 1.47620260684790E-002 
-4.60169110946384E-002 1.74600183292736E-001 
-9.59726458304496E-002 1.84357462596101E-001 
-2.83924112942859E-001 1.18457766601670E-001 
-3.55532177430208E-001 3.94077229175337E-002 
-3.68743702133253E-001 -2.08780400403263E-002 
-3.09724469855327E-001 -1.25133003051213E-001 
-9.49111785388863E-002 -1.15361108466499E-001 
1.24656118531812E-001 -9.18467193151895E-002 
ID=Prospis_alba_34545

LM=14
3.21825958820403E-001 1.56972900845896E-002 
3.45021450179769E-001 -5.75459757349876E-002 
2.57049084820015E-001 -1.36520923015687E-001 
7.06583826558961E-002 -6.62131496577447E-002 
2.63084351059020E-001 4.81660509530724E-002 
1.96354558884907E-001 2.97989489308554E-002 
-4.86493263229514E-002 1.67552383318800E-001 
-1.11100055024889E-001 1.77468005498401E-001 
-2.94615965495992E-001 1.19375750027112E-001 
-3.53475503697631E-001 4.16059394982118E-002 
-3.62549588821628E-001 -1.53067880652038E-002 
-3.03266498401659E-001 -1.17607091108639E-001 
-8.83323799402096E-002 -1.16747797663857E-001 
1.07995531284950E-001 -8.97226430649234E-002 
ID=Prospis_alba_34546

LM=14
3.23772512546634E-001 1.53172222532955E-002 
3.38530408452876E-001 -4.69951604929775E-002 
2.64413836969547E-001 -1.23486210486488E-001 
4.37269588640421E-002 -2.89231129970610E-002 
2.52567518005097E-001 1.79572597400994E-002 
1.98047556246809E-001 1.31281405634119E-002 
-3.66453381677634E-002 1.87983560055656E-001 
-7.06493590968309E-002 1.92642854752606E-001 
-2.74332251307463E-001 1.01571391615247E-001 
-3.40139314765272E-001 2.92066724716173E-002 
-3.65512527249101E-001 -5.28351408671462E-002 
-3.18412309285033E-001 -1.23600138718901E-001 
-1.55703386602863E-001 -9.99305637561373E-002 
1.40335695389321E-001 -8.20367741332214E-002 
ID=Prospis_noche_34545

LM=14
3.12177531888443E-001 7.82340734462899E-003 
3.35646892955546E-001 -4.60069867096062E-002 
2.56290952036992E-001 -1.18215560269086E-001 
4.83716227051366E-002 -2.75810545610100E-002 
2.47248182154144E-001 1.90619923042759E-002 
1.90500922194981E-001 1.13233099249798E-002 
-4.53985352495453E-002 1.74591463356953E-001 
-1.06044958223772E-001 1.89223475344767E-001 
-2.82477833452805E-001 1.21836583582178E-001 
-3.52324104292068E-001 4.74368451834241E-002 
-3.70146773792764E-001 -1.73018159239321E-002 
-3.02242089304793E-001 -1.39629643475794E-001 
-9.97265425420069E-002 -1.20196880796853E-001 
1.68124732922512E-001 -1.02365135304926E-001 
ID=Prospis_noche_34546

Y podemos observar que tenemos la configuración (compuesta por 14 landmarks) de 4 especímenes (2 de la especie Prospis noche y 2 de la especie Propspis alba).
De tal manera que al utilizar ConSha, obtendremos un archivo .tps con la configuración consenso de Prospis noche y de Propspis alba.


Usando ConSha
Lo primero que debemos hacer para utilizar ConSha es asegurarnos de que tengamos instalados los paquetes geomorph y abind. Si no los tenemos, podemos instalarlos simplemente con los comandos:
install.packages("geomorph"); install.packages("abind")

A continuación, descargamos el archivo ConSha.R de github y el set de datos de prueba (dataset.tps).
y cargamos en R la función con el comando:
source("ConSha.R")

Y finalmente para correr el set de datos de prueba con ConSha utilizamos el comando:
ConSha("dataset")

Obteniendo un archivo final llamado dataset_AlgnBySpecies.tps que contiene las configuraciones consenso calculadas y que luce por dentro de la siguiente manera:

LM=14
0.314352946252026 0.0372828643538679
0.345391625687852 -0.018266371202351
0.268903501736312 -0.107275433652158
0.0665484984845718 -0.054602373599311
0.25348873237188 0.0579603304359095
0.197099287000799 0.0384379938327593
-0.0609533535837602 0.166073878705452
-0.117567566456806 0.171264076145226
-0.296999890586971 0.0945368247615419
-0.355413088624318 0.0113392674557502
-0.361710883486415 -0.047781149525081
-0.294542245374531 -0.145540513432892
-0.0815632427295364 -0.122737431641517
0.122965679308895 -0.0806919626371959
ID=Prospis_alba_

LM=14
0.315549460170045 0.0375216206687371
0.339328648431645 -0.0187116628050462
0.269025353909479 -0.0989960002074543
0.0481546301899097 -0.0243637113375953
0.247233864993922 0.0388722637648096
0.192371740969995 0.0280620763425688
-0.0556631083991069 0.177079835702801
-0.103572456055501 0.182807603485376
-0.286260948480472 0.0884200435442389
-0.347770083834775 0.00982705083149019
-0.36326190421352 -0.064975746574993
-0.298110334511657 -0.156387108083493
-0.118081420665176 -0.119996896643895
0.161056557495211 -0.0791593686875449
ID=Prospis_noche_

Ojalá la función les sea de mucha utilidad, y espero muy pronto poder añadir otros posts que tengo en mente. Saludos y que la pasen sabroso!

######################################################################################################################
Nota1: la función fue probada con un archivo que contenía 571 especímenes pertenecientes a 18 especies y tardó 0.81 segundos en obtener las formas consenso de todas las especies.

Nota2: se debe tener mucho cuidado con los nombres de los especímenes, asegurándose de que todos los especímenes de una especie estén llamados de la misma manera. Ej.: dos especímenes nombrados como "Genero_Especie" y "genero_espeCie" serán reconocidos como pertenecientes a dos especies diferentes.
######################################################################################################################