06 04 2016

Tiempo y modo evolutivo

  • Árboles filogenéticos cuentan las relaciones evolutivas
  • En ACF nos interesa (también) los patrones evolutivos de especies y sus rasgos
  • El tiempo (tempo) se refiere a la tasa evolutiva
  • El modo describe los mecanismos evolutivos subyacentes

Tiempo y modo evolutivo

Tiempo

  • ¿Como afecta "X" presión selectiva la tasa evolutiva de un rasgo?

Modo

  • ¿En que momento durante la evolución de un rasgo sucedió la diversificación?
  • ¿Cómo afecta las inercia filogenética el estado actual de un rasgo?

Modelo evolutivo

  • Representación matemática explícita sobre como cambian los rasgos en el tiempo –procesos evolutivos–

Modelos mas comunes para rasgos continuos

  • Movimiento Browniano
  • Ornstein-Uhlenbeck (OU)
  • Radiacion Temprana (Early burst)
  • Modelos Lambda y Kappa (Pagel)

Movimiento browniano (MB)

  • Tambien llamado "caminata aleatoria"
  • Originalmente describe el movimiento de partículas en un medio elástico
  • Modelo evolutivo para rasgos continuos

Modelo MB

Modelo MB

  • El rasgo varia continuamente en el tiempo
  • La dirección del movimiento es independiente a cada paso
  • Los rasgos son distribuidos normalmente
  • El promedio de los rasgos es cercano al valor inicial (raíz)

Modelo MB

En términos evolutivos:

  • El cambio de un rasgo a lo largo de una rama es independiente de cambios en otras ramas (y en si misma!)
  • La dirección en que "evoluciona" el rasgo es "escogida" al azar
  • Mayores cambios son mas probables en ramas mas largas
  • Entre mas tiempo mas pueden cambiar

Modelo MB

En términos evolutivos:

  • La variación del rasgo en el clado aumenta con el tiempo
  • La tasa evolutiva es constante en el tiempo
  • Especies cercanas tienen rasgos mas similares

Modelo MB

Modelo evolutivo nulo

Varios procesos no selectivos pueden asemejar evolución por MB:

  • Deriva génica
  • Selección débil
  • Muchas presiones selectivas actuando al mismo tiempo
  • Selección que cambia continuamente en el tiempo

MB es el modelo subyacente para muchos análisis comparativos

MB en R

Evolución por movimiento es básicamente la acumulación de cambios con generados en forma aleatoria

t <- 100
sig2 <- 0.1
nsimul <- 100
mb<-rnorm(t, mean=0, sd=sqrt(sig2))
hist(mb, main = "Disrtubucion de cambios en MB")

MB en R

bmt <- cumsum(mb)
plot(bmt, type="l", xlab ="Tiempo (generaciones)", ylab = "Rasgo")

MB en R

plot(cumsum(rnorm(t, mean=0, sd=sqrt(sig2))), type="l", ylim=c(-30,30), 
     ylab="Rasgo", xlab = "Tiempo")
lines(cumsum(rnorm(t, mean=0, sd=sqrt(sig2))), col="red")
lines(cumsum(rnorm(t, mean=0, sd=sqrt(sig2))), col="blue")
lines(cumsum(rnorm(t, mean=0, sd=sqrt(sig2))), col="green")

MB en R

MB en R

t <- 1000

mbsims  <- replicate(t, cumsum(rnorm(t, mean=0, sd=sqrt(sig2))))

matplot(mbsims,  type = "l", col = 1, main = "MB",ylab="Rasgo", xlab = "Tiempo")

MB en R

Histograma de la variacion en cada generacion en MB

Efecto de la varianza

Efecto del tiempo (generaciones)

MB en R

Histograma del estado final de 100 rasgos con evolución MB

MB y filogenias

Crear un arbol filogenetico

require(phytools, quietly = T)
## 
##  # maps v3.1: updated 'world': all lakes moved to separate new #
##  # 'lakes' database. Type '?world' or 'news(package="maps")'.  #
t <- 100
n <- 30 
sig2 = 0.1

arbol<-pbtree(b=(log(n)-log(2))/t ,n=n,t=t,type="discrete")
## simulating with both taxa-stop (n) and time-stop (t) is
## performed via rejection sampling & may be slow
## 
##   121 trees rejected before finding a tree

