====== Marianne Azevedo Silva ====== {{ :bie5782:01_curso_atual:alunos:trabalho_final:azevedosilva.m:foto.jpg?200 |}} 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 ===== Link para a página com os meus exercícios resolvidos [[.:exec]] ---- ---- ===== 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 amostragem((Fonte: https://en.wikipedia.org/wiki/Sample_size_determination)). 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 faltantes * ''IC.plot'' = vetor lógico (TRUE/FALSE) indicando se intervalos de confiança devem ser plotados * ''gen.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.pop'' e ''col.loci'' sã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 ''nasim'' for menor que 1000, continua, mas dá um warning: "Um número baixo de simulações pode afetar seus resultados!" **Pseudo-código** - Carregar pacotes necessários (PopGenReport((https://cran.r-project.org/web/packages/PopGenReport/index.html)) e Adegenet((https://cran.r-project.org/web/packages/adegenet/index.html))) - Transformar ''dados'' (data frame) em objeto genind (para isso, os argumentos ''col.ID'', ''col.pop'' e ''col.loci'' serão usados - Criar um objeto ''simula.allpop'' como sendo uma lista vazia (permite inserção de quantos objetos forem necessários dentro da lista) - Entrar em um ciclo (1) ''for'' com contador ''i'' de 1 até o número total de populações. Ou seja, para cada população irá fazer: - Criar objeto ''simula.media'' com NAs correspondente ao número de indivíduos da população - Criar objeto ''simula.ICsup'' com NAs correspondente ao número de indivíduos da população - Criar objeto ''simula.ICinf'' com NAs correspondente ao número de indivíduos da população - Entrar em um ciclo (2) ''for'' com contador ''j'' de 1 até número de indivíduos da população - Criar objeto ''simula.nind'' com NAs correspondente a ''nsim'' - Entrar em um ciclo(3) 'for' com contador ''k'' de 1 até ''nsim'' - simular a estimativa escolhida de ''gen.div'' para uma subamostragem de tamanho ''j'' da população (usar função sample com size=j e replace=T). Cada simulação é armazenada no objeto''simula.nind'' na posição ''k'' - Armazenar a média de ''simula.nind'' no objeto ''simula.media'' na posição ''j'' - Armazenar o intervalo de confiança superior de ''simula.nind'' no objeto ''simula.ICsup'' na posição ''j'' - Armazenar o intervalo de confiança inferior de ''simula.nind'' no objeto ''simula.ICinf'' na posição ''j'' - Armazenar no objeto ''simula.allpop'' na posição ''i'' um 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 objeto ''simula.media''), __ICsup__ (intervalos de confiança superiores armazenados no objeto ''simula.ICsup''), __ICinf__ (ntervalos de confiança inferiores armazenados no objeto ''simula.ICinf'') - Juntar todos os data frames do objeto ''simula.allpop'' em um único data frame ''gen.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.plot'' for 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. ---- Mariana, parabéns pelas propostas, bem pensadas e bem estruturadas. Você pode seguir com qualquer uma das duas, mas eu gostei mais da primeira, me parece que seria útil para quem trabalha com genética de populações [[vrios81@gmail.com|Vitor]] Oi Vitor! Obrigada por ler as propostas e pelo feedback! Vou seguir com a primeira proposta. Em caso de dúvidas, escrevo para você =) ==== 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"((http://bvsms.saude.gov.br/bvs/publicacoes/guia_alimentar_populacao_brasileira_2008.pdf))((http://189.28.128.100/dab/docs/portaldab/publicacoes/guia_alimentar_bolso.pdf)), 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 [[http://bvsms.saude.gov.br/bvs/publicacoes/guia_alimentar_populacao_brasileira_2008.pdf|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)" * ''peso'' e ''altura'' sã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 ''pi''(( ''pi'' = IMC desejável para adultos * ''altura''2)) - 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 - Plotar ''peso'' e ''pi'' com intervalos de confiança de mais ou menos 10% de ''pi''((variação de ''pi'' que ainda é considerada como peso ideal)) - 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.fisica'' por 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 ''nee'' para o ''peso'' - 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.refeicoes'' e armazenar no objeto ''mean.n.refeicoes'' - Fazer um teste t para ver se ''mean.n.refeicoes'' é significativamente diferente de 5((número ideal de refeições ao dia(café, lanche da manhã, almoço, lanche da tarde e janta)) - 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$P'' em relação a ''nee'' e armazenar nos objetos ''ICsup.p'' e ''ICinf.p'', respectivamente - se ''ICsup.p'' e ''ICinf.p'' estiverem contidos no intervalo de 15% a 20%((consumo diário de proteínas em relação ao NEE segundo a OMS)), 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$L'' em relação a ''nee'' e armazenar nos objetos ''ICsup.l'' e ''ICinf.l'', respectivamente - se ''ICsup.l'' e ''ICinf.l'' estiverem contidos no intervalo de 20% a 30%((consumo diário de lipídios em relação ao NEE segundo a OMS)), 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$C'' em relação a ''nee'' e armazenar nos objetos ''ICsup.c'' e ''ICinf.c'', respectivamente - se ''ICsup.c'' e ''ICinf.c'' estiverem contidos no intervalo de 45% a 65%((consumo diário de carboidratos complexos em relação ao NEE segundo a OMS)), 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$A'' em relação a ''nee'' e armazenar nos objetos ''ICsup.a'' e ''ICinf.a'', respectivamente - se ''ICsup.a'' e ''ICinf.a'' estiverem contidos no intervalo de 0% a 10%((consumo diário de açucares simples em relação ao NEE segundo a OMS)), 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 [[http://bvsms.saude.gov.br/bvs/publicacoes/guia_alimentar_populacao_brasileira_2008.pdf|deste guia]]((será reorganizada em um único data frame que inclua uma coluna ''$tipo'' correspondente ao grupo de alimentos)) - Calcular necessidade de energia estimada ideal ''nee.ideal'' para o ''pi'' - 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.diarias'' da classe lista vazio - se 90.1 ≤ ''ap'' ≤ 110, entrar em um ciclo ''for'' com contador ''i'' de 1 até 7 - para cada ''i'' amostrar alimentos (com reposição) tal que a soma total de kcal seja igual a ''nee'' e cuja partição respeite as porcentagens de cada grupo de alimentos sugeridas pelo Ministério da saúde((45% cereais/tubérculos/raízes; 3% feijões; 11% frutas; 3% legumes e verduras; 18% leite e derivados; 10% carnes e ovos; 4% óleo e gordura; 6% açucares simples)). Armazenar cada ciclo em ''sugestoes.diarias[i]'' - se ''ap'' < 90, entrar em um ciclo ''for'' com contador ''i'' de 1 até 7 - para cada ''i'' amostrar alimentos (com reposição) tal que a soma total de kcal seja igual a ''nee.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 em ''sugestoes.diarias[i]'' - se ''ap'' > 110, entrar em um ciclo ''for'' com contador ''i'' de 1 até 7 - para cada ''i'' amostrar alimentos (com reposição) tal que a soma total de kcal seja igual a ''nee.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 em ''sugestoes.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: [[.:func]] ==== 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: [[.:cod]] ==== 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: [[.:help]]