Teoria da Coalescência

Teoria da coalescência, essa faz um tempo que estou tentando entender. Tai algo que você le, parece que da pra entender o que as pessoas falam, mas aquelas fórmulas, é complicado de fazer sentido delas, ainda mais quando vem umas umas figuras assim:

fig

Essa figura é do livro Bayesian Evolutionary Analysis with Beast, mas vamos la, se a gente olhar o o artigo no wikipedia, ou em qualquer livro, sempre a gente vai cair na seguinte equação:

Pr\{t\}=(\frac{1}{N}) \cdot  (1-\frac{1}{N})^{t-1}

Essa função da a chance para coalescer no tempo t, de dois indivíduos dentro de uma população de tamanho N.

No wikipedia está:

Pr\{t\}=(\frac{1}{2N}) \cdot  (1-\frac{1}{2N})^{t-1}

Mas vamos ignorar esse 2 por enquanto, pensando em bactérias, onde não precisamos de pai e mãe, todo mundo é haploide, então a fórmula que vamos usar vai ser essa:

Pr\{t\}=(\frac{1}{N}) \cdot  (1-\frac{1}{N})^{t-1}

Primeiro, vamos passar isso para o R, criando uma função.

1
2
3
coalescent<- function(n,t) {
    return((1/n) * (1-(1/4))^(t-1))
}

Agora o que diabos é calculado ae? Bem é calculado a chance de coalescer, que nada mais é, que a chance de ter mães em comum. Pense em dois indivíduos, qual a chance desses coisa caras terem a chance de ter a mesma mãe, se na geração anterior só tinha um indivíduo?
Podemos usar nossa função, onde primeiro falamos qual o tamanho da população e depois a quantas gerações a atrás queremos saber a probabilidade.

> coalescent(1,1) [1] 1

A resposta é 1, porque como o tamanho da população é 1, só tem como esse único individuo ser a mãe desses dois indivíduos, oras bolas.

Agora vamos pensar numa população de 2 indivíduos, veja que o N ser dois significa que a geração das mães tinha 2 indivíduos, aqui estamos sempre pensando para dois filhos.

> coalescent(2,1) [1] 0.5

Isso da meio, isso porque ou você é filho um dos indivíduos ou do outro? Esse N dividindo ali faz parecer algo desse tipo, mas não é bem assim. Vamos pensar aqui, existe duas possíveis mães, bactérias originarias. Vamos chamá-las de “a” e “b”.

> mae<-letters[1:2] > mae [1] "a" "b"

Agora veja que se temos duas mães, duas bactérias mãe, e temos dois filhos, podemos explorar as possibilidades, que são 4

> possibilidades<-expand.grid(individuo1=mae,individuo2=mae) > possibilidades individuo1 individuo2 1 a a 2 b a 3 a b 4 b b

Agora coalescer, é ter a mesma origem, a mesma bactéria mãe,

> possibilidades$individuo1==possibilidades$individuo2 [1] TRUE FALSE FALSE TRUE

E tem dois casos em que isso acontece, quando “a” é a mãe dos dois filhos ou “b” é a mãe dos dois filhos. Só que isso vem de 4 possíveis combinações como vimos ali em cima, ou podemos representar num grafo:

01

Logo, existe 0.5, 50% de chance que é esses dois casos onde a mãe é igual para todos os filhos dividido pelo total de casos, que são 4, 2/4 da 0.5

> sum(possibilidades$individuo1==possibilidades$individuo2)/nrow(possibilidades) [1] 0.5

Então veja que essa conta é a mesma da formula la, lembrando que no tempo 1, teremos aquele elemento que é elevado pelo tempo-1 como zero, e todo número elevado a zero da um, ai multiplicando o 1/n da 1/n

É claro que conforme a gente vai aumentando a população

> mae<-letters[1:3] > mae [1] "a" "b" "c"

as possibilidades aumentam

> possibilidades<-expand.grid(individuo1=mae,individuo2=mae) > possibilidades individuo1 individuo2 1 a a 2 b a 3 c a 4 a b 5 b b 6 c b 7 a c 8 b c 9 c c

