====== Fábio Henrique Kuriki Mendes ====== {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fabio.jpeg?200}} Sou bacharel em Biologia pela USP e anseio pela prova do mestrado da genética. Também anseio por finalizar a licenciatura antes que o inverso se concretize. O Prof. Dr. Diogo Meyer me orientará em meu mestrado, no qual estudarei os sinais de seleção natural incidente em genes do HLA e regiões adjacentes, procurando compreender como o desequilíbrio de ligação entre eles afeta a evolução desse complexo e sua associação a doenças. ===== Meus Exercícios ===== {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fabio_01_f.r|Resposta da lista de exercicios 1}} {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fabio_02_f.r|Resposta da lista de exercicios 2}} {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fabio_03_f.r|Resposta da lista de exercicios 3}} {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fabio_04_f.r|Resposta da lista de exercicios 4}} {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fabio_05_f.r|Resposta da lista de exercicios 5}} {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fabio_06_f.r|Resposta da lista de exercicios 6}} {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fabio_07_f.r|Resposta da lista de exercicios 7}} {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fabio_08_f.r|Resposta da lista de exercicios 8}} {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fabio_09_f.r|Resposta da lista de exercicios 9}} ===== Proposta de Trabalho Final ===== ==== Principal ==== __Informações iniciais__: O HapMap é um projeto internacional que busca encontrar variantes genéticas associadas a doenças humanas. Eles têm como dados brutos dados populacionais humanos (populações africanas, européias, etc) constituídos por dataframes, por cromossomo, com todos os //Single Nucleotide Polymorphisms// (nucleotídeos polimórficos dentro daquela população) detectados através de alinhamento de sequências). É possível utilizar as frequências alélicas de cada SNP para calcular as taxas de heterozigose populacional e total para aquele polimorfismo específico. Usando essas taxas de heterozigose se compõem o índice Fst, que basicamente nos diz o quanto as populações diferem para aquele polimorfismo. Quanto maior o Fst, mais diferentes são as populações. Teremos então um Fst para cada SNP e, a partir de todos os SNPs, temos uma distribuição de Fst's. Podemos então comparar a distribuição de Fst's de diferentes grupos de SNPs. Exemplo: SNPs em regiões gênicas específicas e SNPs em regiões não-gênicas neutras. Se esperamos que um gene está evoluindo por seleção natural positiva, espera-se que a distribuição do Fst dos SNPs dentro de seus limites seja diferente (com valores maiores) da distribuição do Fst dos SNPs em regiões não-gênicas neutras. Por outro lado, se imaginamos que um gene evolui por seleção balanceadora, espera-se que os Fsts de seus SNPs sejam significativamente mais baixos do que os Fsts de regiões não-gênicas neutras. __Minha função__: O **objetivo primário** é calcular o índice Fst através da razão Ht-Hs/Ht (explicada abaixo) para um grupo de SNPs de interesse em diferentes populações humanas. **Para atingir o objetivo** a função deve: - Reorganizar os dados pré-organizados* da base de dados HapMap (esses dados consistem em uma lista contendo a tabela de cada população comparada somente com os dados necessários) em uma única tabela; para ver como são os dados //bulk// do HapMap, [[http://hapmap.ncbi.nlm.nih.gov/|(clique aqui)]]; - Usando as colunas certas, calcular o índice Fst; - Avisar se as tabelas têm as mesmas dimensões; - Verificar se o arquivo de entrada foi corretamente preparado (o arquivo de entrada será uma lista com os dataframes das diferentes populações). - Fazer um histograma com os valores do Fst de todos os SNPs para cada população. ---- Coluna1: rsid do SNP (identificação daquele SNP específico) Coluna2(*²): refallelecount (contagem bruta de um dos alelos existentes para aquele SNP - aqui é o alelo referência) Coluna3(*²): otherallelecount (contagem bruta do outro alelo para aquele SNP) Coluna4: totalcount (número de alelos amostrados) Coluna5: taxa de heterozigose __daquela população__ por SNP (Hs) //cálculo//: 2 * (contagem bruta do alelo 1/numero total de alelos amostrados para esse SNP) * (contagem bruta do alelo 2/numero total de alelos amostrados para esse SNP); é basicamente o cálculo da taxa de heterozigose sob a premissa de equilíbrio de Hardy-Weinberg (2pq) Coluna6: taxa de heterozigose total, __envolvendo todas as populações escolhidas__ (Ht) //cálculo//: mesma conta de Hs, só que usando os dados de todas as populações juntos Para preencher as colunas 5 e 6 a função precisa antes juntar as tabelas de todas as populações em uma só de modo que ela consiga calcular o Ht. ---- * Para pré-organizar os dados //bulk// é preciso utilizar uma função simples (cujo código está lá embaixo junto com o código da função do trabalho final) para os dados de cada população e criar uma lista contendo os objetos resultantes dessa função. *²SNPs na grandíssima maioria dos casos são bialélicos pelo simples motivo de que não é trivial termos uma mutação diferente das já existentes ocorrendo naquela exata posição. Não só isso, mas essa terceira mutação (terceiro alelo) deveria se tornar frequente o suficiente para ser detectada na pequena amostragem feita pelo HapMap (aproximadamente 20 indivíduos por população). === Comentários PI === Uma das melhores propostas que li. Super clara, precisa e detalhada. Vc sabe o que quer e como chegar lá, manda bala! Nem vou reclamar da falta de Plano B :) ===== Página de Ajuda ===== fst package:nenhum R Documentation Distribuição dos Fst's para um conjunto de SNPs Description: Calcula o Fst de cada um dos SNPs de um determinado conjunto para um dado número de populações. Cria um histograma para a distribuição desses Fst's. Usage: fst(x, pops=3, l=10) Arguments: x: Lista cujos elementos são os dataframes das populações comparadas contendo as informações de frequência dos SNPs (ver detalhes). pops: Numérico. Número de populações comparadas l: Numérico. Número de SNPs para os quais se calculará o Fst. Details: Os SNPs devem ser os mesmos para cada população e o número de SNPs por população também deve ser o mesmo. Warning: A função 'fst' não funcionará se: 1) O arquivo de entrada não for uma lista 2) Se a dimensão dos dataframes do arquivo de entrada não for a mesma ou se o número de SNPs especificado estiver incorreto 3) Se o número de populações especificado estiver incorreto Author(s): Fábio Henrique Kuriki Mendes References: Barreiro, L.B., Laval, G., Quach, H., Patin, E. & QuintanaMurci, L. Natural selection has driven population differentiation in modern humans. Nat. Genet 40, 340-345(2008). See Also: Função 'dfo' para criar os dataframes do arquivo de entrada a partir do bulk do HapMap e função 'list' para criar o arquivo de entrada da função 'fst' descrita aqui. Examples: rs<-seq(1:10) refallele_count<-c(4, 3, 2, 4, 1, 3, 5, 8, 8, 9) refallele_freq<-refallele_count/10 otherallele_count<-c(6, 7, 8, 6, 9, 7, 5, 2, 2, 1) otherallele_freq<-otherallele_count/10 totalcount<-rep(10, 10) Hpop<-c(0.48, 0.42, 0.32, 0.48, 0.18, 0.42, 0.5, 0.32, 0.32, 0.18) tab1<-data.frame(rs, refallele_count, refallele_freq, otherallele_count, otherallele_freq, totalcount, Hpop) refallele_count<-c(4, 1, 1, 4, 2, 6, 7, 5, 3, 2) otherallele_count<-c(6, 9, 9, 6, 8, 4, 3, 5, 7, 8) refallele_freq<-refallele_count/10 otherallele_freq<-otherallele_count/10 Hpop<-c(0.48, 0.18, 0.18, 0.48, 0.32, 0.48, 0.42, 0.5, 0.42, 0.32) tab2<-data.frame(rs, refallele_count, refallele_freq, otherallele_count, otherallele_freq, totalcount, Hpop) dadosteste<-list(tab1, tab2) fst(dadosteste, pops=2, l=10) ===== Código da Função ===== ## FUNÇÃO DE CÁLCULO DE Fst ## TRABALHO FINAL: FABIO HENRIQUE KURIKI MENDES fst<-function(x, pops, l) { if(class(x)=="list") { if((length(x)!=pops)==TRUE) { cat("\n #ERRO# Nada foi feito: o número de populações especificado está incorreto \n") } else { c(l, 7)->dimensao vetor.dim<-rep(NA, pops) for(i in 1:pops) { sum(dim(as.data.frame(x[i])==dimensao))->vetor.dim[i] } if((sum(vetor.dim)<(2*pops))==TRUE) { cat("\n #ERRO# Nada foi feito: um dos três erros a seguir podem ter ocorrido: \n 1- Suas tabelas nao tem as mesmas dimensoes \n 2- Uma de suas tabelas é na verdade um vetor \n 3- Você especificou um número errado de SNPs \n") } else { as.data.frame(x[1])->pop1 pop1[,1]<-as.character(pop1[,1]) data.frame(pop1[-1], row.names=pop1[,1])->df.final Hspops<-data.frame(rep(NA, l)) Hspops[1]<-df.final[,6] for(i in 2:pops) { df.final<-cbind(df.final, as.data.frame(x[i])[-1]) Hspops[i]<-df.final[,(6*i)] } Hs<-rep(NA, l) for(i in 1:l) { Hs[i]<-mean(mean(Hspops[i,])) } df.final[,((pops*6)+1)]<-Hs pt.vetor<-rep(NA, l) pt.vetor<-df.final[,1] qt.vetor<-rep(NA, l) qt.vetor<-df.final[,3] tc.vetor<-rep(NA, l) tc.vetor<-df.final[,5] for(i in 2:pops) { pt.vetor<-df.final[,((i-1)*6+1)]+pt.vetor qt.vetor<-df.final[,((i-1)*6+3)]+qt.vetor tc.vetor<-df.final[,((i-1)*6+5)]+tc.vetor } df.final[,((pops*6)+2)]<-pt.vetor df.final[,((pops*6)+3)]<-qt.vetor df.final[,((pops*6)+4)]<-tc.vetor Ht<-2 * (pt.vetor/tc.vetor) * (qt.vetor/tc.vetor) df.final[,((pops*6)+5)]<-Ht Fst<-(df.final[,((pops*6)+5)] - df.final[,((pops*6)+1)]) / df.final[,((pops*6)+5)] df.final[,((pops*6)+6)]<-Fst names(df.final)[((pops*6)+1)]<-"Hs" names(df.final)[((pops*6)+2)]<-"refalelle_count" names(df.final)[((pops*6)+3)]<-"otheralelle_count" names(df.final)[((pops*6)+4)]<-"totalcount_total" names(df.final)[((pops*6)+5)]<-"Ht" names(df.final)[((pops*6)+6)]<-"Fst" print(df.final) x11() hist(Fst, nclass=l, xlim=range(Fst)) } } } else { cat("\n #ERRO# Nada foi feito: seus dados não são uma lista \n") } } ===== Arquivo da Função ===== {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:dfo.r|Arquivo .R com a função dfo() para organizar os dados de entrada da função fst()}} {{:bie5782:01_curso_atual:alunos:trabalho_final:binhologia:fst.r|Arquivo .R com a função fst() (função do trabalho final)}}