====== 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]]