MB y filogenias

Simular un rasgo con un modelo browniano

plot(arbol)

MB y filogenias

n <- 10 
arbol<-pbtree(b= (log(n)-log(2))/t ,n=n,t=t,type="discrete")
## simulating with both taxa-stop (n) and time-stop (t) is
## performed via rejection sampling & may be slow
## 
##   2 trees rejected before finding a tree
rasgoMB<-fastBM(arbol, sig2=sig2, internal=TRUE)
phenogram(arbol, rasgoMB, spread.labels=TRUE, spread.cost=c(1,0),
          ylab = "Rasgo", xlab = "Tiempo")

MB y filogenias

Graficar un fenograma (rasgo + filogenia)

rasgoMB<-fastBM(arbol, sig2=sig2, internal=TRUE)
phenogram(arbol, rasgoMB, spread.labels=TRUE, spread.cost=c(1,0),
          ylab = "Rasgo", xlab = "Tiempo")

Modelo Ornstein-Uhlenbeck (OU)

  • Modelo evolutivo para rasgos continuos
  • Modela selección estabilizadora
  • Basado en la idea de que rasgos adaptativos son mantenidos si las presiones selectivas no cambian
  • Tambien puede modelar restricciones (e.g. geneticas, ontogenetica)

Modelo OU

  • Supone un estado óptimo de el rasgo
  • Permite variación alrededor de ese óptimo
  • Incluye el parámetro α (alpha) que restringe la divergencia del rasgo

Modelo OU

  • A differencia de MB OU limita la variación evolutiva
  • si α=0 entonces OU=MB
  • Tiende a "borrar" la inercia filogenética

Simular modelo OU

sim.ou = function(t, alpha, sig2) { 
        x.ou = numeric(t)
        for (i in 2:t)
        x.ou[i] = x.ou[i - 1] + rnorm(1, mean=0, sd=sqrt(sig2)) - 
            (alpha * x.ou[i - 1])
        return(x.ou)  
    }

ou.1 <- replicate(1000, sim.ou(t = 100, alpha = 1, sig2 = 0.5))
ou.0.5 <- replicate(1000, sim.ou(t = 100, alpha = 0.5, sig2 = 0.5))
ou.0.25 <- replicate(1000, sim.ou(t = 100, alpha = 0.25, sig2 = 0.5))
ou.0.1 <- replicate(100, sim.ou(t = 100, alpha = 0.1, sig2 = 0.5))

Simular modelo OU

par(mfrow = c(2,2), mar = rep(2, 4))

matplot(ou.1,  type = "l", col = 1, main = "alpha = 1", 
        ylim = c(-5, 5))
matplot(ou.0.5,  type = "l", col = 1, main = "alpha = 0.5",
        ylim = c(-5, 5))
matplot(ou.0.25,  type = "l", col = 1, main = "alpha = 0.25", 
        ylim = c(-5, 5))
matplot(ou.0.1,  type = "l", col = 1, main = "alpha = 0.1",
        ylim = c(-5, 5))

Simular modelo OU

Simular modelo OU

ou.0.01 <- replicate(1000, sim.ou(t = 100, alpha = 0.01, sig2 = 0.5))
ou.0.001 <- replicate(1000, sim.ou(t = 100, alpha = 0.001, sig2 = 0.5))
ou.0 <- replicate(1000, sim.ou(t = 100, alpha = 0, sig2 = 0.5))
mb <- replicate(1000, cumsum(rnorm(n = 100, mean=0, sd=sqrt(0.5))))

Simular modelo OU

par(mfrow = c(2,2), mar = rep(2, 4))

matplot(ou.0.01,  type = "l", col = 1, main = "alpha = 0.01",
        ylim = c(-30, 30))
matplot(ou.0.001,  type = "l", col = 1, main = "alpha = 0.001", 
        ylim = c(-30, 30))
matplot(ou.0,  type = "l", col = 1, main = "alpha = 0", ylim = c(-30, 30))
matplot(mb,  type = "l", col = 1, main = "MB", ylim = c(-30, 30))

Simular modelo OU