Beatriz Foganholi Fernandes
Também conhecida como Brabuleta (ou Brabs)!
1. Quem sou? O que faço?
Fiz Bacharelado e Licenciatura em Ciências Biológicas no Instituto de Biociências da USP (IB-USP). Sou mestranda no Departamento de Fisiologia Geral neste mesmo Instituto, trabalhando no Laboratório de Metabolismo Energético e Sazonalidade, sob orientação das Profas. Dras. Silvia Cristina Ribeiro de Souza e Gisele Akemi Oda.
Gosto muito de Cronobiologia e o interesse do meu mestrado é investigar os efeitos do ciclo ambiental de temperatura em aspectos fisiológicos de um animal ectotérmico, a rã touro americana. O título do meu projeto, mais especificamente, é: “Efeitos de altas temperaturas associadas a termociclo diário sobre a atividade e a imunocompetência em Lithobates catesbeianus (Shaw, 1802) em verão e em inverno.”.
2. Exercícios resolvidos durante o curso
Venha conferir meus exercícios resolvidos aqui ⇒ Exercícios da Brabuleta.
3. Trabalho final: Criando uma função
3.1. Proposta A: Criando um actograma!
Contextualização
Você já ouviu falar nos ritmos biológicos?
Os ritmos biológicos estão amplamente distribuídos entre os seres vivos conhecidos, sendo observados tanto em seres unicelulares quanto em multicelulares. Consistem em flutuações cíclicas de variáveis biológicas nos mais diversos níveis de organização, desde a expressão de um gene, a secreção rítmica de um hormônio, o comportamento (como o padrão de alternância entre sono e vigília em animais) ao nível populacional (como os padrões de migrações sazonais). Como resultado, tem-se a distribuição temporal das diversas funções biológicas ao longo do dia e da noite, do mês ou do ano. A figura abaixo traz um exemplo de um ritmo de movimentação foliar observado em Phaseolus multiflorus. [Mais informações aqui!]:
Essa distribuição temporal das funções muitas vezes acontece de forma associada às variações ambientais, como de dia e noite, quente e frio. No entanto, essa relação nem sempre é obrigatória! É possível que um ritmo biológico se mantenha mesmo que todas as variações do ambiente sumam. Por esse motivo, os estudos dos ritmos biológicos, feitos pela chamada Cronobiologia, acontecem associados a diferentes condições ambientais.
Uma ferramenta muito utilizada para analisar padrões de ritmos na Cronobiologia é o actograma, que consiste num empilhamento das atividades registradas dia a dia, com o objetivo de permitir a visualização de padrões na escala diária. Para facilitar ainda mais essa visualização, geralmente são feitos na forma de dupla. Imagine que você tem registros da movimentação de um animal durante 120 horas corridas, e que, se você desenhasse essa movimentação numa fita, ela estaria marcado em rosa como na figura abaixo. Para construir um actograma, basta “cortar” sua fita em pedaços de 24 horas e colocá-las empilhadas em sequência, indo do dia A ao dia E. Por fim, basta duplicar essas fitas e alinhá-las com sua vizinha seguinte para formar um actograma duplo, criando pares AB, BC, CD e DE. como consequência dessa cópia deslocada, a primeira e a última linha do actograma ficam sem par.
Um exemplo mais real de um actograma, para diferentes condições de claro-escuro ambiental, pode ser visto Neste trabalho com camundongos em que áreas cinzas do gráfico são utilizadas para sinalizar os momentos de escuro, enquanto as áreas brancas sinalizam os momentos de claro. As demarcações em preto sinalizam os momentos de atividade do camundongo, andando na roda:
Como esta é uma ferramenta visual muito utilizada na análise dos ritmos biológicos, ao mesmo tempo em que não é disponibilizada por nenhum programa gratuito, minha proposta é desenvolver uma função para plotagem de actogramas a partir de dados de ritmos biológicos.
Planejamento da Função
Entrada
actograma(hora, ritmo, n.dias, Ei, Ef, Fi, Ff)
hora: Conjunto de dados referente aos horários dos dias em que o ritmo foi coletado.ritmo: Conjunto de dados referente a amplitude do ritmo que foi coletado.n.dias: Total de dias desejados no actograma.Ei: vetor contendo a(s) hora(s) de início do escuro, repetida pelo número de dias da(s) respectiva(s) condição(ões). Inclui a possibilidade constante.Ef: vetor contendo a(s) hora(s) de fim do escuro, repetida pelo número de dias da(s) respectiva(s) condição(ões). Inclui a possibilidade constante.Fi: vetor contendo a(s) hora(s) de início do frio, repetida pelo número de dias da(s) respectiva(s) condição(ões). Inclui a possibilidade constante.Ff: vetor contendo a(s) hora(s) de fim do frio, repetida pelo número de dias da(s) respectiva(s) condição(ões). Inclui a possibilidade constante.
Verificação de parâmetros
horaeritmopossuem o mesmo comprimento? Se não, retorna “'hora' e 'ritmo' possuem comprimentos distintos.”.horadeve conter valores no formato de hora. Se não, retorna “Dados contém 'hora' fora de formato”.n.diasé número inteiro positivo? Se não, retorna “'n.dias' deve ser número inteiro e positivo.”.EieEfdevem estar no formato de hora. Se não, retorna “Regime(s) de escuro fora de formato”.FieFfdevem estar no formato de hora. Se não, retorna “Regime(s) de frio fora de formato”.EieEfdevem ter o mesmo comprimento. Se não, retorna “'Ei' e 'Ef' possuem comprimentos distintos”.FieFfdevem ter o mesmo comprimento. Se não, retorna “'Fi' e 'Ff' possuem comprimentos distintos”.
Pseudocódigo
- Subdividir o conjunto de dados
ritmoa cada dia, usando meia-noite como ponto de quebra emhora; - Criar uma lista
amplitudespara as subdivisões diárias deritmoa partir dessa quebra; - Criar as listas
E.inicio,E.fim,F.inicio,F.fimpara armazenar as repetições inseridas nos argumentosEi,Ef,FieFfrespectivamente; - Definir um objeto
ylimcom os valores mínimo e máximo contidos no conjuntoritmo; - Criar uma matriz
layoutpara a plotagem do actograma, comn.dias+1linhas e 2 colunas; - Criar um ciclo
forcom contador[i]de2:(n.dias+1)para plotagem de histogramas na primeira coluna do layout, pulando o primeiro espaço da coluna:- Plota o histograma dos dados contidos em
amplitudes[i]; - Plotagem do ciclo claro-escuro com uso de cláusulas
se:- Para claro constante,
Ei = Ef = 0, não cria nenhum polígono; - Para escuro constante, cria retângulo cinza com
y0 = min(ylim),y1 = max(ylim),x0 = Ei = 0,x1 = Ef = 23:59; - Para presença de claro e escuro:
Sea fase de escuro inclui a meia-noite:- Cria dois retângulos cinzas, com
y0 = min(ylim),y1 = max(ylim):x0 = meia-noite,x1 = E.inicio[i]ex0 = E.fim[i],x1 = meia-noite.
Sea fase de escuro não inclui a meia-noite:- Cria retângulo cinza com
y0 = min(ylim),y1 = max(ylim),x0 = E.inicio[i]ex1 = E.fim[i].
- Plotagem do ciclo quente-frio com uso de cláusulas
se:- Para temperatura constante,
Fi = Ff = 0, mantém o histograma deamplitudesem preto. - Para ciclo de temperatura presente, cria cortes no histograma utilizando os pontos
FieFf, que delimitam coloração do histograma preenchida em azul e mantém o restante com coloração preenchida em vermelho.
- Criar um ciclo
forcom contador[i]de1:n.diaspara plotagem de histogramas na segunda coluna do layout, mantendo em branco o último espaço da coluna, repetindo todas as etapas do item 6. - Criar o objeto
num.diascom a mensagem “Actograma duplo criado com dados den.diasdias”; - Criar o objeto
CEem forma de tabela com as colunasDuração do claro,Duração do escuroeNúmero de dias, e as linhas com os regimes utilizados; - Criar o objeto
QFcom a mensagem “Regime de temperatura constante”ouem forma de tabela com as colunasDuração do quente,Duração do frioeNúmero de dias, e as linhas com os regimes utilizados; - Retorna lista com os objetos
num.dias,CEeQF.
Saída
- Gráfico do actograma em duplo-plot;
- Lista no terminal contendo:
- Número de dias contidos no gráfico;
- regime(s) ambiental(is) de claro-escuro (CE) e
- regime(s) ambiental(is) de quente-frio (QF).
3.2. Proposta B: Utilizando uma tabela de vida!
Contextualização
Quando se trata de qualquer estudo em Biologia, conhecer o ciclo de viva de uma espécie de interesse parece ser um dos primeiros passos antes de aprofundar qualquer investigação. Estudos demográficos, que monitoram, por exemplo, sobrevivência, mortalidade e fecundidade de populações nos permitem fazer previsões e inferências temporais. Além disso, se tornam uma ferramenta para entender efeitos externos, como de doenças ou de alterações ambientais. Esses monitoramentos demográficos podem ser feitos por meio das chamadas tabelas de vida. Um exemplo simplificado pode ser visto na tabela a seguir, que traz a contabilização de sobrevivência e fecundidade de pássaros numa ilha, tanto em anos de chuva como de seca:
As tabelas de vida podem ser feitas de duas formas:
- Quando somos capazes de acompanhar o envelhecimento de uma coorte, que diz respeito ao conjunto de indivíduos que nasceu numa mesma faixa de tempo. Essa é a chamada Tabela de vida dinâmica (ou de coorte).
- Quando observamos indivíduos de coortes distintas e que coexistem num mesmo período, sendo capazes de diferenciar suas idades. Essa é a chamada Tabela de vida estática (ou de tempo específico).
Como esta é uma ferramenta que pode ter uso bastante amplo nas diferentes áreas da biologia - como em conhecer sua espécie de estudo, investigar efeitos ambientais, acompanhar efeitos de medicamentos ou puramente auxiliar em planejamentos metodológicos -, minha proposta é desenvolver uma função que retorne uma tabela de vida completa a partir da escolha do usuário, além de criar gráficos para visualização dos dados de interesse e de curvas demográficas deles derivadas.
Planejamento da Função
Entrada
tab.vida(classes, vivos, fecund = FALSE, tipo)
classes: Conjunto de dados referente às classes de idade da espécie de interesse, podendo ser um vetor numérico ou de fatores.vivos: Conjunto de dados referente ao número de indivíduos vivos observados em cada classe.fecund: Conjunto de dados contendo os valores de fecundidade observados por classe, presente apenas notipo = din.tipo: Argumento que define que tipo de tabela de vida o usuário deseja usar, podendo ser dinâmica (din) ou estática (est).
Verificação de parâmetros
- Os vetores
classesevivospossuem o mesmo comprimento? Se não, retorna “'classes' e 'vivos' apresentam comprimentos distintos”. - O vetor
vivoscontém valores inteiros positivos? Se não, retorna “'vivos' deve ser de números inteiros e positivos.”. - O vetor
fecund, quando presente, contém valores inteiros positivos? Se não, retorna “'fecund' deve ser de números inteiros e positivos.”. - * O vetor
fecund, quando presente, é de mesmo comprimento queclassesevivos? Se não, retorna “ Verifique o comprimento de 'fecund'.”. tipoestá recebendodinouest? Se não, retorna “Escolha entre tabela dinâmica (din) ou estável (est)”.
Pseudocódigo
Se tipo == din:- Transformar o conjunto de dados em um dataframe
vida, contento as colunasclasses,vivosefecundidade; - Adicionar uma coluna
vivos.pcom os valores padronizados de sobreviventes considerando-se a primeira classe etária como 1000; - Adicionar uma coluna
mortos.pa partir da diferença no número de sobreviventes entre uma classe etária e a seguinte; - Adicionar uma coluna
taxa.morta partir da divisãomortos.p/vivos.p; - Adicionar uma coluna
log.axcom o log, na base de 10, dos valores devivos; - Adicionar uma coluna
poder.leta partir do cálculo(log.ax[x]) - (log.ax[x+1]); - Criar dispositivo para 4 gráficos conjuntos
- Plotar histograma do valor absoluto de
vivosem função declasses; - Criar um gráfico de linha de
fecundem função declassespara ilustrar fecundidade; - Criar um gráfico de linha de
vivos.pem função declassespara ilustrar sobrevivência; - Criar um gráfico de linha de
taxa.mortem função declassespara ilustrar taxa de mortalidade;
- Retornar o dataframe
vida.
Se tipo == est:- Transformar o conjunto de dados em um dataframe
vida, contento as colunasclassesevivos; - Adicionar uma coluna
vivos.pcom os valores padronizados de sobreviventes considerando-se a primeira classe etária como 1000;
- Adicionar uma coluna
mortos.pa partir da diferença no número de sobreviventes entre uma classe etária e a seguinte;- Adicionar uma coluna
taxa.morta partir da divisãomortos.p/vivos.p; - Adicionar uma coluna
taxa.vivoa partir da divisãovivos.p/1000; - Criar dispositivo para 4 gráficos conjuntos
- Plotar histograma do valor absoluto de
vivosem função declasses; - Criar um gráfico de linha de
taxa.vivoem função declassespara ilustrar taxa de sobrevivência; - Criar um gráfico de linha de
taxa.mortem função declassespara ilustrar taxa de mortalidade;
- Retornar o dataframe
vida.
Saída
- Na escolha de tabela de vida dinâmica ou de coorte:
- Tabela de vida a partir dos dados apresentados, contendo os números padronizados de
vivos.p,mortos.p,taxa.mortepoder.letalém dos dados informados inicialmente devivosefecund; - Dispositivo gráfico contendo:
- Histograma do número de vivos observados por classe de idade;
- Curva de fecundidade;
- Curva de sobrevivência;
- Curva de mortalidade.
- Na escolha de tabela de vida estática ou de tempo específico:
- Tabela de vida a partir dos dados apresentados, contendo os números padronizados de
sobreviventes,mortos,proporção de sobrevivênciaetaxa de mortalidadea partir dos dados informados inicialmente declasse de idadeenúmero de vivos por início de classe de idade; - Dispositivo gráfico contendo:
- Histograma do número de vivos observados por classe de idade;
- Curva de sobrevivência;
- Curva de mortalidade.
Resultado do Trabalho Final: Proposta A
Não deixe de dar uma olhadinha na função que criei!:
- Confira o código da função
actograma()aqui ⇒ Função: actograma(). - Confira a página de ajuda da função
actograma()aqui ⇒ Ajuda: actograma().