---
title: "Práctico 2"
author: "Laboratorio de Evolución"
date: "2025"
output:
  word_document: default
  pdf_document: default
  html_document: default
---
## Métodos Comparativos Filogenéticos

**Resumen del problema**

Es sabido que la presión parcial de oxígeno disminuye con la altura.  Las personas no habituadas "se apunan" o sienten malestar al trasladarse a zonas de montaña, especialmente al momento de realizar actividades físicas exigentes.  Un individuo que se traslada desde una zona baja hasta una de altura, experimenta a lo largo del tiempo una serie de ajustes fisiológicos para paliar al menos parte de esos desajustes.

Por lo tanto, cabe preguntarse si hay cambios genéticos que han sido favorecidos por la selección natural y que permiten a especies y poblaciones que viven a altas elevaciones adaptarse mejor a dichas condiciones.  Tanto en humanos como en especies animales (y muchas otras), hay estudios orientados a identificar estos cambios.

Puesto que la afinidad de la sangre por el oxígeno es un factor clave para la vida en altura, y dicha afinidad depende fuertemente de las características de la hemoglobina (recordemos que la estructura cuaternaria de la hemoglobina combina dos cadenas de tipo alfa y dos de tipo beta en un tetrámero, en torno a un núcleo de hierro), esta proteína ha sido el blanco de muchos estudios.  

En un trabajo relativamente reciente, Natarajan et al. (2016) se plantean identificar algunas de las adaptaciones de la hemoglobina para la vida en la altura.  La hipótesis de trabajo es que la selección natural pudo haber favorecido cambios en las características de la hemoglobina de las especies asociados a la elevación en la que vive cada una. 

Algunas de las ideas del artículo son:  
- Realizar un estudio comparando múltiples especies de aves, procurando elegir pares de especies cercanamente relacionadas, de modo que una de las especies de cada par viva en tierras altas y otra en las tierras bajas cercanas.  
- Para cada una de estas especies, aislar la hemoglobina y estudiar su afinidad con el oxígeno en el laboratorio.

El estudio incluye un análisis de los cambios en las secuencias de las hemoglobinas, que usaremos más adelante en el curso.  Por el momento, extraemos del artículo los siguientes datos para cada una de las 56 especies estudiadas:

1. La elevación en la que viven (específicamente la altura de la localidad en la que fueron estudiadas).
2. La afinidad de su alfa globina por el oxígeno, tomada en condiciones controladas de laboratorio (en un medio que aproxima las condiciones en sangre), resumida por el valor conocido como P50.
3. El árbol filogenético que se utiliza en el artículo.  Este árbol se toma como la mejor hipótesis disponible de las relaciones entre las especies.

**Pregunta 1**. Obtener de internet una curva de afinidad de la hemoglobina con el oxígeno.  ¿Qué es el valor P50?  ¿Cómo debería cambiar el P50 para que la hemoglobina tenga mayor afinidad con el oxígeno, por ejemplo, en una especie de altura?

**Activando los paquetes de R**

