25 05 2016

Señal filogenética

  • Tendencia de especies cercanas a expresar rasgos similares
  • Dependencia filogenética en la expresión de un rasgo

Señal filogenética

  • Temperatura corporal en lagartijas australianas (Blomberg et al. 2003)

Señal filogenética

  • El significado biológico ha sido motivo de controversia
  • Se ha usado como sinónimo de:
    • "conservadurismo de nicho"
    • "labilidad filogenética"

Señal filogenética

  • Revell y colaboradores (2008) muestran que:
    • Muchos procesos diferentes pueden generar una señal filogenética similar
    • No hay una relación directa entre tasa evolutiva y señal filogenética

Señal filogenética

Entonces, ¿para qué diablos sirve?

Estimar la influencia filogenética en los datos para tomarla en cuenta en análisis estadísticos (Araya-Salas, pers. comm)

Por ejemplo:

  • Regresión simple vs regresión filogenética

Estimadores de señal filogenética

  • I Moran (Gittleman & Kot 1990)
  • Prueba de independencia (Abouheif 1999)
  • q de Grafen (Grafen 1989)
  • α del modelo OU (Martins & Hansen 1997)
  • Tiempo medio filogenético (Hansen 1997)
  • D filogenético (Fritz & Purvis 2010)
  • k de Blomberg et al (Blomberg et al. 2003)
  • λ de Pagel (Pagel 1999)

k de Blomberg

  • razón de los mínimos cuadrados observados con respecto a los esperados bajo evolución por movimiento browniano

  • Varían alrededor de 1:
    • k = 1: alta señal filogenetica (coincide con lo esperado bajo movimiento browniano)
    • k = 0: no hay señal filogenética
    • k > 1: mayor señal filogenetica que la esperada bajo movimiento browniano

k de Blomberg

Estimación:

# cargar datos comparativos de Psitacidos
arini.datos.comp <-
readRDS(gzcon(url("http://marceloarayasalas.weebly.com/uploads/2/5/5/2/25524573/arini.datos.comp.rds")))

#definir arbol y datos
arb.arini <- arini.datos.comp[[1]]
datos.arini <- arini.datos.comp[[2]]

#preparar variable con log
dur <- log(datos.arini$Duartion.s)
names(dur) <- datos.arini$Species

#probar señal filogenética
library(phytools)
K <- phylosig(arb.arini, dur, test = T)
## Loading required package: ape
## Loading required package: maps
## 
##  # maps v3.1: updated 'world': all lakes moved to separate new #
##  # 'lakes' database. Type '?world' or 'news(package="maps")'.  #

k de Blomberg

Estimación:

  • La prueba devuelve el valor de K y la probablilidad asociada (p)
  • la p pone a prueba la hipótesis de que la señal filogenética es 0
K
## $K
## [1] 0.2820976
## 
## $P
## [1] 0.036

k de Blomberg

Demostración numérica bajo MB:

Ks <- replicate(n = 1000, expr = phylosig(arb.arini, 
      fastBM(tree = arb.arini), test = F))

hist(Ks, main = "Distribución de los valores de K bajo MB", 
     ylab = "Frecuencia", col = "skyblue", xlim = c(0, 3))

k de Blomberg

Demostración numérica bajo OU:

Ks <- replicate(n = 1000, expr = phylosig(arb.arini, 
      fastBM(tree = arb.arini, alpha = 0.1, theta = 0), test = F))

hist(Ks, main = "Distribución de los valores de K bajo OU", 
     ylab = "Frecuencia", col = "skyblue", xlim = c(0, 3))

λ de Pagel

  • Representa la correlación entre la covarianza observada entre especies con la covarianza esperada bajo movimiento browniano

  • Varían entre 0 y 1:
    • λ = 1: alta señal filogenetica (coincide con lo esperado bajo movimiento browniano)
    • λ = 0: no hay señal filogenética
    • λ > 1: no esta definido (auqne teoricamente puede suceder)

λ de Pagel

λ transforma el largo de ramas y compara el ajuste entre los "modelos" y los datos

λ de Pagel

Estimación:

#probar señal filogenética
lambda <- phylosig(arb.arini, dur, method = "lambda", test = T)

λ de Pagel

Estimación:

  • La prueba devuelve el valor de λ y la probablilidad asociada (p) (+ logLik)
  • la p pone a prueba la hipótesis "señal filogenética = 0""
lambda[c(1, 4)]
## $lambda
## [1] 0.6069874
## 
## $P
## [1] 8.547271e-06

λ de Pagel

Demostración numérica bajo MB:

lambdas <- replicate(n = 1000, expr = phylosig(arb.arini, 
      fastBM(tree = arb.arini), method = "lambda", test = F)[[1]])

hist(lambdas, main = "Distribución de los valores de λ bajo MB", 
     ylab = "Frecuencia", col = "skyblue",
     xlim = c(0, 1.1))

λ de Pagel

Demostración numérica bajo OU:

lambdas <- replicate(n = 100, expr = phylosig(arb.arini, 
      fastBM(tree = arb.arini, alpha = 0.1, theta = 0), 
      method = "lambda", test = F)[[1]])

hist(lambdas, main = "Distribución de los valores de λ bajo OU", 
     ylab = "Frecuencia", col = "skyblue", xlim = c(0, 1.1))

λ de Pagel

lambdas <- replicate(n = 100, expr = phylosig(arb.arini, 
      fastBM(tree = arb.arini, alpha = 0.1, theta = 0), 
      method = "lambda", test = F)[[1]])

hist(lambdas, main = "Distribución de los valores de K bajo OU", 
     ylab = "Frecuencia", col = "skyblue", xlim = c(0, 1.1))

