Marianne Azevedo Silva
Sou Graduada em Ciências Biológicas pela UNICAMP e mestre pelo Programa de Pós Graduação em Ecologia da UNICAMP sob orientação do Prof. Paulo S. Oliveira. Atualmente sou doutoranda pelo mesmo Programa e orientador. Tenho minha formação voltada a ecologia molecular. Em minhas pesquisas tenho especial interesse em descrever os padrões locais de distribuição da diversidade genética intraespecífica, bem como entender os fatores que a determinam e a mantém em sistemas naturais. Atualmente, o sistema biológico com a qual trabalho inclui formigas do Cerrado, embora também tenha interesse em outros sistemas.
I. Meus Exercícios
II. Trabalho Final - Propostas
II.I Proposta A: Suficiência amostral em trabalhos com diversidade genética
Contextualização
Tamanho amostral adequado é essencial em qualquer estudo empírico cujo objetivo seja fazer inferências sobre a população a partir de uma amostragem1). Em geral, avaliar a suficiência amostral é uma prática frequente em trabalhos de ecologia. No entanto, em outras áreas, como genética de populações, tal abordagem ainda é dificilmente incorporada às análises de dados. Alguns trabalhos tem buscado estabelecer generalizações a respeito do tamanho amostral adequado para estimativa de diversidade genética das populações (e.g. Hale et al. 2012). Apesar desse esforço, é sabido que essa suficiência amostral pode variar com o tipo de marcador molecular, nível de polimorfismo dos loci e história natural das espécies. Sendo assim, esta proposta tem como objetivo desenvolver uma função que permita aos pesquisadores interessados em genética de populações avaliar se, dado o conjunto de loci microssatélites genotipado, seu esforço amostral foi suficiente para inferir a diversidade genética das populações ou grupos de indivíduos diplóides sob estudo.
Planejamento da Função
Entrada: sample.suff (dados, col.ID, col.pop, col.loci, na.code, IC.plot, gen.div, nsim)
- dados = data frame no qual cada linha corresponde a um indivíduo e as colunas possuem informação da identificação do indivíduo, identificação da população e alelos dos loci genotipados
col.ID= número da coluna com identificação dos indivíduos (classe: integer,col.ID>0)col.pop= número da coluna com identificação da população a qual o indivíduo pertence (classe: integer,col.pop>0)col.loci= intervalo que corresponde às colunas correspondentes aos loci (classe: integer,col.loci>0)na.code= código utilizado para dados faltantesIC.plot= vetor lógico (TRUE/FALSE) indicando se intervalos de confiança devem ser plotadosgen.div= estimativa de diversidade genética a ser calculada, podendo ser: Heterozigosidade esperada e observada (He e Ho, respectivamente), riqueza alélica (Ar) ou riqueza de alelos privados (pA) (classe: character)nsim= número de simulações (classe: integer,nsim>0)- Observação: Caso haja tempo disponível, pretende-se colocar na função o argumento
mol.marker, o qual permitirá escolher entre marcadores microssatélites e marcadores SNPs
Verificando os parâmetros
- dados é da classe data.frame com 1 indivíduo por linha? Se não, pára e escreve: “Objeto de entrada deve ser um data.frame com um indivíduo por linha”
col.ID,col.popecol.locisão números inteiros e maiores que zero? Se não, pára e escreve: “col.ID, col.pop e col.loci devem ser números inteiros maiores que zero”- cada locus está organizado em duas colunas, uma para cada alelo? Se não, pára e escreve “Cada locus deve estar organizado em duas colunas correspondentes aos alelos. Por exemplo (colocar uma linha de exemplo)”
IC.ploté um vetor lógico? Se não, pára e escreve: “IC.plot deve ser um vetor lógico (TRUE/FALSE)”gen.divé um objeto da classe character com uma das opções de estimativa de diversidade genética (He, Ho, Ar, pA)? Se não, pára e escreve: “gen.div deve ser uma das opções: “He”, “Ho”, “Ar”, “pA” ”nasimé um número inteiro maior que zero? Se não, pára e escreve: “nasim deve ser um número inteiro maior que zero”- Se
nasimfor menor que 1000, continua, mas dá um warning: “Um número baixo de simulações pode afetar seus resultados!”
Pseudo-código
- Transformar
dados(data frame) em objeto genind (para isso, os argumentoscol.ID,col.popecol.lociserão usados - Criar um objeto
simula.allpopcomo sendo uma lista vazia (permite inserção de quantos objetos forem necessários dentro da lista) - Entrar em um ciclo (1)
forcom contadoride 1 até o número total de populações. Ou seja, para cada população irá fazer:- Criar objeto
simula.mediacom NAs correspondente ao número de indivíduos da população - Criar objeto
simula.ICsupcom NAs correspondente ao número de indivíduos da população - Criar objeto
simula.ICinfcom NAs correspondente ao número de indivíduos da população - Entrar em um ciclo (2)
forcom contadorjde 1 até número de indivíduos da população- Criar objeto
simula.nindcom NAs correspondente ansim - Entrar em um ciclo(3) 'for' com contador
kde 1 aténsim- simular a estimativa escolhida de
gen.divpara uma subamostragem de tamanhojda população (usar função sample com size=j e replace=T). Cada simulação é armazenada no objetosimula.nindna posiçãok
- Armazenar a média de
simula.nindno objetosimula.mediana posiçãoj - Armazenar o intervalo de confiança superior de
simula.nindno objetosimula.ICsupna posiçãoj - Armazenar o intervalo de confiança inferior de
simula.nindno objetosimula.ICinfna posiçãoj
- Armazenar no objeto
simula.allpopna posiçãoium data frame com 5 colunas sendo elas: numero de individuos amostrados (de 1 até número total de indivíduos na população), populacao (nome da população repetido em todas as linhas), media (médias armazenadas no objetosimula.media), ICsup (intervalos de confiança superiores armazenados no objetosimula.ICsup), ICinf (ntervalos de confiança inferiores armazenados no objetosimula.ICinf)
- Juntar todos os data frames do objeto
simula.allpopem um único data framegen.div.rarefaction - Plotar gráfico da estimativa de diversidade genética em função do número de indivíduos. Para o plot usar: (i) função layout() - no lado esquerdo o gráfico e no direito legenda com as cores de cada população; (ii) uma cor para cada população
- Se
IC.plotfor igual a TRUE, plotar no gráfico as linhas correspondentes aos intervalos de confiança superiores e inferiores das simulações. Nesse caso, as linhas devem ser da cor da população correspondente, mas com um tipo diferente. Legenda deve conter as cores das populações e o que cada tipo de linha indica. - Retornar uma lista sendo que o primeiro objeto é a estimativa de diversidade genética observada para as populações e o segundo objeto é o data frame
gen.div.rarefaction
Saída
- Gráfico com estimativa de diversidade genética em função do tamanho amostral simulado da população (podendo ou não apresentar o intervalo de confiança das simulações)
- Objeto da classe list (
gen.div.rarefaction), contendo, para cada população, a média e os intervalos de confiança superior e inferior da estimativa de diversidade genética em cenários simulados com diferentes números de indivíduos.
Comentários Vitor Rios
Resposta aos Comentários
II.II Proposta B: Adequação alimentar
Contextualização
A população brasileira tem sido, com alta frequência, alvo de doenças como desnutrição, obesidade, diabetes e hipertensão, todas amplamente associadas a hábitos alimentares inadequados. Frente a isso, esforços governamentais tem sido aplicados a fim de de orientar os brasileiros a terem uma alimentação mais saudável e com escolhas alimentares adequadas. Para atingir esse objetivo, o Ministério da Saúde lançou o “Guia alimentar para uma alimentação saudável”4)5), o qual é atualizado periodicamente. Com o intuito de auxiliar a adequação alimentar de brasileiros adultos, essa proposta tem a finalidade de desenvolver uma função que avalie se uma pessoa:
- está dentro do limite de peso ideal para seu sexo e altura
- está tendo uma ingestão adequada de macronutrientes segundo as diretrizes da Organização Mundial da Saúde (diretrizes estas também presentes no guia alimentar do Ministério da Saúde)
Caso o peso e alimentação não estejam de acordo com as estimativas ideais, e se for do desejo da usuário, a função pode retornar um objeto com sugestões de consumo diário variado para uma alimentação saudável que esteja de acordo com as orientações do Ministério da Saúde.
Planejamento da função
Entrada: adeq.alimentar (recordatorio.semanal, peso, altura, idade, sexo, ativ.fisica, cardapio)
- recordatorio.semanal = data frame com o recordatório de ao menos uma semana (7 dias) da alimentação do usuário. Cada linha deve corresponder a um dia da semana e deve haver 5 colunas, sendo elas: n.refeicoes (número de refeições feitas no dia), P (quantidade de proteínas ingeridas no dia), L (quantidade de lipídios ingeridos no dia), C (quantidade de carboidratos complexos ingeridos no dia) e A (quantidade de açucar livre consumido no dia). As colunas de P a A devem estar em unidade de quilocalorias (usuário pode ser basear no Anexo C deste guia para montar seu data frame).
peso= massa do usuário em quilogramas (classe: numeric,peso>0)altura= altura do usuário em metros (classe: numeric,altura>0)idade= idade do usuário em anos (classe: integer, 19<idade<65)sexo= sexo do usuário (classe: character, devendo ser “H” para homens ou “M” para mulheres)ativ.fisica= intensidade da atividade física realizada pelo usuário (classe: character, podendo ser “sedentario”, “pouco ativo”, “ativo” ou “muito ativo”)cardapio= vetor lógico (TRUE/FALSE) indicando se sugestões de consumo diário variado para adequação alimentar devem ser geradas
Verificando parâmetros
- recordatorio.semanal é um data frame, contendo, pelo menos, 7 linhas e 5 colunas, tal que cada linha corresponde a um dia da semana e as colunas correspondem a n.refeicoes, P, L, C e A? se não, pára e escreve: “Recordatório deve ser um data frame, onde cada linha corresponde a um dia da semana e as colunas devem seguir o seguinte formato: (colocar uma linha com um exemplo)”
pesoealturasão números maiores que zero? Se não, pára e escreve: “peso e altura devem ser números maiores que zero”idadeé um némero inteiro maior que 19 e menor que 65? Se não, aparecer um warning: “Cálculos incluídos nesta função foram desenvolvidos para indivíduos adultos. Para crianças, adolescentes e idosos há cálculos específicos que não estão incluídos nessa função!”sexoé igual a “H” ou “M”? Se não, pára e escreve: “sexo deve ser H (para homens) ou M (para mulheres”ativ.fisicaé um objeto da classe character com uma das opções de intensidade da atividade física (sedentario, pouco ativo, ativo ou muito ativo? Se não, pára e escreve: “ativ.fisica deve ser uma das opções: “sedentario”, “pouco ativo”, “ativo” ou “muito ativo” ”cardapioé um vetor lógico? Se não, pára e escreve: “cardapio deve ser um vetor lógico (TRUE/FALSE)”
Pseudo-código
- Estimar peso ideal
pi6)- se
sexo= “H”, IMC desejável = 22 Kg/m2 - se
sexo= “M”, IMC desejável = 21 Kg/m2
- Estimar adequação de peso
ap⇒ap= (peso/pi)*100 -
- se
ap≤ 70, colocar um texto no gráfico “Desnutrição grave” - se 70.1 ≤
ap≤ 80, colocar um texto no gráfico “Desnutrição moderada” - se 80.1 ≤
ap≤ 90, colocar um texto no gráfico “Desnutrição leve” - se 90.1 ≤
ap≤ 110, colocar um texto no gráfico “Eutrofia (dentro do peso ideal)” - se 110.1 ≤
ap≤ 120, colocar um texto no gráfico “Soprepeso” - se
ap> 120, colocar um texto no gráfico “Obesidade”
- Substituir a string de
ativ.fisicapor valor correspondente- se
sexo= “H”:- se
ativ.fisica= “sedentario” substitui pelo valor 1 - se
ativ.fisica= “pouco ativo” substitui pelo valor 1.11 - se
ativ.fisica= “ativo” substitui pelo valor 1.25 - se
ativ.fisica= “muito ativo” substitui pelo valor 1.48
- se
sexo= “M”:- se
ativ.fisica= “sedentario” substitui pelo valor 1 - se
ativ.fisica= “pouco ativo” substitui pelo valor 1.12 - se
ativ.fisica= “ativo” substitui pelo valor 1.27 - se
ativ.fisica= “muito ativo” substitui pelo valor 1.45
- Calcular necessidade de energia estimada
neepara opeso- se
sexo= “H” usar a fórmula: 662 - (9.53 *idade) +ativ.fisica* (15.9 *peso) + (539.6 *altura) - se
sexo= “M” usar a fórmula: 354 - (6.91 *idade) +ativ.fisica* (9.36 *peso) + (726 *altura)
- Calcular média de
recordatorio.semanal$n.refeicoese armazenar no objetomean.n.refeicoes - Fazer um teste t para ver se
mean.n.refeicoesé significativamente diferente de 58)- se teste t for significativo, escrever na tela “Você deve ajustar seu número de refeições para 5 refeições ao dia, incluindo café da manhã, lanche da manhã, almoço, lanche da tarde e janta”
- Calcular intervalos de confiança superior e inferior da média das porcentagens diárias de
recordatorio.semanal$Pem relação aneee armazenar nos objetosICsup.peICinf.p, respectivamente- se
ICsup.peICinf.pestiverem contidos no intervalo de 15% a 20%9), escrever “Seu consumo diário de proteínas está bom!” - caso contrário, escrever “Seu consumo diário de proteínas precisa ser ajustado”
- Calcular intervalos de confiança superior e inferior da média das porcentagens diárias de
recordatorio.semanal$Lem relação aneee armazenar nos objetosICsup.leICinf.l, respectivamente- se
ICsup.leICinf.lestiverem contidos no intervalo de 20% a 30%10), escrever “Seu consumo diário de lipídios está bom!” - caso contrário, escrever “Seu consumo diário de lipídios precisa ser ajustado”
- Calcular intervalos de confiança superior e inferior da média das porcentagens diárias de
recordatorio.semanal$Cem relação aneee armazenar nos objetosICsup.ceICinf.c, respectivamente- se
ICsup.ceICinf.cestiverem contidos no intervalo de 45% a 65%11), escrever “Seu consumo diário de carboidratos complexos está bom!” - caso contrário, escrever “Seu consumo diário de carboidratos complexos precisa ser ajustado”
- Calcular intervalos de confiança superior e inferior da média das porcentagens diárias de
recordatorio.semanal$Aem relação aneee armazenar nos objetosICsup.aeICinf.a, respectivamente- se
ICsup.aeICinf.aestiverem contidos no intervalo de 0% a 10%12), escrever “Seu consumo diário de açucares simples está bom!” - caso contrário, escrever “Seu consumo diário de açucares simples precisa ser ajustado”
- Se
cardapio= TRUE- Carregar uma base de dados de alimentos disponibilizado no Anexo C deste guia13)
- Calcular necessidade de energia estimada ideal
nee.idealpara opi- se
sexo= “H” usar a fórmula: 662 - (9.53 *idade) +ativ.fisica* (15.9 *pi) + (539.6 *altura) - se
sexo= “M” usar a fórmula: 354 - (6.91 *idade) +ativ.fisica* (9.36 *pi) + (726 *altura)
- criar um objeto
sugestoes.diariasda classe lista vazio - se 90.1 ≤
ap≤ 110, entrar em um cicloforcom contadoride 1 até 7- para cada
iamostrar alimentos (com reposição) tal que a soma total de kcal seja igual aneee cuja partição respeite as porcentagens de cada grupo de alimentos sugeridas pelo Ministério da saúde14). Armazenar cada ciclo emsugestoes.diarias[i]
- se
ap< 90, entrar em um cicloforcom contadoride 1 até 7- para cada
iamostrar alimentos (com reposição) tal que a soma total de kcal seja igual anee.ideal+ 500 cal e cuja partição respeite as porcentagens de cada grupo de alimentos sugeridas pelo Ministério da saúde. Armazenar cada ciclo emsugestoes.diarias[i]
- se
ap> 110, entrar em um cicloforcom contadoride 1 até 7- para cada
iamostrar alimentos (com reposição) tal que a soma total de kcal seja igual anee.ideal- 500 cal e cuja partição respeite as porcentagens de cada grupo de alimentos sugeridas pelo Ministério da saúde. Armazenar cada ciclo emsugestoes.diarias[i]
- Retornar o objeto
sugestoes.diarias
Saída
- Gráfico comparativo de peso atual do usuário com o peso ideal, com informação do nível de nutrição do usuário
- Impressões na tela com relação à adequação do consumo de macronutrientes do usuário em relação às diretrizes da OMS
- Objeto da classe list(
sugestoes.diarias), contendo, para cada dia da semana, uma lista de sugestões de alimentos adequados para manutenção, ganho ou perda de peso do usuário e que respeita a proporção diária de cada grupo de alimento sugerida pelo Ministério da Saúde.
Observações adicionais: Dadas as condições que devem ser respeitadas em cada ciclo for da proposta B e minhas limitações como usuária do R, para desenvolver tais ciclos provavelmente será necessário ajuda dos monitores. Por isso, os ciclos não estão bem desenvolvidos nesta proposta.
III. Trabalho Final - Versão Final
III.I Proposta escolhida
Link para a página com a proposta escolhida, incluindo alterações e respectivas justificativas: Proposta escolhida
III.II Código da função e arquivo da função
Link para a página com o código e o arquivo da função: Função sample.suff
III.III Página de ajuda (help) da função
Link para a página com o help e o arquivo contendo o conjunto de dados de exemplo para executar a função: Página de ajuda (help) da função sample.suff
pi = IMC desejável para adultos * altura2pi que ainda é considerada como peso ideal$tipo correspondente ao grupo de alimentos