mas a continha continua a mesma

> possibilidades$individuo1==possibilidades$individuo2 [1] TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE > sum(possibilidades$individuo1==possibilidades$individuo2)/nrow(possibilidades) [1] 0.3333333

assim como nossa formula funciona bem.

> coalescent(3,1) [1] 0.3333333

E vamos aumentar mais um a população

> coalescent(4,1) [1] 0.25

tudo continua funcionando.

> mae<-letters[1:4] > possibilidades<-expand.grid(individuo1=mae,individuo2=mae) > possibilidades$individuo1==possibilidades$individuo2 [1] TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE [14] FALSE FALSE TRUE > sum(possibilidades$individuo1==possibilidades$individuo2)/nrow(possibilidades) [1] 0.25

Agora vamos pensar onde entra o tempo. Se a gente olhar a formula no tempo 2, a gente vai ver o seguinte:

> coalescent(4,2) [1] 0.1875

Veja que o cenário continua o mesmo, logo nossa população é constante em 4 indivíduos.

> mae<-letters[1:4] > mae [1] "a" "b" "c" "d"

As possibilidades se mantém

> possibilidades<-expand.grid(individuo1=mae,individuo2=mae) > possibilidades individuo1 individuo2 1 a a 2 b a 3 c a 4 d a 5 a b 6 b b 7 c b 8 d b 9 a c 10 b c 11 c c 12 d c 13 a d 14 b d 15 c d 16 d d

Mas para você coalescer a 2 gerações atrás, precisamos de duas coisas, primeiro você não pode coalescer na geração anterior

> não_coalecer<-sum(!possibilidades$individuo1==possibilidades$individuo2)/nrow(possibilidades) > não_coalecer [1] 0.75

E depois você tem que coalescer na próxima geração, a 2 gerações atrás

> coalecer<-sum(possibilidades$individuo1==possibilidades$individuo2)/(nrow(possibilidades)) > coalecer [1] 0.25

So que as duas coisas tem que acontecer, logo é a chance de uma coisa acontecer e outra também, então multiplicamos as probabilidades

> não_coalecer*coalecer [1] 0.1875

e assim temos aquele número, veja que essa chance sempre vai diminuir por causa disso.

Então se a gente olhar isso ao longo do tempo, numa figura, agora que a conta ta mais clara, temos o seguinte.

02

E é isso ai, é mais provável que a gente coalesça logo, mas essa chance vai caindo. E mais uma coisa, se a gente somar essas probabilidades.

03

Que que ta acontecendo? Hora, uma hora a população tem que ter começado, então em algum momento a gente tem que coalescer, a gente tem que ter tido uma mãe em comum.

> sum(coalescent(4,1:10)) [1] 0.9436865 > sum(coalescent(4,1:20)) [1] 0.9968288 > sum(coalescent(4,1:40)) [1] 0.9999899

Veja que quanto mais para trás no tempo a gente anda, mais a chance da coalescência já ter ocorrido para quaisquer dois indivíduos. E bem, acho que é assim que a gente começa a estudar esse negocio de teoria da coalescência.

Claro que podemos expandir esse resultado para gerações não discretas como estamos olhando aqui, além de muitas outras coisas. Por exemplo, algo interessante é que vimos que depende do tempo e do tamanho da população, então podemos estimar ao longo do tempo, se uma população oscilou de tamanho, ao comparar quanto tempo dois indivíduos deveriam coalescer, com sua divergência dado um relógio molecular, se esses valores divergem, a gente pode pensar em um N variável ao longo do tempo. Mas isso vem bem depois.

Bem é isso ai, só um gostinho da teoria da coalescência, e essa formula que é jogada na nossa cara, e não sei se sou só eu que sou fraquinho para demorar a entender isso, mas o script vai estar la no repositório recologia, e se eu escrevi alguma bobeira, algo errado, deixe um comentário corrigindo ou mande um e-mail.

Referência:

Jotun Hein, Mikkel H. Schierup , Carsten Wiuf 2005 Gene Genealogies, Variation and Evolution: A Primer in Coalescent Theory 290pp

Alexei Drummond, Remco Bouckaert 2015 Bayesian Evolutionary Analysis with Beast 260pp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
###
library(igraph)
 
###Definindo a função de probabilidade de coalescencia
coalescent<- function(n,t) {
    return((1/n) * (1-(1/4))^(t-1))
}
 
###Testando o modelo
coalescent(1,1)
 
coalescent(2,1)
 
###Avaliando o resultado
mae<-letters[1:2]
mae
possibilidades<-expand.grid(individuo1=mae,individuo2=mae)
 
possibilidades$individuo1==possibilidades$individuo2
 
sum(possibilidades$individuo1==possibilidades$individuo2)/nrow(possibilidades)
 
###Representação grafica das possibilidades
grafo1<-graph_from_literal(F1-a,F2-a,b)
grafo2<-graph_from_literal(F1-b,F2-a)
grafo3<-graph_from_literal(F1-a,F2-b)
grafo4<-graph_from_literal(F1-b,F2-b,a)
 
local<-matrix(c(0,0,1,0,0,1,1,1),ncol = 2,nrow=4,dimnames = list(c("F1","F2","a","b"),c("x","y")),byrow=T)
 
jpeg("01.jpg")
par(mfrow=c(2,2))
local<-local[match(rownames(local),V(grafo1)$name),]
plot(grafo1,layout=local,vertex.size=50,vertex.color="lightblue",
     vertex.label.color="black",vertex.label.cex=1.8,edge.width=4,edge.color="black")
 
local<-local[match(rownames(local),V(grafo2)$name),]
plot(grafo2,layout=local,vertex.size=50,vertex.color="lightblue",
     vertex.label.color="black",vertex.label.cex=1.8,edge.width=4,edge.color="black")
 
local<-local[match(rownames(local),V(grafo3)$name),]
plot(grafo3,layout=local,vertex.size=50,vertex.color="lightblue",
     vertex.label.color="black",vertex.label.cex=1.8,edge.width=4,edge.color="black")
 
local<-local[match(rownames(local),V(grafo4)$name),]
plot(grafo4,layout=local,vertex.size=50,vertex.color="lightblue",
     vertex.label.color="black",vertex.label.cex=1.8,edge.width=4,edge.color="black")
dev.off()
 
###Mais testes
coalescent(3,1)
 
mae<-letters[1:3]
mae
possibilidades<-expand.grid(individuo1=mae,individuo2=mae)
possibilidades
possibilidades$individuo1==possibilidades$individuo2
sum(possibilidades$individuo1==possibilidades$individuo2)/nrow(possibilidades)
 
 
coalescent(4,1)
mae<-letters[1:4]
possibilidades<-expand.grid(individuo1=mae,individuo2=mae)
possibilidades$individuo1==possibilidades$individuo2
sum(possibilidades$individuo1==possibilidades$individuo2)/nrow(possibilidades)
 
###Alterando o tempo
 
coalescent(4,2)
 
mae<-letters[1:4]
mae
 
possibilidades<-expand.grid(individuo1=mae,individuo2=mae)
possibilidades
 
não_coalecer<-sum(!possibilidades$individuo1==possibilidades$individuo2)/nrow(possibilidades)
coalecer<-sum(possibilidades$individuo1==possibilidades$individuo2)/(nrow(possibilidades))
 
não_coalecer
coalecer
 
não_coalecer*coalecer
 
###Olhando ao longo do tempo
jpeg("02.jpg")
plot(coalescent(4,1:20),xlab="Geração para trás",ylab="Probabilidade",bty="n")
dev.off()
 
jpeg("03.jpg")
plot(cumsum(coalescent(4,1:20)),xlab="Geração para trás",ylab="Somatório das Probabilidades",bty="n")
dev.off()
 
###Somas ao longo do tempo
sum(coalescent(4,1:10))
sum(coalescent(4,1:20))
sum(coalescent(4,1:40))