Para esta actividad práctica usaremos, **R** (https://cran.r-project.org/) el cual es un entorno y lenguaje de programación enfocado al análisis estadístico. 
Se recomienda el uso **RStudio** (https://posit.co/download/rstudio-desktop/), que es un entorno de desarrollo integrado (IDE), en conjunción con **R**, lo cual facilita el manejo de datos y la realización de los análisis. 

Utilizaremos los siguientes paquetes de **R**, los cuales deben ser previamente instalados:

_**R Markdown**_: para formatear el archivo de salida de los análisis.  
_**knitr**_: para convertir los archivos de R markdown en varios formatos.  
_**phytools**_: varias funciones para análisis filogenéticos, principalmente orientado a la biología comparada.  
_**ggplot2**_: para construir algunos gráficos.

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library("markdown")
library("knitr")
library("phytools")
library("tinytex")
library("ggplot2")
```

**Trabajando con los datos originales**

Mediante el comando "setwd(dir)" podemos indicarle a R en donde están ubicados los archivos con los cuales vamos a estar trabajando, siendo "dir" la ruta hacia nuestro directorio (e.g. C:\\User\\Desktop\\R). También podemos ubicar el directorio de trabajo de R mediante "getwd()" y colocar ahí nuestros archivos de interés. Si tenemos un archivo de **R** (.rmd) en una carpeta, al abrirlo ya se definirá como directorio de trabajo esa misma carpeta.

El bloque de código siguiente lee solamente los datos de elevación y los de P50 de la HbA. Se hace una exploración de esos datos.

```{r}
# Leemos las dos tablas de datos y combinarlas en un solo "data frame".
# Notar que en esta parte son archivos nuevos con los nombres de las variables cambiados
  P50<-read.table("HbA_KCLHIP_P50.txt")
  elevacion<-read.table("Elevacion_2.txt", header = TRUE)
  Datos = cbind(elevacion, P50) # acá se combinan los datos de las dos tablas
  Datos$Elev.cat <- c("Alta", "Baja") # agrego variable categórica Elevación a cada par de spp. 
  table(Datos$Elev.cat) # chequeo que quedan 28 pares   
  print(Datos)
  rm(P50, elevacion)
```

**Pregunta 2**.  La tabla de datos incluye varios pares de especies de un mismo género. ¿Qué tendencias se observan al examinar en varios de esos pares la relación entre altura y P50?    

**Examinando la relación entre elevación y P50**

En el siguiente bloque se obtiene el coeficiente de correlación entre las dos variables de interés, se aplica un modelo de regresión lineal entre dichas variables, y se grafican los valores junto con la línea de tendencia obtenida en la regresión.
```{r}
attach(Datos) # Fijamos las Variables de Datos (ya no es necesario llamarlas a través del comando Datos$x)

# Análisis exploratorios
str(Datos) # Resumen de número y tipo de variables y número de observaciones 
Datos$Elevacion <- as.numeric(as.character(Datos$Elevacion))

summary(Familia) # cuantas observaciones de cada Familia
summary(P50)
HP50 <- ggplot(Datos, aes(x=P50)) # construyo un histograma para explorar la distribución de datos de P50
HP50 + geom_histogram(binwidth=1.6, fill="#f17666", color="#e9ecef", alpha=0.9)

summary(Elevacion)
HE <- ggplot(Datos, aes(x=Elevacion)) # construyo un histograma para explorar la distribución de datos de altura
HE + geom_histogram(binwidth=500, fill="#69b3a2", color="#e9ecef", alpha=0.9)

# Exploro relación P50 vs. Elevación (categórica)  
p <- ggplot(Datos, aes(x=Elev.cat, y=P50, fill=Elev.cat)) + 
geom_boxplot() + 
labs(x = 'Altura', y = 'P50',title = 'Boxplots de P50 de HbA en relación a la altura') +
theme(plot.title = element_text(hjust=0.5, size=10, face='bold'))
p + guides(fill = guide_legend(title = "Categorias de Altura"))

# ...y la relación P50 vs. Elevación (numérica)
# Calculamos el coeficiente de correlación entre las dos variables
  R = cor(Datos$Elevacion,Datos$P50)
  
# Aplicar un modelo lineal (lm) de regresión. Se define a P50 como la variable dependiente y a Elevacion como la variable independiente. 
  Regresion <- lm(Datos$P50~Datos$Elevacion)
  summary.lm(Regresion)

# Graficamos los valores de P50 y elevación, agregando la línea de ajuste obtenida de la regresión lineal. 
ggplot(Datos,aes(Elevacion,P50)) +
geom_point() +
geom_smooth(formula = y ~ x, method='lm') +
labs(x = 'Altura', y = 'P50',title = 'Relacion entre P50 de HbA y Altura') +
theme(plot.title = element_text(hjust=0.5, size=10, face='bold'))

```

**Pregunta 3**. 
¿Cuál es el valor del coeficiente de correlación?  ¿Qué sugiere respecto a la relación entre las variables (e.g.; signo, intensidad)?

Las especies, y por lo tanto sus rasgos, no pueden ser tratadas como variables independientes desde el punto de vista estadístico dado que comparten una historia evolutiva en común. Este problema se hace aún más evidente en taxa cercanamente emparentados. La respuesta a tal problema fue propuesta por Felsenstein (1985) mediante el cálculo de Contrastes Filogenéticos Independientes (PIC, por su sigla en inglés; "Phylogenetic Independent Contrasts"), mediante el cual se transforma a los rasgos analizados en variables independientes, empleando la filogenia de las especies como marco de análisis. En la siguiente sección, vamos a abordar este problema y analizaremos nuevamente la correlación entre la P50 y la Altura, pero esta vez corrigiendo la falta de independencia de los datos, utilizando los CFI como nuevas variables, independientes de la historia evolutiva compartida entre las diferentes especies de aves.


```{r}

#leemos el árbol filogenético
tree<-read.tree("tree.tre")

#enraizamos el árbol en su punto medio
treeR<-midpoint.root(tree)

#visualizamos el árbol enraizado
plotTree(treeR, edge.width=1, ftype="i", fsize=0.7)

#para simplificar los comandos, leemos otro archivo que contiene solo las especies y las máximas alturas registradas, así como otro archivo con los valores de P50 (se puede corroborar y si no se modificó para la etapa anterior, se puede usar el mismo en ambas partes)
elevacion_2<-read.table("Elevacion.txt")
P50_2<-read.table("HbA_KCLHIP_P50.txt") 

#Creamos un vector numérico de las variables para calcular los contrastes
VP50 <- P50_2$P50
Velevacion <- elevacion_2$Elevacion

#Para que los datos y los taxa terminales se asocien correctamente
names(VP50) <- row.names(P50_2)
names(Velevacion) <- row.names(elevacion_2)

#calculamos los contrastes filogenéticamente independientes
ContrasteVP50 <- pic(VP50, treeR)
ContrasteVelevacion <- pic(Velevacion, treeR)

#si queremos extraer además de los contrastes, su varianza asociada 
ContrasteVP50.var <- pic(VP50, treeR, var.contrasts=TRUE)
ContrasteVelevacion.var <- pic(Velevacion, treeR, var.contrasts=TRUE)

#Ahora visualizamos los contrastes filogenéticos calculados anteriormente
ContrasteVP50
ContrasteVelevacion

# vemos los contrastes filogenéticos calculados y también su varianza asociada
ContrasteVP50.var
ContrasteVelevacion.var

#vemos los contrastes asociados a cada nodo, a partir del archivo que también contiene el cálculo de las varianzas. Los contrastes asociados a P50 aparecerán en azul y los asociados a la Elevación aparecerán en verde.

plot(treeR, no.margin=TRUE,edge.width=1 ,cex=c(0.6,0.6))
nodelabels(round(ContrasteVelevacion.var [,1], 3), adj = c(1, -0.4), frame="n", col = "blue", cex=0.6)

#volvemos a plotear la filogenia solo para que nos se superpongan ambos contrastes
plot(treeR, no.margin=TRUE, edge.width=1 ,cex=c(0.6,0.6))
nodelabels(round (ContrasteVP50.var [,1], 3), adj = c(1, 1.1), frame="n", cex=0.6, col = "darkgreen") 
```

```{r}
#Analizamos la evolución correlacionada de ambos rasgos a partir de los archivos sin el cálculo de varianzas
RegresionP50_elevacion <- lm(ContrasteVP50~ContrasteVelevacion)

#Visualizamos los parámetros de la regresión
summary.lm(RegresionP50_elevacion)

#Combinamos los datos de ambos contrastes
Contrastes<-cbind(ContrasteVelevacion, ContrasteVP50)

#visualizamos la relación entre los contrastes y agregamos una línea de tendenica a la regresión
ggplot(Contrastes, aes(ContrasteVelevacion, ContrasteVP50)) +
geom_point() +
geom_smooth(formula = y ~ x, method='lm') +
labs(x = 'Contrastes Elevacion', y = ' Contrastes P50', title = 'Relacion entre contrastes de P50 de HbA y de elevacion') +
theme(plot.title = element_text(hjust=0.5, size=10, face='bold'))
```

```{r}
#Veamos ahora cómo se distribuyen los caracteres sobre la filogenia
#primero definimos el nombre de los datos
P50_2<-setNames(P50_2[,1],rownames(P50_2))
elevacion_2<-setNames(elevacion_2[,1],rownames(elevacion_2))

#y luego obtenemos su distribución sobre la filogenia propuesta
#para el valor de P50
Dist_P50<-contMap(treeR,P50_2,fsize=c(0.5,1),outline=FALSE)

#modificamos la leyenda del gráfico
plot(Dist_P50,fsize=c(0.5,1),outline=FALSE,lwd=c(3,7),leg.txt="P50")

#para las altitudes máximas registradas para cada taxón
Dist_elevacion<-contMap(treeR,elevacion_2,fsize=c(0.5,1),outline=FALSE)

#nuevamente, modificamos la leyenda del gráfico
plot(Dist_elevacion,fsize=c(0.5,1),outline=FALSE,lwd=c(3,7),leg.txt="Elevacion")

```


**Pregunta 4**. 
¿Según los resultados obtenidos, la historia filogenética compartida de las especies parece haber influido en la adaptación de la hemoglobina a la hipoxia?