-
Notifications
You must be signed in to change notification settings - Fork 2
/
aula1.Rmd
230 lines (159 loc) · 10.8 KB
/
aula1.Rmd
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
---
title: "Tutorial Biologia Evolutiva 2019"
author: "Diogo Melo"
date: "October 03, 2019"
output:
html_document:
highlight: tango
number_sections: yes
theme: flatly
toc: yes
toc_float:
collapsed: no
smooth_scroll: no
pdf_document:
toc: yes
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Genética quantitativa e evolução
Neste tutorial vamos passar por todas as etapas de análise de um conjunto de dados em genética quantitativa aplicada à macroevolução. Vamos estudar quatro caracteres quantitativos medidos em cinco espécies de roedores em uma filogenia conhecida. Usando esse conjunto de dados, vamos caracterizar o padrão de modularidade em cada espécie, as diferenças nas morfologias médias, e os processos evolutivos que levaram à diferenciação atual.
O primeiro passo, como sempre, é escolher um ambiente de análise. Neste tutorial vamos usar a linguem R, mas todos os passos poderiam ser feitos num programa gráfico como excel e Systat, ou em qualquer outra linguagem de programação, como python, perl, java, C ou Haskell. A linguagem R é especialmente conveniente, primeiro por que os monitores sabem usar ela, e segundo por que existe um pacote (escrito pelos monitores) que automatiza várias dos passos da análise.
## A linguagem R
R é um ambiente de programação _open source_ criado pensando em análises estátisticas. Você pode ler um pouco mais sobre a linguagem neste [site](http://ecologia.ib.usp.br/bie5782/doku.php?id=bie5782:03_apostila:01-intro}).
### Instalando o R
Se você está utilizando um dos computadores do IB, o R já deve estar instalado. Se não, siga as instruções nesse [site](https://cran.r-project.org/) para instalar o R, e opcionalmente (mas muito recomendado!) o editor de código [RStudio](https://www.rstudio.com/products/rstudio/download/).
### Rodando comandos
Ao longo desse tutorial, você sempre vai ver blocos de código que devem ser executados no ambiente R. Por exemplo, se estivessemos interessados em somar dois números poderiamos digitar:
```{r sum}
1 + 1
```
E abaixo da operação temos o resultado que o programa retorna.
Você pode também associar valores a variáveis (chamados objetos) e utilizar esses objetos nas suas operações. O operador "=" associa um valor a um objeto:
```{r objects}
x = 1
y = 2
x + y
```
## Seguindo o tutorial
Exitem dois jeitos de seguir esse tutorial: (1) cegamente copiar e colar os comandos no R ver o resultado; ou (2) entender o que cada parte do comando executado está fazendo e assim já aprender um pouco de R de brinde. Ambas são ok! Nosso objetivo aqui é a biologia evolutiva, o R é só um acessório. Quando alguma operação no R parecer mais esotérica, vamos tentar explicar nos comentários do código ou no texto. Se não ficar claro, consulte os monitores!
## Preliminares
Para começar, precisamos instalar um pacote (chamado evolqg) e carregar os dados para a area de trabalho usando a função data. Funções no R são como pequenos conjuntos de instruções com um nome. Para executar uma função basta digitar o nome dela, com os argumentos daquela função entre parênteses. Linhas que começam com # são comentários e são ignoradas pelo R. (Para ver mais exemplos iniciais, confira [esse tutorial](http://ecologia.ib.usp.br/bie5782/doku.php?id=bie5782:03_apostila:02-entrada) do curso de pós-graduação em R oferecido pela ecologia do IB!)
```{r packagesfake, eval = FALSE}
# Instalando o pacote de genética quantitativa evolutiva
if(!require(evolqg)){install.packages("evolqg")}
# Carregando o pacote evolqg
library(evolqg)
# Carregando o conjunto de dados que vamos utilizar
data(dentus)
```
```{r packages, echo = FALSE}
library(evolqg)
data(dentus)
```
## Aos dados!
Com os dados carregados, podemos ver todas as medidas digitando o nome do objeto com os dados.
Aqui vamos ver só as primeiras linhas, mas no seu computador você deve ver o conjunto completo.
```{r fake, eval = FALSE}
dentus
```
```{r dados, echo = FALSE}
head(dentus)
```
Como podemos ver, os dados estão organizados em linhas e colunas. Cada linha representa um indivíduo, e cada coluna representa um caráter. As 4 primeiras colunas são os caracteres quantitativos, e a quinta coluna contém a espécie de cada indivíduo.
A planilha atualizada para 2023 está disponível nesse [link](https://raw.githubusercontent.com/diogro/BioEvol/master/dentus2023.csv).
# Objetivos da Aula 1
Em cada aula vamos fazer algumas contas e discutir os resultados. Ao final do curso todos esses resultados devem ser compilado num relatório final.
Nessa aula vamos calcular:
1. Média de cada caráter;
2. Variância de cada caráter;
3. Coeficiente de variação de cada caráter;
2. Gráfico da distribuição de cada caráter.
## Médias e variâncias globais
Vamos começar calculando as médias globais utilizando a função sapply e a função mean.
Os resultados não aparecem aqui, mas rodando os comandos no R você deve ser capaz de produzí-los!
```{r, eval = FALSE}
# Como a última coluna contém as espécie,
# vamos utilizar o operador de indexação do R [] para selecionar as colunas de 1 a 4.
# A função sapply passa todas as colunas do primeiro argumento para a função no segundo argumento.
sapply(dentus[,1:4], mean)
```
Podemos utilizar a mesma estratégia para calcular as variâncias e desvios padrões:
```{r, eval = FALSE}
# Variâncias
sapply(dentus[,1:4], var)
# Desvios padrão
sapply(dentus[,1:4], sd)
```
Para calcular o coeficiente de variação, podemos dividir diretamente o desvio padrão pela média:
```{r, eval = FALSE}
# Objeto com os desvios padrão
dentus_sd = sapply(dentus[,1:4], sd)
# Objeto com as médias
dentus_mean = sapply(dentus[,1:4], mean)
# Cálculo do coeficiente de variação
dentus_sd/dentus_mean
```
Ou podemos criar uma função que calcula o coeficiente de variação diretamente
```{r, eval = FALSE}
# Função que calcula o coeficiente de variação
cv = function(x) sd(x)/mean(x)
# Coeficiente de variação
sapply(dentus[,1:4], cv)
```
## Médias e variâncias por espécie
Agora vamos tentar obter esses mesmos valores separando os dados pos espécie. A função aggregate vai ajudar. Essa função é muito semelhante à sapply, mas ela recebe um argumento adicional que permite utilizar uma coluna dos dados para separar os individuos em grupos. Por exemplo, para calcular a média por espécie fazemos:
```{r}
aggregate(dentus[,1:4], list(especie = dentus[,5]), mean)
```
Vc consegue seguir essa lógica e calcular as variâncias e coeficientes de variação por espécie?
## Gráficos
É sempre importantissimo visualisar os dados usando gráficos antes de fazer qualquer análise mais complexa. Vamos explorar várias possibilidades de gráficos que revelam aspectos diferentes da distribuição dos nossos dados.
Para isso vamos carregar alguns pacotes gráficos:
### Carregando pacotes gráficos
```{r, eval = FALSE}
list_pkgs <- c("ggplot2", "GGally", "reshape2")
new_pkgs <- list_pkgs[!(list_pkgs %in% installed.packages()[,"Package"])]
if(length(new_pkgs) > 0){ install.packages(new_pkgs) }
library(evolqg)
library(ggplot2)
library(GGally)
library(reshape2)
```
### Gráficos univariados
O primeiro e mais simples talvez seja o histograma.
```{r, eval = FALSE}
ggplot(melt(dentus), aes(value, group = species, fill = species)) +
geom_histogram() +
facet_wrap(~variable, scale = "free")
```
Podemos também usar boxplots:
```{r, eval = FALSE}
ggplot(melt(dentus), aes(species, value, fill = species, group = interaction(species, variable))) +
geom_boxplot() +
facet_wrap(~variable, scale = "free")
```
Ou um chiquérrimo violin plot:
```{r, eval = FALSE}
ggplot(melt(dentus), aes(species, value, fill = species, group = interaction(species, variable))) +
geom_violin() +
facet_wrap(~variable, scale = "free")
```
### Gráficos bivariados
Outro aspecto interessante é a relação par a par das variáveis.
Por exemplo, vamos olhar para a distribuição bivariada dos dois primeiros caracteres, incluindo também uma reta de regressão por espécie:
```{r, eval = FALSE}
ggplot(dentus, aes(humerus, ulna, group = species, color = species)) +
geom_point() +
geom_smooth(method = "lm", aes(group = species))
```
Vc poderia fazer esse gráfico manualmente para todos os pares de caracteres, mas a função ggpairs resume tudo isso de uma vez:
```{r, eval = FALSE}
ggpairs(dentus, mapping = aes(color = species),
columns = c("humerus", "ulna","femur", "tibia"))
```
# Leitura da próxima Aula 2
- [The Ecological Significance of Correlation Pleiades](https://www.jstor.org/stable/2405824) ([pdf](https://github.com/lem-usp/site-bio208/raw/master/static/pdfs/artigos/Berg-1960.pdf))
__Abstract:__
The phenomenon of correlation pleiades, i.e., the presence of correlations between some quantitative characteristics of certain parts of an organism and at the same time by the absence of correlations between these and the other parts demonstrates the independence of certain developmental processes with respect to other processes within the organism. The study of correlation sets makes it possible to establish the degree of such independence. The adoption of a quantitative criterion provides an adequate basis for the comparative method in the study of stabilizing selection. Nineteen species of herbaceous plants have been studied in order to determine the variability in the degree of dependence between the dimensions of different parts of an organism. It has been established that twelve species have correlation pleiades, while seven species have no correlation pleiades with respect to the dimensions of analogous parts. In all the instances of existence of pleiades it was the flower that had become free of the correlation interdependences within the plant organism. Existence of correlation pleiades is associated with the mode of pollen transfer, involving the presence of specific insect pollinators, with adaptations to localize the pollen deposit on some definite part of the body of the pollinating insect, and with at least one of the structural features providing for such localization (zygomorphism, presence of tubular parts, lateral position of flowers, oligomerization and a rigid fixation of the number of homologous parts of a flower). Insects were the selective factor stabilizing the dimensions of those parts of flowers which participate in the process of the precise localization of pollen on the insect body. Stabilizing selection of flower dimensions created correlation pleiades for reproductive organs, as well as for vegetative parts of the same organism. The general principle underlying the origin of developmental homeostasis in the process of evolution is the discrepancy between the agencies participating in the formation of the character and the selective forces determining its function. The same principle is responsible for the origin of correlation pleiades.