Resenha – Survey of green building water systems reveals elevated water age and water quality concerns

Esse semana, olhando a revista Science, na seção do Editor’s Choice, tem um artigo muito interessante.

Survey of green building water systems reveals elevated water age and water quality concerns

O objetivo do artigo foi investigar o impacto das novas tecnologias de conservação de água, por exemplo, captar água da chuva, aquecedor solar, na qualidade da água que vem do sistema convencional.
A principio pode não fazer muito sentido, mas é uma avaliação muito interessante. Porque pra mim, eu só pensava bem em estratégias como guardar aguá da chuva para regar plantas, ou lavar um quintal. Mas a saca dos cara vem do fato que economizar água da rua com essas tecnologias verdes, faz com que a água da rua demore mais tempo para percorrer a tubulação de distribuição, fique mais tempo na cacha de água da nossa casa, do prédio, na tubulação, e isso tem um impacto.

A primeira observação muito interessante, é que nos recebemos água tratada, e nela existe algum tipo de desinfectante, por exemplo o cloro, como é comentado no artigo do wikipedia.

fig1

Acontece que, como ele comenta no artigo, esses elementos decaem, e vão se perdendo, ou seja manter a aguá por mais tempo, faz com que eles se percam. Assim, quando a água chega da rede, no caso controle, que não é uma ambiente “verde”, esse decaimento demora mais, já no ambientes mais “verdes”, como a rotatividade da água é mais lenta, a estagnação da água faz esses desinfectantes irem embora.

Outra observação foi a maior quantidade de bactérias que podem causar doenças, devido ao maior tempo para a rotatividade da água. Se a gente lembrar que o crescimento das espécies, mesmo o crescimento logístico, no inicio, quando o ambiente está vazio, tem um aumento exponencial, isso é preocupante, ou seja a menor rotatividade da mais tempo para o crescimento exponencial ocorrer, e isso junto a outra característica, é complicado.

É um artigo muito legal, porque levanta uma ideia que está fora do que comumente pensamos. Pessoalmente, eu ja disse que acho muito legal essas tecnologias verdes, mas do ponto de vista de saúde publica, isso tem que ser melhor estudado a longo prazo. Veja que um problema de saúde publica devido a uma onda verde seria lenta. Mas somente conhecimento pode nos deixar preparados para esses problemas.

Além do mais, como é comentado no artigo, isso não é nenhum impedimento para a disseminação de tecnologias verdes. Medidas simples como o estudo, revisão e quem sabe algum tipo de mudança nas práticas de tratamento da água pode resolver. Devem haver substancias, compostos, que tem uma capacidade de permanência maior na água, mantendo a eficiência desinfectante, e mesmo alguma pratica a ser adotada para caixas de água, ou sistemas de armazenar água, para manter quantidades satisfatórias desses compostos para a ação desinfectante.

Esse artigo tem cara que pode virar noticia para pessoas reclamarem desse tipo de politica publica verde, como na frança onde telhados verdes são obrigatórios em novos prédios, mas o próprio artigo ja canta a bola para possíveis soluções, sendo importante mais estudos para avaliar melhor esse impacto, e o quão genérico ele é, dependendo do clima dos países, locais de relevância.

Outra coisa, a parte, sobre o método, é o interessante uso de pcr para identificar a quantificar a presença de bactérias. Ele faz pcr a partir da água coletada, amostra de água, com primers específicos para algumas espécies e um primer genérico para quantificar o total de bactérias, e consegue contar a quantidade de bactérias.

Bem é isso ai, uma quase resenha de artigo para lembrar dele depois, essa informação pode ser útil um dia para discutir algo. Se eu escrevi alguma bobeira, algo errado, deixe um comentário corrigindo ou mande um e-mail.

Referência:

William J. Rhoads, Amy Prudena and Marc A. Edwards 2016 – Survey of green building water systems reveals elevated water age and water quality concerns. Environ. Sci.: Water Res. Technol. 2 164-173

1
### No code