D filogenético

  • Mide la señal filogenética en rasgos binarios
  • Compara la señal filogenetica observada contra:
    • Asociación aleatoria de los rasgos (sin efecto filogenético)
    • Agrupamiento esperado bajo evolución por movimiento browniano

D filogenético

#install.packages("caper")
suppressPackageStartupMessages(library(caper))

#Converter en discreto
veg.bin <- cut((datos.arini$Vegetation.index.EVI), breaks = 2)

#renombrar estados
levels(veg.bin) <- c(0, 1)

datos.arini$Vegetation.index.EVI <- as.numeric(veg.bin)

D <-phylo.d(phy = arb.arini,data = datos.arini,
            binvar= Vegetation.index.EVI, 
            names.col = Species)

D filogenético

D$DEstimate
##       Obs 
## 0.5443521
# Asociación aleatoria de los rasgos (sin efecto filogenético)
D$Pval1
## [1] 0.052
# Agrupamiento esperado bajo evolución por movimiento browniano
D$Pval0
## [1] 0.084

Contrastes independientes filogenéticos

  • Metodo fundacional en ACF (Felsenstein 1985)
  • Evalúan la coevlución de rasgos continuos
  • Los contrastes representan la cantidad de cambio entre dos linajes desde su mas reciente ancestro común
  • Intuitivo: facil de calcular manualmente
  • Asume un modelo de evolución Browniano

Contrastes independientes filogenéticos

Estimar CIF

#crear filogenia
set.seed(20)
arb <- pbtree(n = 10)

#crear datos
set.seed(2)
x <- sample(40:90, 10,replace = T)
arb$tip.label <- paste(arb$tip.label, x, sep = " / ")

#calcular contrastes
cx <- pic(phy = as.phylo(arb),x =  x, scaled = F)

Contrastes independientes filogenéticos

Estimar CIF

plot(arb)
nodelabels(text = round(cx,2))

Contrastes independientes filogenéticos

Estimar CIF

#crear datos
set.seed(10)
y <- sample(10:30, 10,replace = T)
arb$tip.label <- paste(arb$tip.label, y, sep = " / ")

#calcular contrastes
cy <- pic(phy = as.phylo(arb),x =  y, scaled = F)

Contrastes independientes filogenéticos

Estimar CIF

plot(arb)
nodelabels(text = round(cy,2))

Contrastes independientes filogenéticos

Estimar CIF

mod <- lm(cx~cy)
summary(mod)
## 
## Call:
## lm(formula = cx ~ cy)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -30.966  -3.455   1.213   7.425  26.250 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)   -5.033      5.768  -0.873   0.4118  
## cy            -2.783      1.140  -2.441   0.0447 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16.42 on 7 degrees of freedom
## Multiple R-squared:  0.4598, Adjusted R-squared:  0.3826 
## F-statistic: 5.957 on 1 and 7 DF,  p-value: 0.04471

Contrastes independientes filogenéticos

Estimar CIF

plot(cy, cx)
abline(mod)

Regresión filogenética

  • La historia evolutiva compartida hace no-independientes a los rasgos de especies en una clado
  • Ignorar esta dependencia viola los supuestos de modelos de regresión ordinaria

Regresión filogenética vs regresión ordinaria

Error tipo I (ejemplo "a" gráfico anterior) - Regresión ordinaria

#leer datos
datos.pgls <- readRDS(gzcon(url("http://marceloarayasalas.weebly.com/uploads/2/5/5/2/25524573/arbxl.rds")))
arbolx <- datos.pgls[[1]]
datos.a <- datos.pgls[[2]]
datos.b <- datos.pgls[[3]]


# install.packages("nlme")
library(nlme)

ord<-gls(x~y, datos.a, method="ML")

Regresión filogenética vs regresión ordinaria

Error tipo I (ejemplo "a" gráfico anterior) - Regresión filogenética (Pagel)

pglsPagel <- gls(x~y, datos.a, 
            correlation = corPagel(1,arbolx, fixed=FALSE), 
            method="ML")
## Warning in Initialize.corPhyl(X[[i]], ...): Rownames in data frame do not
## match tree tip names; data taken to be in the same order as in tree

Regresión filogenética vs regresión ordinaria

Error tipo I (ejemplo "a" gráfico anterior) - Regresión filogenética (Modelo Browniano)

pglsBrown <- gls(x~y, datos.a, 
             correlation = corBrownian(value = 1,arbolx), 
             method="ML")
## Warning in Initialize.corPhyl(X[[i]], ...): Rownames in data frame do not
## match tree tip names; data taken to be in the same order as in tree

Regresión filogenética vs regresión ordinaria

Error tipo I (ejemplo "a" gráfico anterior) - Comparar modelos

acitab <- AIC(ord, pglsPagel, pglsBrown)

acitab[order(acitab$AIC, decreasing = F),]
##           df      AIC
## pglsPagel  4 225.2368
## ord        3 281.0595
## pglsBrown  3 337.8503

Regresión filogenética vs regresión ordinaria

Error tipo I (ejemplo "a" gráfico anterior) - Comparar modelos

summary(ord)$tTable
##                 Value  Std.Error   t-value      p-value
## (Intercept) 0.8239034 0.22698209  3.629817 4.206429e-04
## y           0.7287197 0.07163453 10.172745 7.798889e-18
summary(pglsPagel)$tTable
##                   Value  Std.Error    t-value      p-value
## (Intercept)  3.04852193 0.37337137  8.1648519 4.022609e-13
## y           -0.03273548 0.08552652 -0.3827524 7.025919e-01

Regresión filogenética vs regresión ordinaria

Error tipo I (ejemplo "a" gráfico anterior)