Bioinformática DCC/FCUP 2012/2013 Pedro Ribeiro Unidade 2 Assemblagem de Genomas (baseado nos slides de Sushmita Roy/UWisconsin)
Objectivos desta unidade Sequenciação e assemblagem Problema da mais pequena superstring Algoritmos greedy e algoritmos não polinomiais Alguns conceitos de teoria de grafos Caminhos de Euler Caminhos de Hamilton K-mer s Grafos de debruijn Alguns algoritmos populares para assemblagem
Sequenciação Sequenciação de DNA: Processo para determinar a ordem dos nucleótidos numa molécula de DNA.
Tipos de sequenciação Sequenciação de novo (ou resequenciação): Sequenciar sem conhecimento prévio da sequência, começando do zero Sequenciação por mapeamento (mapping assembly): Sequenciar com conhecimento prévio de sequência similar (backbone). nova sequência é parecida, mas não necessariamente igual. A
Problema da sequenciação Não conseguimos ler um genoma inteiro. Apenas (pequenos) pedaços! Descobrindo uma sequência de um genoma: Fragmentar o genoma em strings mais pequenas Sequenciar/ler as strings pequenas Assemblar (juntar) as strings no genoma (string maior )
Assemblagem de fragmentos
Puzzle de DNA
Diferentes tipos de sequenciação Sanger (chain termination) : 800bp-1000bp 454: 300bp-400bp Illumina: 35bp-150bp Helicos: 30bp
Exemplo: Sequenciação Sanger Foi desenvolvida em 1977 por Frederick Sanger. Durante 25 anos foi a mais usada Uma explicação em português (med.up.pt) Um resumo : Uso de ddntps (didesoxirribonucleosídeos trifosfatados) Desnaturação da cadeia de dupla hélice para síntese in vivo Uso de primers para início da síntese com DNA polimerase Baixas concentrações de ddntps em relação a dntps (as normais) O ddntp é aleatoriamente colocado na posição da base correspondente O ddntp quebra a síntese na sua posição O ddntp está marcado com moléculas fluorescentes de diferentes cores Por electroforese separam-se os vários fragmentos (cadeias truncadas) Ordem em que os fragmentos determina a ordem da cadeia complementar Sequenciação automática cria um cromatograma
Exemplo: Sequenciação Sanger
Gerações de Sequenciação 1 a geração: Sanger automatizada in vivo (amplificação através de colónias de bactérias) 800bp-1000bp com erro baixo Lenta (paralelização muito limitada) e Cara ( $2400 por milhão de bases) vs 2 a geração: 454, Illumina, SOLiD,... in vitro (amplificação em arrays) 30bp - 400bp Rápida (paralelização alta) e mais barata ($0.05 a $2 por milhão de bases) Agora vamos ter a 3 a geração (mais rápida, mais barata, sequências longas)
Custo da sequenciação Custos da análise? Custos do armazenamento? Exoma: 1% do genoma que codifica proteínas (exões)
Assemblagem de novo Input: Um conjunto de leituras (strings) - {s 1, s 2,..., s n } Output: A superstring que melhor explica as leituras O que é isto de melhor explica?
O problema da mais pequena superstring (SSP) Descobrir uma string s tal que: todas as leituras s 1, s 2,..., s n são substrings de s s é tão pequena quanto possível Assumindo que: As leituras são 100% correctas Leituras idênticas são da mesma localização do genoma melhor = mais simples
Exemplo de SSP Dada a leitura: {ACG, CGA, CGC, CGT, GAC, GCG, GT A, T CG} Qual a mais pequena superstring? T CGACGCGT A
Exemplo de SSP Dada a leitura: {ACG, CGA, CGC, CGT, GAC, GCG, GT A, T CG} Qual a mais pequena superstring? T CGACGCGT A - tamanho 10
SSP SSP é computacionalmente difícil De facto SSP é NP-completo Problema NP: Não conhecemos algoritmo polinomial, mas não sabemos se existe Podemos verificar solução em tempo polinomial Problema NP-completo: Problema NP Pelo menos tão difícil como outros problemas NP (NP-hard) Todos os problemas NP podem ser reduzidos a ele
Algoritmos para SSP Força Bruta Algoritmo guloso/ganancioso/ávido (greedy) Overlap Layout Consensus (caminhos de Hamilton) Grafos de Debruijn (caminhos de Euler)
Força Bruta Testar todas as hipóteses possíveis (todas as permutações das leituras)...
Força Bruta Testar todas as hipóteses possíveis (todas as permutações das leituras) ACG CGA CGC CGT GAC GCG GT A T CG ACGACGCGT GACGCGT AT CG - tamanho 20 ACG CGA CGC CGT GAC GCG T CG GT A ACGACGCGT GACGCGT CGT A - tamanho 20 ACG CGA CGC CGT GAC GT A GCG T CG ACGACGCGT GACGT AGCGT CG - tamanho 21... Proibitivo mesmo para n pequeno!
Algoritmo Greedy Uma estratégia greedy escolhe a melhor resposta imediata, tomando máximos locais para descobrir uma solução; Não garante a optimalidade da solução Uma estratégia greedy simples para SSP: Enquanto n o strings > 1: juntar as duas strings com mais overlap Overlap: tamanho da maior substring comum (prefixo/sufixo)...
Algoritmo Greedy Uma estratégia greedy escolhe a melhor resposta imediata, tomando máximos locais para descobrir uma solução; Não garante a optimalidade da solução Uma estratégia greedy simples para SSP: Enquanto n o strings > 1: juntar as duas strings com mais overlap Overlap: tamanho da maior substring comum (prefixo/sufixo) {ACG, CGA, CGC, CGT, GAC, GCG, GT A, T CG} {ACGCGA, CGC, CGT, GAC, GCG, GT A, T CG} - ACG+CGA (overlap = 2) {ACGCGA, CGT, GAC, GCG, GT A, T CG} - ACGCGA + CGC (overlap = 3) {ACGCGA, CGT A, GAC, GCG, T CG} - CGT + GTA (overlap = 2) {ACGCGA, GCGT A, GAC, T CG} - CGTA + GCG (overlap = 2) {ACGCGA, GCGT A, T CGAC} - TCG + GAC (overlap = 1) {GCGT ACGCGA, T CGAC} - GCGTA + ACGCGA (overlap = 1) {GCGT ACGCGAT CGAC} - GCGTACGCGA + TCGAC (overlap = 0) GCGT ACGCGAT CGAC - tamanho 15
Conceitos básicos de grafos O que é um grafo? Um conjunto de nós ou vértices (V) e das suas ligações ou arestas (E) As ligações descrevem uma relação entre os nós Grau de um vértice: número de arestas (indegree e outdegree) Caminho de u para v: conjunto de arestas ligadas entre u e v Ciclo: caminho que começa e termino no mesmo nó
Overlap Layout Consensus (OLC) 1. Overlap: Criação de grafo de overlaps 2. Layout: descoberta de caminho 3. Consensus: com o caminho, reconstruir a sequência
OLC - Construção do grafo de overlaps Para um conjunto de leituras S, construir um grafo direcionado com pesos Cada leitura é um nó do vértice Existem arestas entre todos os vértices (grafo completo) Peso de cada aresta = overlap entre as strings de cada nós overlap(s i, s j ) = tamanho do maior sufixo de s i que é prefixo de s j overlap(aga, GAT) = 2 AGA tem sufixo GA GAT tem prefixo GA
OLC: exemplo de grafo de overlaps Seja S = {AGA, GAT, T CG, GAG}
OLC: exemplo de grafo de overlaps Seja S = {AGA, GAT, T CG, GAG}
OLC: exemplo de grafo de overlaps Seja S = {AGA, GAT, T CG, GAG}
OLC: Layout Identificar caminhos no grafo que correspondam a segmentos do genoma O caso geral é descobrir um caminho de Hamilton: Caminho que visita todos os vértices uma única vez...
OLC: Layout Identificar caminhos no grafo que correspondam a segmentos do genoma O caso geral é descobrir um caminho de Hamilton: Caminho que visita todos os vértices uma única vez
OLC: Caminhos de Hamilton Descobrir se um grafo tem ou não caminho de hamilton é computacionalmente complicado (NP-completo) Descobrir o menor caminho de hamilton também o é: É similar ao Traveling Salesman Problem (TSP) TSP é muito estudado e existem muitas heurísticas Grafos de overlap continuam a ser usados frequentemente na assemblagem
OLC: Consensus Uma vez tendo o caminho temos a nossa sequência Está implícito na ordem dos nós no layout...
OLC: Consensus Uma vez tendo o caminho temos a nossa sequência Está implícito na ordem dos nós no layout AGA GAG GAT TCG AGAGATCG
OLC: Resumo OLC: Overlap Layout Consensus Overlap: calcular as subtrings comuns e construir o grafo Layout: arranjar as leituras com base no grafo Solução exacta é computacionalmente complicada São usadas heurísticas (aproximações), como por ex. greedy Consensus: reconstuir a sequência original
Mais teoria de grafos Caminho de Euler: um caminho que inclui todas as arestas (uma única vez) Ciclo de Euler: um caminho de Euler que começa e termina no mesmo nó Descobrir um ciclo de Euler é computacionalmente simples Algoritmo linear no número de arestas do grafo
Um pouco de história O problema das 7 pontes de Königsberg Existe algum caminho pela cidade que passe uma única vez por cada ponte? Este problema foi resolvido 1735 por Leonhard Euler É historicamente importante e deu as bases para a teoria de grafos
Ciclos de Euler Grafo conexo: grafo onde existem caminhos entre todos os vértices Nó balançado: n o arestas de saída = n o arestas entrada [indegree(v) = outdegree(v)] Teorema: um grafo conexo dirigido tem um ciclo de Euler se e só se todos os seus vértices são balançados Existe uma algoritmo linear para descobrir ciclos de Euler
Algoritmo para descobrir um ciclo de Euler Algoritmo de Hierholzer Começar em qualquer vértice v e ir percorrendo arestas não usadas até voltar a v Não é possível ficar preso nalgum lado que não v para cada aresta de entrada, existe uma aresta de saída. Pode acontecer que se faça um ciclo não completo. Nesse caso: Escolher um vértice w ao longo do ciclo que tenha arestas não usadas Percorrer um caminho a partir de w até voltar a w Juntar este novo ciclo ao ciclo anterior Repetir o processo até termos ciclo euleriano ( completo )
Algoritmo para descobrir um ciclo de Euler
Algoritmo para descobrir um ciclo de Euler
Algoritmo para descobrir um ciclo de Euler
Caminhos de Euler Mas nós queriamos caminhos e não ciclos de Euler Nó semi-balançado: indegree(v) - outdegree(v) = 1 Teorema: um grafo conexo dirigido tem um caminho de Euler se e só se contém no máximo dois nós semi-balançados (sendo todos os outros balançados) Para balançar o grafo é so adicionar uma aresta e depois podemos calcular um ciclo. O caminho de Euler começa num dos nós semi-balançados e termina no outro
Exemplo de balanceamento
Exemplo de balanceamento
Espectro de uma sequência k-mer: string de tamanho k O espectro k-mer de uma sequência S é o conjunto de todos os k-mers da sequência (substrings de tamanho k) Exemplo para ATTACAG Espectro de 3-mer: ATT, TTA, TAC, ACA, CAG Espectro de 4-mer: ATTA, TTAC, TACA, ACAG
Grafo debruijn Num grafo de debruijn: Uma aresta é um k-mer da sequência S Os nós correspondem a (k 1)-mers A direcção é de um prefixo de tamanho k 1 para um sufixo de tamanho k 1 Exemplo: ATG, TGG, TGC, GTG, GGC, GCA, GCG, CGT
Grafo debruijn em Assemblagem Seguir uma metodologia euleriana assente em grafos debruijn Descobrir uma sequência contendo todos os k-mers é Descobrir um caminho de Euler no grafo debruijn! Um resultado possível: ATGGCGTGCA
Grafo debruijn em Assemblagem Um caminho de Euler é uma possível assemblagem No entanto podem existir muitos ciclos diferentes! Escolher um deles
Estratégias de Sequenciação Como sequenciar na prática uma cadeia longa de DNA? Leitura directa Sequenciação hierárquica (top-down) Sequenciação shotgun (bottom-up)
Leitura directa Ler sequencialmente uma região Apenas possível para cadeias pequenas (milhares bp) Metodologia exemplo: primer walking (chromossome walking) Criar primer que alinha com o início da sequênca Fazer leitura Criar primer que alinha com o final da leitura Repetir isto com o novo primer até chegar ao final
Sequenciação hierárquica vs shotgun
Sequenciação shotgun Pegar numa sequência grande e obter muitas leituras pequenas As leituras pequenas são em ordem e posição aleatória Tentar reconstruir a sequência grande com base nos overlaps
Sequenciação shotgun Podemos combinar para obter uma sequenciação hierárquica com shotgun
Algumas definições Leitura paired-end : usa os dois lados do fragmento e devolve duas sequências, uma do início e outra do fim contig: sequência contígua de nucleótidos scaffold (andaime): vários contigs, ordenados, potencialmente com buracos no meio (gaps)
Uma visão global
Algumas problemas na sequenciação Repetições Difícil saber onde começam e acabam as repetições As leituras podem não ser suficientemente longas O genoma humano tem muitas repetições SINEs (Short interspersed elements, 300bp) LINEs (Long interspersed elements, 1000 bps) Duplicação de genes Erros Como distinguir erros de leitura de erros de overlap?
Como é feito na prática? Um pouco de todas as técnicas que vimos até agora Uso extensivo de heurísticas A melhor metodologia depende de várias coisas Tamanho das leituras Quantidade de repetições Existência de leituras paired-end A sequenciação é normalmente feita de forma iterativa, com contigs e scaffolds e potencialmente uso de leitura directa para preencher gaps
Output de uma leitura Muitas das plataformas de sequência produzem um ficheiro fastq @SEQ_ID GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCAC +! *((((***+))%%%++)(%%%%).1***-+* ))**55CCF>>>>>>CCCC Qualidade da leitura medida com pontuação phred Logaritmicamente relacionada com a probabilidade de uma base estar errada Exemplo: Q = 10 log 10 P
Algumas métricas de sequenciação Cobertura de uma leitura C = n I/L n: número de leituras I: tamanho de cada leitura L: tamanho do fragmento a sequenciar Qual a cobertura necessária? Modelo de Lander-Waterman (assumindo distribuição uniforme de leituras) diz que com C=10 teremos 1 região com gap por cada milhão de nucleótidos
Algumas métricas de sequenciação Qualidade de uma assemblagem Estatística N50 O tamanho I de um contig tal que todos os contigs de tamanho menor que I cobrem 50% da assemblagem Mede conectividade Mais usada em drafts (sequenciação preliminares, não completas ) Quanto mais alta, melhor De maneira análoga podem ser definidas estatísticas NX
Alguns algoritmos implementados Overlap layout consensus Celera Assembler Desenvolvido para o genoma humano Arachne Caminhos Eulerianos (grafos debruijn) velvet
Velvet Grafos debruijn Gerar os k-mers das leituras Simplificar (merge) cadeias lineares Correcção de erros (remover pontas e bolhas ) Lidar com repetições
Velvet - geração do grafo
Velvet - geração do grafo
Velvet - Simplificação Remover cadeias lineares
Velvet - Erros Remover pontas (tips) e bolhas (bubbles) Pontas: cadeias que não continuma e menores que um determinado valor Bolhas: algoritmo bus tour (usa BFS) mais informação da cobertura, qualidade, etc
Velvet - Repetições No fundo é tentar ligar dois longos contigs Usa extensivo de informação paired-read Módulo especializado: antes Breadcrumbs, agora Pebble (usa comprimentos)
Velvet - Saber mais Software disponível para download: velvet Artigo original: Velvet: Algorithms for de novo short read assembly using de Bruijn graphs (2008) Novo módulo para repetições: Pebble and Rock Band: Heuristic Resolution of Repeats and Scaffolding in the Velvet Short-Read de Novo Assembler (2009)
Alguns projectos actuais de sequenciação 1000 Genomas: um estudo da variação genética humana 1001 Genomas: um estudo da variação genética na planta Arabidopsis thaliana i5k: sequenciação de 5000 insectos e outros artrópodes genome10k: sequenciação de 10,000 espécies vertebradas (zoo genómico) human microbiome: sequenciação de microorganismos relacionados com humanos GOLD: Genomes Online Database
Sumário da Unidade Definições de sequenciação e assemblagem Problema da mais pequena superstring (SSP) Metodologias baseadas em grafos Algoritmos greedy Caminhos de Hamilton Caminhos de Euler Grafos debruijn Dificuldades Erros Repetições Assemblagem na prática Baseados nas metodologias dadas Muito pós-processamento não trivial Muitos projectos de sequenciação e assemblagem a decorrer
Componentes de Avaliação Exame: terá perguntas sobre esta unidade Mini-trabalho: grafo de overlaps e estratégia greedy para caminho de hamilton Apresentação de artigo: poderá incidir sobre um artigo desta temática. Exemplos: Simpson, J.T. & Durbin, R. Efficient de novo assembly of large genomes using compressed data structures. Genome Research 22, gr.126953.111- (2011). Salzberg, S.L. et al. GAGE: A critical evaluation of genome assemblies and assembly algorithms. Genome Research 22, 557-67 (2011). Projecto: poderá incidir sobre este tema: Criação de ferramenta: criar um assemblador usando grafos debruijn com algumas capacidades de correcção de erros/repetições Revisão do estado da arte: comparar várias metodologias e/ou software Aplicação: usar um software existente para assemblar dados sintéticos ou reais