- Tendencia de especies cercanas a expresar rasgos similares
- Dependencia filogenética en la expresión de un rasgo
25 05 2016
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:
razón de los mínimos cuadrados observados con respecto a los esperados bajo evolución por movimiento browniano
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")'. #
Estimación:
K
## $K ## [1] 0.2820976 ## ## $P ## [1] 0.036
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))
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))
Representa la correlación entre la covarianza observada entre especies con la covarianza esperada bajo movimiento browniano
λ transforma el largo de ramas y compara el ajuste entre los "modelos" y los datos
Estimación:
#probar señal filogenética lambda <- phylosig(arb.arini, dur, method = "lambda", test = T)
Estimación:
lambda[c(1, 4)]
## $lambda ## [1] 0.6069874 ## ## $P ## [1] 8.547271e-06
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))
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))
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))
#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$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
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)
Estimar CIF
plot(arb) nodelabels(text = round(cx,2))
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)
Estimar CIF
plot(arb) nodelabels(text = round(cy,2))
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
Estimar CIF
plot(cy, cx) abline(mod)
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")
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
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
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
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
Error tipo I (ejemplo "a" gráfico anterior)
Estime la señal filogenética para un rasgo comportamental (i.e. "Duration.s") y un rasgo morfológico (i.e "Bill.length.mm") de los datos de Arini.
Estime la coevolución de la frequencia fundamental ("Fund.freq.kHz") y el tamaño corporal ("Body.Mass.g") con regresión filogenética.