Universidade da Beira Interior
Departamento de Informática
BiGGEsTS
Biclustering Gene Expression Time-Series
Joana Sofia de Pinho Gonçalves
Orientador do Projecto:
Sara C. Madeira
2007
Agradecimentos
Um agradecimento
muito especial à Sara,
pelo apoio, dedicação e amizade.
À minha família,
amigos e todos os que,
interessando-se ou não pelo meu
trabalho, contribuíram para que nunca
perdesse a vontade de perseguir os meus objectivos.
i
Conteúdo
Agradecimentos
i
Conteúdo
iii
Lista de Figuras
vii
Lista de Tabelas
xi
Lista de Algoritmos
xiii
Acrónimos
xv
1
.
.
.
.
.
.
.
1
1
3
4
4
6
7
10
.
.
.
.
.
11
11
12
12
14
15
Introdução
1.1 Contexto . . . . . . . . . . .
1.1.1 ADN e ARN . . . . .
1.1.2 Código genético . . .
1.1.3 Síntese de proteínas
1.2 Motivação . . . . . . . . . .
1.3 Objectivos . . . . . . . . . .
1.4 Conteúdo do Relatório . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Microarrays e Dados de Expressão
2.1 Microarrays . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 O que é exactamente um microarray de ADN? . . .
2.1.2 Passos básicos de uma experiência com microarrays
2.1.3 As cores de um microarray . . . . . . . . . . . . . . .
2.2 Dados de expressão genética . . . . . . . . . . . . . . . . . .
iii
iv
CONTEÚDO
3 Biclustering
3.1 Conceito de Biclustering . . . . . . . . . . . . . . . . .
3.1.1 Clustering vs biclustering . . . . . . . . . . . . .
3.2 Definições e Formulação do Problema . . . . . . . . .
3.2.1 Grafos pesados bipartidos e matrizes de dados
3.3 Complexidade do Problema . . . . . . . . . . . . . . .
3.4 Dimensões da Análise . . . . . . . . . . . . . . . . . .
3.4.1 Tipo de bicluster . . . . . . . . . . . . . . . . . .
3.4.2 Estrutura do bicluster . . . . . . . . . . . . . . .
3.4.3 Objectivos dos algoritmos de biclustering . . .
3.5 Aplicações de Biclustering . . . . . . . . . . . . . . . .
3.6 Biclustering em Séries Temporais . . . . . . . . . . . .
4
5
Trabalho Relacionado
4.1 Biclustering para Séries Temporais . . .
4.1.1 Algoritmos na aplicação . . . .
4.1.2 Algoritmos analisados . . . . .
4.2 Algoritmos de Clustering Hierárquico
4.2.1 Single-linkage clustering . . . . .
4.2.2 Complete-linkage clustering . . .
4.2.3 Average-linkage clustering . . . .
4.2.4 Centroid-linkage clustering . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
A Ferramenta BiGGEsTS
5.1 Modelação . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Análise de Requisitos e Desenho . . . . . . . .
5.1.2 Estrutura . . . . . . . . . . . . . . . . . . . . . .
5.1.3 Arquitectura . . . . . . . . . . . . . . . . . . . .
5.2 Implementação . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Carregamento de dados . . . . . . . . . . . . .
5.2.2 Integração do algoritmo CC-TSB-Biclustering
5.2.3 Download de ficheiros da Gene Ontology . . .
5.2.4 Threads e barras de progresso . . . . . . . . .
5.2.5 Pós-processamento . . . . . . . . . . . . . . . .
5.2.6 Gestão de sessões . . . . . . . . . . . . . . . . .
5.2.7 Informação . . . . . . . . . . . . . . . . . . . .
5.2.8 Gráficos de expressão e padrão de expressão .
5.2.9 Clustering hierárquico e dendrogramas . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
18
19
21
21
22
22
24
26
27
27
.
.
.
.
.
.
.
.
29
29
30
33
47
48
48
48
49
51
. . . . 51
. . . . 52
. . . . 67
. . . . 67
. . . . 70
. . . . 71
. . . . 72
. . . . 72
. . . . 73
. . . . 73
. . . . 74
. . . . 75
. . . . 75
. . . . 76
CONTEÚDO
5.3
6
7
Finalização e Divulgação .
5.3.1 Executáveis . . . .
5.3.2 Instaladores . . . .
5.3.3 Licença . . . . . . .
5.3.4 Imagem e logótipo
5.3.5 Documentação . .
5.3.6 Site . . . . . . . . .
v
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Estudo de Caso
6.1 Carregamento de Dados . . .
6.2 Visualização de Matrizes . . .
6.3 Dendrograma . . . . . . . . .
6.4 Tabela de Funções . . . . . . .
6.5 Pré-Processamento . . . . . .
6.6 Biclustering . . . . . . . . . . .
6.7 Gráficos de Expressão . . . .
6.8 Análise de Funções Biológicas
6.9 Pós-Processamento . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
85
. 85
. 86
. 88
. 90
. 90
. 92
. 94
. 97
. 101
Conclusões e Trabalho Futuro
Bibliografia
.
.
.
.
.
.
.
77
77
81
82
82
83
83
103
105
Lista de Figuras
1.1
2
1.3
Relação entre a célula, os cromossomas e o ADN. O ADN
das células eucarióticas encontra-se no núcleo, dividido em
unidades estruturais (cromossomas). Os cromossomas são
formados por cadeias de ADN cujos segmentos codificam
genes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Representação de um gene na molécula de ADN e respectiva
localização no cromossoma. Exões (segmentos codificadores) e intrões (segmentos não codificadores). . . . . . . . . .
A síntese de proteínas e as funções do mRNA e tRNA. . . .
2.1
2.2
As fases de uma experiência com microarrays. . . . . . . . . .
Cores visíveis numa imagem digital de um microarray. . . . .
13
15
3.1
Diferentes tipos de biclusters. (a) bicluster constante; (b) linhas constantes; (c) colunas constantes; (d) valores coerentes
- modelo aditivo; (e) valores coerentes - modelo multiplicativo; (f) evolução global coerente; (g) evoluções coerentes
nas linhas; (h) evoluções coerentes nas colunas; (i) evoluções coerentes nas colunas; (j) evoluções coerentes em linhas
e colunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estrutura dos biclusters. (a) único; (b) exclusivos; (c) em
xadrez; (d) linhas exclusivas; (e) colunas exclusivas; (f) não
sobrepostos com estrutura em árvore; (g) não sobrepostos e
não exclusivos; (h) sobrepostos com estrutura hierárquica;
(i) sobrepostos e arbitrariamente posicionados. . . . . . . . .
Três processos biológicos identificados em séries temporais
de expressão genética. . . . . . . . . . . . . . . . . . . . . . .
1.2
3.2
3.3
vii
4
6
23
25
28
viii
4.1
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
6.1
6.2
6.3
6.4
6.5
6.6
LISTA DE FIGURAS
Aplicação do algoritmo D-Miner sobre a matriz de expressão
genética de valores discretos representada na Tabela 4.1. . .
40
Diagrama de casos das funcionalidades principais da ferramenta BiGGEsTS. . . . . . . . . . . . . . . . . . . . . . . . . . 53
Diagrama de casos do módulo de carregamento de dados. . 55
Diagrama de casos da selecção do organismo, no módulo de
carregamento de dados. . . . . . . . . . . . . . . . . . . . . . 56
Diagrama de casos do módulo de pré-processamento. . . . . 58
Diagrama de casos do módulo de aplicação de algoritmos
de biclustering e cálculo de funções biológicas dos biclusters
encontrados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Diagrama de casos do módulo de análise e visualização. . . 62
Diagrama de casos do módulo de pós-processamento. . . . . 65
Diagrama de casos da selecção do critério de filtragem, no
módulo de pós-processamento. . . . . . . . . . . . . . . . . . 66
Diagrama de casos da selecção do critério de ordenação, no
módulo de pós-processamento. . . . . . . . . . . . . . . . . . 67
Diagrama de pacotes da ferramenta BiGGEsTS. No centro,
o pacote que implementa a interface gráfica - applicationgui.gui; em volta, as suas dependências. . . . . . . . . . . . . 68
Diagrama de pacotes centrado no pacote smadeira.biclustering. 69
Logótipo do BiGGEsTS. . . . . . . . . . . . . . . . . . . . . . 83
Site do BiGGEsTS. . . . . . . . . . . . . . . . . . . . . . . . . . 84
Painel de carregamento de dados. . . . . . . . . . . . . . . . .
Matriz de valores original colorida. . . . . . . . . . . . . . . .
Matriz de valores original colorida e ordenada por ordem
crescente da condição t2 . . . . . . . . . . . . . . . . . . . . . .
Matriz de valores original colorida e ordenada por ordem
decrescente da condição t2 . . . . . . . . . . . . . . . . . . . . .
Matriz original de valores. As células que cujos valores estão
em falta são coloridas a azul-escuro. A navegação com o rato
por cima das células permite identificar a linha, a coluna e
o valor de cada célula em particular. . . . . . . . . . . . . . .
Painel de opções para o algoritmo de clustering hierárquico.
85
86
87
87
88
89
LISTA DE FIGURAS
6.7
Janela do BiGGEsTS com a janela do Java TreeView sobreposta. O Java TreeView apresenta o dendrograma resultante
do algoritmo de clustering hierárquico aplicado aos dados da
matriz de expressão original. . . . . . . . . . . . . . . . . . .
ix
89
6.8
Tabela de funções biológicas para os genes da matriz original. 90
6.9
Painel com as opções de pré-processamento. . . . . . . . . .
91
6.10 Matriz discreta sob a forma de uma tabela de símbolos colorida. A navegação do rato sobre as células permite identificar a linha, a coluna e o símbolo de cada célula em particular. 92
6.11 Painel com as opções para aplicação de algoritmos de biclustering e de análise de funções biológicas. . . . . . . . . . . . .
93
6.12 Matriz de valores colorida para os cinco primeiros biclusters do grupo de biclusters extraído pelo algoritmo CCCBiclustering sobre a matriz discreta. Na Figura vemos apenas o primeiro bicluster. Para ter acesso aos restantes é necessário mover a barra de deslocação (à direita) para baixo. .
93
6.13 Miniaturas dos gráficos de expressão dos 24 primeiros biclusters do grupo de biclusters extraído pelo algoritmo CCCBiclustering aplicado à matriz discreta. . . . . . . . . . . . . .
94
6.14 Miniaturas do padrão de expressão dos primeiros 96 biclusters do grupo de biclusters extraído pelo algoritmo CCCBiclustering aplicado à matriz discreta. Na imagem são
visíveis os biclusters com números entre o 45 e o 60. . . . . .
95
6.15 Gráfico de expressão do bicluster 10. Representa a expressão
de todos os seus genes nas suas condições. . . . . . . . . . .
96
6.16 Gráfico de expressão do bicluster 10 com os valores de expressão normalizados por gene para média 0 e desvio padrão 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
6.17 Gráfico de expressão dos genes do bicluster 10 em todas as
condições da experiência. . . . . . . . . . . . . . . . . . . . .
97
6.18 Gráfico do padrão de expressão do bicluster 10. . . . . . . . .
97
6.19 Tabela de funções biológicas para o grupo de biclusters calculadas usando um theshold de 0.01 para o p-value corrigido
pela correcção de Bonferroni. Os biclusters com funções biológicas estatisticamente significativas são assinalados a verde. 98
x
LISTA DE FIGURAS
6.20 Tabela de funções biológicas para o bicluster 95. Estão assinaladas três funções estatisticamente significativas: manutenção e assemblagem de subunidades ribossómicas de
grandes dimensões, assemblagem de complexos proteínaARN, processos metabólicos primários. . . . . . . . . . . . .
6.21 Grafo de funções biológicas significativas do bicluster 95. . .
6.22 Painel de pós-processamento. . . . . . . . . . . . . . . . . . .
6.23 Gráficos de expressão do grupo de biclusters pós-processado.
99
100
101
102
Lista de Tabelas
1.1
O código genético, da perspectiva do mRNA. Os codões
UUG, CUG, AUU, AUG e GUG funcionam também como
codões Start, ou seja, codões que assinalam o início da transcrição. Os codões UAA, UAG e UGA são codões Stop, que
indicam o fim da transcrição. Phe/F - Fenilalanina; Ser/S - Serina; Gln/Q - Glutamina; Cys/C - Cisteína; Leu/L - Leucina;
Pro/P - Prolina; Asn/N - Asparagina; Trp/W - Triptofano; Ile/I
- Isoleucina; Thr/T - Treonina; Lys/K - Lisina; Arg/R - Arginina; Met/M - Metionina; Ala/A - Alanina; Asp/D - Ácido
Aspártico; Gly/G - Glicina; Val/V - Valina; His/H - Histidina;
Glu/E - Ácido Glutâmico; Tyr/Y - Tirosina . . . . . . . . . . .
5
3.1
Matriz de dados de expressão genética. . . . . . . . . . . . .
20
4.1
Matriz de expressão genética discretizada com um alfabeto
binário {D, U}. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Matriz de expressão genética original (valores de expressão
reais). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Matriz de valores discretos (obtida a partir da matriz original da Tabela 4.2). Representa as variações dos valores de
expressão genética dos genes da experiência entre os sucessivos instantes temporais. Alfabeto: {D, N, U} . . . . . . . . .
q-clusters extraídos pelo algoritmo q-Clustering sobre a matriz de expressão da Tabela 4.3 com q = 7. . . . . . . . . . . .
Biclusters de instantes iniciais 15, 16 e 17 identificados no
q-cluster 551 da Tabela 4.4 com o padrão DNDUND. . . . . .
Biclusters de instantes iniciais 10, 14 e 15 identificados no
q-cluster 289 da Tabela 4.4 com o padrão UNUDNU. . . . . .
4.2
4.3
4.4
4.5
4.6
xi
40
42
42
43
45
46
Lista de Algoritmos
1
2
3
4
Algoritmo CDK-Means . . . . . . . . . . . . . . . . . .
Algoritmo D-Miner . . . . . . . . . . . . . . . . . . . . .
Algoritmo Divisão . . . . . . . . . . . . . . . . . . . . .
Algoritmo q-Clustering (fase 2: extracção de q-clusters)
xiii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
38
39
44
Acrónimos
ADN Ácido desoxirribonucleico (DNA - desoxyribonucleic acid)
ARN Ácido ribonucleico (RNA - ribonucleic acid)
mRNA RNA mensageiro
tRNA RNA transporte
rRNA RNA ribossómico
MS Mass Spectrometry (espectrometria de massa)
PCR Polymerase Chain Reaction (reacção polimerase em cadeia)
cDNA ADN complementar
IDE Integrated Development Environment
XML eXtended Markup Language
PNG Portable Network Graphics
GIF Graphics Interchange Format
JPG de JPEG - Joint Photographic Experts Group
SVG Scalable Vector Graphics
GNU GNU’s Not Unix
GPL General Public License
LGPL Lesser General Public License
xv
xvi
HTML Hypertext Markup Language
CSS Cascading Style Sheets
PDA Personal Digital Assistant
RPM Red Hat Package Manager
Acrónimos
Capítulo 1
Introdução
O presente capítulo apresenta uma introdução ao trabalho desenvolvido
durante a disciplina de Projecto II do 5o ano do curso de Engenharia Informática na Universidade da Beira Interior. Num primeiro momento, será
feita uma contextualização e motivação do projecto na área específica em
que se enquadra, a Bioinformática. Seguidamente, serão definidos os objectivos do projecto desenvolvido no âmbito da disciplina e, por último, a
estrutura e conteúdo do relatório.
1.1
Contexto
Todos os organismos vivos dependem de três tipos de moléculas: ADN,
ARN, e proteínas, embora existam outras, tais como os lípidos, que desempenham funções críticas, nomeadamente na manutenção da estrutura
celular. De uma maneira geral, o ADN de uma célula contém uma vasta
biblioteca que descreve o seu funcionamento. O ARN actua no transporte
de pequenos fragmentos desta biblioteca para diferentes locais dentro da
célula, nos quais a informação transportada é utilizada como modelo na
síntese de proteínas. Por sua vez, as proteínas formam enzimas que desempenham reacções bioquímicas, enviam sinais para outras células, compõem
os maiores componentes do nosso organismo (como a queratina na nossa
pele), e executam o trabalho real da célula.
A informação genética de cada organismo ou célula, que é transmitida
à descendência, está organizada em genes que, por sua vez, residem em
cromossomas (ver Figura 1.1). Os genes codificam as proteínas, elemen1
2
Introdução
tos essenciais para o desempenho das várias funções biológicas ao nível
celular. Cada gene pode codificar mais do que uma proteína.
Figura 1.1: Relação entre a célula, os cromossomas e o ADN. O ADN das células
eucarióticas encontra-se no núcleo, dividido em unidades estruturais (cromossomas). Os
cromossomas são formados por cadeias de ADN cujos segmentos codificam genes.
1.1 Contexto
1.1.1
3
ADN e ARN
O ADN, ou ácido desoxirribonucleico, é uma molécula simples composta
por um açúcar (um tipo comum de composto orgânico, neste caso uma
pentose, a desoxirribose), um grupo fosfato (contento o elemento fósforo)
e uma de quatro bases azotadas (A, T, G ou C). As ligações químicas que
ligam os nucleótidos no ADN são sempre as mesmas, de modo que a base
das moléculas de ADN é muito regular. São as bases A, T, G e C que
conferem a individualidade a cada molécula de ADN. O ADN tem uma
estrutura helicoidal dupla, em que cada cadeia é complementar à outra,
isto é, as cadeias emparelham-se pela ligação entre as suas bases azotadas
(pares de bases) complementares entre si. Esta complementaridade permite que, na presença de uma das cadeias da hélice, a estrutura da sua
complementar possa ser directamente reproduzida, facto que está na base
de todo o processo de replicação de ADN.
Quimicamente falando, o ARN, ou ácido ribonucleico, é muito semelhante ao ADN. As duas diferenças essenciais entre os dois tipos de ácidos
nucleicos são: não existe T no ARN - a base U (uracilo) semelhante toma
o seu lugar - e o componente de açúcar do ARN possui um átomo de
oxigénio adicional. Estas diferenças, aparentemente irrelevantes, têm um
impacto importante nas funções biológicas das duas moléculas. O ADN é
praticamente inerte e quase sempre de cadeia dupla, permitindo-lhe funcionar como um repositório estático de informação. O ARN, por outro
lado, é quimicamente mais activo, e encontra-se, geralmente, na forma de
cadeia simples. Como resultado, o ARN pode transportar pequenas mensagens desde o ADN até à maquinaria celular que fabrica as proteínas,
participando activamente em reacções químicas importantes.
Nos organismos eucariotas, um gene é tipicamente dividido em vários
fragmentos, exões, mas ainda assim produz uma proteína coerente (ver
Figura 1.2).
Para tal, é necessário retirar os intrões, segmentos que não codificadores, do ARN transcrito e concatenar os exões antes da entrada do ARN
mensageiro no ribossoma. Este processo de cortar e colar a versão ARN
do gene na versão ARN mensageiro que entra no ribossoma é designado
splicing e consiste num processo bastante complexo ao nível molecular.
4
Introdução
Figura 1.2: Representação de um gene na molécula de ADN e respectiva localização no
cromossoma. Exões (segmentos codificadores) e intrões (segmentos não codificadores).
1.1.2
Código genético
O código genético consiste na correspondência entre o alfabeto do ADN/ARN
e o alfabeto das proteínas. Enquanto o primeiro contém apenas 4 símbolos, correspondentes aos 4 diferentes nucleótidos, o segundo inclui 20,
correspondentes aos 20 aminoácidos que podem ser utilizados na construção das proteínas. Assim, cada conjunto de três nucleótidos consecutivos
de ADN/ARN (codão) é responsável pela codificação de um determinado
aminoácido numa proteína (ver Tabela 1.1).
1.1.3
Síntese de proteínas
A síntese de proteínas processa-se da seguinte forma: a RNA polimerase
(complexo proteico designado enzima), inicia a transcrição de um gene
copiando a sua sequência de bases para uma sequência de bases de ARN
(emparelhando uma base T de ADN com uma base A de ARN, uma base
A de ADN com uma base U de ARN e assim consecutivamente) designada RNA mensageiro ou mRNA (mais precisamente, este é o caso dos
procariotas; nos eucariotas, este modelo de ARN passa por um processo
de splicing, descrito acima, para formar o mRNA). Esta pequena molécula é então abordada por complexos moleculares de grandes dimensões,
os ribossomas, que lêem codões consecutivos e localizam os aminoácidos
correspondentes para inclusão na cadeia polipeptídica em crescimento. Os
1.1 Contexto
U
C
A
G
U
UUU (Phe/F)
UUC (Phe/F)
UUA (Leu/L)
UUG (Leu/L)
CUU (Leu/L)
CUC (Leu/L)
CUA (Leu/L)
CUG (Leu/L)
AUU (Ile/I)
AUC (Ile/I)
AUA (Ile/I)
AUG (Met/M)
GUU (Val/V)
GUC (Val/V)
GUA (Val/V)
GUG (Val/V)
5
C
UCU (Ser/S)
UCC (Ser/S)
UCA (Ser/S)
UCG (Ser/S)
CCU (Pro/P)
CCC (Pro/P)
CCA (Pro/P)
CCG (Pro/P)
ACU (Thr/T)
ACC (Thr/T)
ACA (Thr/T)
ACG (Thr/T)
GCU (Ala/A)
GCC (Ala/A)
GCA (Ala/A)
GCG (Ala/A)
A
UAU (Tyr/T)
UAC (Tyr/T)
UAA (’Ocre’)
UAG (’Âmbar’)
CAU (His/H)
CAC (His/H)
CAA (Gln/Q)
CAG (Gln/Q)
AAU (Asn/N)
AAC (Asn/N)
AAA (Lys/K)
AAG (Lys/K)
GAU (Asp/D)
GAC (Asp/D)
GAA (Glu/E)
GAG (Glu/E)
G
UGU (Cys/C)
UGC (Cys/C)
UGA (’Opala’)
UGG (Trp/W)
CGU (Arg/R)
CGC (Arg/R)
CGA (Arg/R)
CGG (Arg/R)
AGU (Ser/S)
AGC (Ser/S)
AGA (Arg/R)
AGG (Arg/R)
GGU (Gly/G)
GGC (Gly/G)
GGA (Gly/G)
GGG (Gly/G)
Tabela 1.1: O código genético, da perspectiva do mRNA. Os codões UUG, CUG, AUU,
AUG e GUG funcionam também como codões Start, ou seja, codões que assinalam o
início da transcrição. Os codões UAA, UAG e UGA são codões Stop, que indicam o
fim da transcrição. Phe/F - Fenilalanina; Ser/S - Serina; Gln/Q - Glutamina; Cys/C Cisteína; Leu/L - Leucina; Pro/P - Prolina; Asn/N - Asparagina; Trp/W - Triptofano; Ile/I Isoleucina; Thr/T - Treonina; Lys/K - Lisina; Arg/R - Arginina; Met/M - Metionina; Ala/A
- Alanina; Asp/D - Ácido Aspártico; Gly/G - Glicina; Val/V - Valina; His/H - Histidina;
Glu/E - Ácido Glutâmico; Tyr/Y - Tirosina
ribossomas são, na realidade, fábricas moleculares onde as proteínas são
fabricadas.
Para ajudar na localização do aminoácido específico para um dado codão, um tipo especial de ARN, o ARN transporte (tRNA) desempenha uma
função específica e elegante. Existem vinte tipos de tRNAs e vinte tipos
de aminoácidos. Cada tipo de aminoácido liga-se a um tRNA diferente.
As moléculas de tRNA são fragmentos de três bases (anti-codões) que são,
por sua vez, complementares aos codões do mRNA. Tal como no emparelhamento das bases de ADN, o anti-codão do tRNA emparelha com o
codão do mRNA correspondente, o que faz com que o aminoácido fique
livre para ser adicionado pelo ribossoma à cadeia polipeptídica. Assim
que o aminoácido é adicionado, o ribossoma desloca-se um codão para
6
Introdução
a direita e o processo repete-se. O processo de transformação do mRNA
numa proteína é designado tradução, pois traduz a informação do ARN
(escrita num alfabeto de quatro letras) numa proteína (escrita num alfabeto
de vinte letras). Todas as proteínas, incluindo as necessárias ao processo,
são fabricadas por este mesmo processo (ver Figura 1.3).
Figura 1.3: A síntese de proteínas e as funções do mRNA e tRNA.
Este fluxo de informação,
ADN -> transcrição -> ARN -> tradução ->proteína
é enfaticamente referido como o dogma central da biologia molecular.
1.2
Motivação
Como vimos, os processos biológicos que ocorrem no contexto celular, ao
longo do ciclo de vida de uma célula, são quase sempre mediados por proteínas, que desempenham tarefas específicas no decorrer desses mesmos
1.3 Objectivos
7
processos: formam enzimas que desempenham reacções bioquímicas, enviam sinais para outras células e fazem parte dos maiores componentes do
nosso organismo (como a queratina na nossa pele). As proteínas são por
sua vez codificadas por genes, sendo que um gene pode codificar várias
proteínas. O processo de transformação do código genético para o código
proteico envolve a transcrição de ADN em ARN. Assim, e sabendo que a
função do ADN é essencialmente de armazenamento de informação (até
pela sua estrutura estável e praticamente inerte), a concentração de ADN
na célula mantém-se sensivelmente constante ao longo do tempo, enquanto
que a de ARN varia consoante os processos biológicos que decorrem na
célula em cada momento.
É através da medição dessa concentração de mRNA nas células que os
investigadores procuram estabelecer uma relação entre o nível de expressão dos genes e os processos biológicos que ocorrem nas células, atribuir
funções específicas a cada gene estudado, identificar possíveis relações
entre genes e, finalmente, dar os primeiros passos na importante e complexa tarefa de inferência de redes de regulação genética (gene regulatory
networks).
1.3
Objectivos
O aparecimento de microarrays levou à necessidade de desenvolver ferramentas computacionais de apoio à análise de dados de expressão genética
(gene expression data). Como veremos em mais detalhe no Capítulo 2, os
microarrays permitem medir a resposta ou o nível de expressão (gene expression) de um elevado número de genes, potencialmente todos os genes
de um dado organismo, em determinadas condições experimentais. Estas condições podem corresponder à medição da expressão genética em
órgãos diferentes, em tecidos diferentes, ou até mesmo em indivíduos diferentes. Permitem ainda analisar, em simultâneo, o nível de expressão
dos genes como reacção a estímulos diferentes tais como utilização de drogas, existência ou não de determinada doença, ou observar a evolução da
expressão em diferentes instantes temporais em determinada condição de
teste.
A análise de dados de expressão genética provenientes de séries temporais (time-series gene expression data) tem como objectivo identificar processos biológicos relevantes que possam ser úteis para a identificação de
8
Introdução
redes de regulação genética (gene expression networks). De facto, a observação da evolução da expressão em diferentes instantes temporais pode ser
especialmente útil para a identificação de conjuntos de genes com comportamentos semelhantes em determinados instantes temporais contíguos
(padrões de expressão) e posteriormente identificar potenciais processos
biológicos relevantes.
Neste contexto, as técnicas de biclustering têm-se revelado particularmente adequadas ao problema visto permitirem identificar subgrupos de
genes co-regulados em subgrupos de condições (biclusters) que correspondem a potenciais processos biológicos relevantes. Os biclusters considerados biologicamente significativos, identificam de facto módulos regulatórios (conjuntos de genes co-regulados pelos mesmos factores de transcrição
que partilham a mesma função biológica) e poderão depois ser usados na
inferência de redes de regulação genética.
O problema de biclustering é NP-completo. Este facto leva a que os
algoritmos existentes na literatura utilizem abordagens heurísticas para
obter soluções sub-óptimas usando recursos computacionais razoáveis.
Existem também abordagens exaustivas que usam restrições, normalmente
no tamanho dos biclusters reportados.
No caso das séries temporais a restrição das condições de um bicluster a
instantes de tempo contíguos (que identificam um processo biológico com
princípio e fim bem definidos) permite desenvolver algoritmos eficientes e
calcular a solução óptima. No entanto, e apesar da relevância da identificação de módulos regulatórios para a biologia/medicina utilizando este tipo
de dados, apenas temos conhecimento de cinco algoritmos na literatura
que abordam o problema de biclustering em dados de expressão genética
provenientes de séries temporais de expressão de forma directa [13] [14]
[23] [9] [19], isto é, têm como objectivo identificar biclusters formados por
um conjunto de genes com expressão coerente num conjunto contíguo de
instantes temporais.
O projecto desenvolvido ao longo dos dois semestres lectivos pretendeu
desenvolver uma ferramenta que permita a integração destes algoritmos e a
respectiva visualização e análise de resultados. Embora existam já algumas
ferramentas que integrem algoritmos de biclustering aplicados a dados de
expressão genética em geral, o desenvolvimento de uma ferramenta para o
caso específico das séries temporais, dada a particularidade dos algoritmos
usados e dos resultados obtidos, é relevante para a comunidade científica.
Apresentamos seguidamente o plano de trabalho definido para o pro-
1.3 Objectivos
9
jecto do segundo semestre, revisto e adaptado desde a proposta de projecto apresentada inicialmente para o desenvolvimento da ferramenta
BiGGEsTS - Biclustering Gene Expression Time-Series.
1. Reformulação e optimização do módulo de carregamento de dados.
2. Implementação do módulo de pós-processamento (filtragem e ordenação dos biclusters resultantes da execução dos algoritmos segundo
diferentes critérios).
3. Implementação do módulo de download de ficheiros a partir do site
da Gene Ontology.
4. Integração do algoritmo CC-TSB-Biclustering na ferramenta.
5. Integração e criação de suporte para biclusters e grupos de biclusters
com padrões de expressão simétricos (anti-correlation) e/ou com atrasos (time-lags), nomeadamente ao nível da aplicação de algoritmos
de biclustering e dos gráficos de expressão.
6. Reimplementação dos algoritmos de clustering hierárquico da ferramenta Cluster 3.0 [6] [5] e desenvolvimento do módulo de visualização de dendrogramas.
7. Leitura e análise de dois algoritmos de biclustering existentes na literatura para séries temporais de expressão genética [9] [19] para
decisão sobre a sua implementação e integração na ferramenta. Ênfase na análise de tipos de biclusters identificados e complexidade
computacional.
8. Implementação de threads de execução autónoma para as funcionalidades mais exigentes em termos de tempo, com as respectivas barras
de progresso.
9. Implementação dos módulos de gestão de sessões e de informação.
10. Criação de executáveis nativos e instaladores para os sistemas operativos Windows, Linux e Mac OS X. Realização de testes para estabelecimento dos pré-requisitos do software, benchmarking e detecção
de problemas. Produção da documentação para o utilizador e programador, bem como da licença de utilização do software.
10
Introdução
11. Criação de uma imagem (cores, logótipo) para a ferramenta e desenvolvimento de um site para disponibilização do BiGGEsTS à comunidade científica.
1.4
Conteúdo do Relatório
Este relatório é constituído por sete capítulos com a seguinte estrutura:
Capítulo 1 - Introdução :
Contextualização e motivação do projecto, breve descrição do projecto e dos seus objectivos e estrutura do relatório.
Capítulo 2 - Microarrays e Dados de Expressão :
O conceito de microarray. Introdução às experiências com microarrays
e aos dados de expressão genética.
Capítulo 3 - Biclustering :
Algoritmos de biclustering. Distinção das várias classes de algoritmos
existentes. Biclusters em matrizes de expressão genética e biclusters
em séries temporais de expressão genética.
Capítulo 4 - Trabalho Relacionado :
Breve resumo sobre os algoritmos integrados na aplicação. Análise
compreensiva de novos algoritmos de biclustering para séries temporais de expressão genética.
Capítulo 5 - A Ferramenta BiGGEsTS :
Análise das várias fases de desenvolvimento da ferramenta BiGGEsTS:
modelação, implementação e produção do software.
Capítulo 6 - Estudo de Caso :
Demonstração da utilização da ferramenta BiGGEsTS para análise de
dados reais de séries temporais de expressão genética.
Capítulo 7 - Conclusões e Trabalho Futuro :
Apresentação das conclusões e propostas para trabalho futuro.
Adicionalmente são incluídos os seguintes conteúdos num CD-ROM
distribuído com o presente relatório:
Diagramas de Classes da Ferramenta BiGGEsTS
Capítulo 2
Microarrays e Dados de Expressão
Como vimos anteriormente, é através da medição da quantidade de mRNA
nas células em condições experimentais específicas que podemos estabelecer relações entre os níveis de expressão dos vários genes de um organismo,
de forma a identificar padrões de actividade semelhantes. Neste capítulo
pretendemos introduzir o conceito de microarray e explicar de que forma
este componente pode ser utilizado em experiências de carácter biológico
para medir o nível de expressão dos genes numa determinada condição
experimental [22]. Faremos também uma referência às várias fases das experiências com microarrays [21] e, por último, uma clarificação ao conceito
de dados de expressão genética e à sua organização em matrizes [12], com
vista a uma análise posterior.
2.1
Microarrays
A medição de mRNA é efectuada em experiências biológicas com microarrays, também designados chips de ADN ou chips de genes. As experiências
com microarrays envolvem seis fases essenciais:
1. Selecção dos elementos de prova (probes): oligonucleótidos (fragmentos de ADN de cadeia simples com cerca de 5 a 50 nucleótidos),
cDNA (ADN complementar, obtido através da remoção dos intrões
do ADN original), cromossomas, genoma completo de um determinado organismo;
11
Microarrays e Dados de Expressão
12
2. Fabricação do chip (processo através do qual os elementos de prova
são colocados no chip): fotolitografia, pipetagem, piezoelectricidade;
3. Etiquetagem da amostra por fluorescência: ARN, mRNA, cDNA;
4. Experiência: hibridação, ligase, adição de bases, espectrometria de
massa (MS - mass spectrometry), electroforese, fluxocitometria, PCR
(polymerase chain reaction);
5. Leitura ou medição: fluorescência, espectrometria de massa, electroforese;
6. Preparação e análise dos dados: controlo robótico, processamento
de imagem, sistemas de gestão de bases de dados, bioinformática,
mineração de dados, visualização.
2.1.1
O que é exactamente um microarray de ADN?
Um microarray de ADN é um suporte sólido de dimensões reduzidas, no
qual são afixadas sequências de milhares de genes, em posições específicas.
O suporte é geralmente uma lâmina de vidro ou silicone microscópica, ou
uma membrana de nylon. O ADN é impresso, pontilhado ou sintetizado
directamente no suporte (ver Figura 2.1). Cada sequência de ADN, correspondente a um gene, é colocada num ponto específico do suporte. Os
vários pontos formam uma matriz, cuja disposição ordenada e fixa permite, posteriormente, saber qual a sequência de ADN que se encontra em
cada uma das posições. Os pontos podem ser constituídos por sequências
de ADN, cDNA ou oligonucleótidos.
2.1.2
Passos básicos de uma experiência com microarrays
Como é possível extrair informação sobre uma determinada condição patológica a partir de um vidro de dimensões reduzidas ou de uma placa de
silicone contendo milhares de sequências de genes?
O processo é baseado na hibridação de provas de ADN (probes), uma
técnica que usa moléculas de ácido nucleico identificadas por fluorescência como provas móveis para identificar moléculas complementares, isto
é, moléculas de ADN ou ARN cuja sequência de bases emparelha com a
2.1 Microarrays
13
sequência da molécula de prova. Quando duas sequências complementares se encontram, tais como o ADN imobilizado e a prova de ADN, cDNA
ou mRNA, dá-se uma ligação entre elas, ou hibridação (ver Figura 2.1).
Figura 2.1: As fases de uma experiência com microarrays.
Consideremos duas células: uma célula de tipo 1, saudável, e uma
célula de tipo 2, doente. Suponhamos que ambas contêm um conjunto
de quatro genes idênticos, A, B, C e D. O objectivo é determinar o perfil de expressão destes quatro genes nos dois tipos de células. Para isso,
procede-se ao isolamento do mRNA de cada um dos tipos de células, que
se usa depois como modelo para produzir cDNA, ao qual se acrescenta
um composto fluorescente. As fluorescências usadas têm cores diferentes, para que as amostras possam ser distinguidas em fases posteriores.
As amostras marcadas são então misturadas e incubadas num microarray
contendo os genes A, B, C e D imobilizados. As moléculas fluorescentes
ligam-se aos vários pontos do array, que correspondem aos genes expres-
14
Microarrays e Dados de Expressão
sos em cada célula. Os genes consideram-se expressos (up-expressed) ou
regulados (up-regulated) se, durante a experiência, as sequências de ADN
que lhes correspondem se ligarem por hibridação ao ADN-alvo, permitindo inferir que esses genes estão a contribuir para a realização de uma
tarefa biológica específica. Se a sequência de um determinado gene não
hibrida com nenhuma sequência do ADN-alvo, então estamos perante o
caso em que o gene não está expresso (down-expressed) ou não está regulado
(down-regulated). O nível de expressão é determinado pela concentração
relativa de mRNA na célula, pelo que o valor a partir do qual se considera
que um determinado gene está expresso ou não varia consoante a técnica
de análise utilizada posteriormente.
Após a finalização do passo de hibridação, o microarray é introduzido
num "leitor"ou scanner que contém alguns lasers, um microscópio especial
e uma câmara. As marcações fluorescentes são excitadas pelo laser e o
microscópio e a câmara trabalham em conjunto para criar uma imagem
digital do array. Estes dados são posteriormente armazenados em suporte
digital e analisados por software específico que calcula a razão entre as
fluorescências vermelha e verde, através da análise da sua imagem digital.
Para calcular a razão, o programa cria então uma tabela que contém as taxas
de intensidade de fluorescência vermelho-verde para cada um dos pontos
do array. Por exemplo, para o cenário acima descrito, poder-se-á concluir
que ambos os tipos de células expressavam o gene A ao mesmo nível, que a
célula 1 expressava mais o gene B, a célula 2 expressava mais o gene C e que
nenhuma das células expressava o gene D. É necessário lembrar que este
é apenas um exemplo simples que usamos para demonstrar os pontoschave do desenho experimental. Algumas experiências de microarrays
podem conter até 30 ou 40 mil pontos, ou mesmo representar um genoma
completo. Assim sendo, os dados gerados a partir de um simples array
podem aumentar de forma significativa.
2.1.3
As cores de um microarray
Geralmente, as cores resultantes das experiências com microarrays são as
seguintes (ver Figura 2.2):
Verde - representa o ADN de controlo, em que o ADN ou cDNA deriva de
tecido normal hibridado com o ADN-alvo.
Vermelho - representa o ADN de amostra, em que o ADN ou cDNA deriva
2.2 Dados de expressão genética
15
de tecido doente hibridado com o ADN-alvo.
Amarelo - representa uma combinação de ADN de controlo e de amostra,
em que ambos hibridam igualmente com o ADN-alvo.
Preto - representa áreas em que nem o ADN de controlo nem o de amostra
hibridam com o ADN-alvo.
Figura 2.2: Cores visíveis numa imagem digital de um microarray.
Cada ponto do array está associado a um gene particular. Cada cor
do array representa tecido saudável (controlo) ou tecido doente (amostra).
Dependendo do tipo de array usado, a localização e intensidade da cor
identifica se o gene, ou a mutação, está presente quer no ADN de controlo,
quer no ADN da amostra. Fornece também uma estimativa do nível de
expressão do(s) gene(s) no ADN da amostra e no ADN de controlo.
2.2
Dados de expressão genética
Os dados obtidos nas experiências com microarrays correspondem, como
observámos, ao nível de expressão de um elevado número de genes, por
vezes todos os genes de um determinado organismo, num determinado número de amostras (condições experimentais) [1]. As amostras podem corresponder a instantes temporais ou condições ambientais distintas. Noutros casos, podem pertencer a órgãos, tecidos - tecidos saudáveis e doentes,
por exemplo - ou indivíduos distintos. A simples visualização dos dados
provenientes das experiências com microarrays - dados de expressão genética (gene expression data) - é, só por si, complexa, mas a extracção de
conhecimento biológico relevante representa um desafio ainda maior [10].
16
Microarrays e Dados de Expressão
Os dados de expressão genética são dispostos numa matriz de expressão genética (gene expression matrix), em que cada gene corresponde a uma
linha e cada condição a uma coluna. Cada elemento da matriz contém o
nível de expressão de um gene numa determinada condição e é representado por um valor real, geralmente o logaritmo da quantidade relativa do
mRNA do gene numa condição experimental específica.
As matrizes de expressão genética têm sido analisadas extensivamente
em duas dimensões: a dimensão dos genes e a dimensão das condições.
Estes dois tipos de análise correspondem, respectivamente, a identificar
os padrões de expressão dos genes comparando as linhas da matriz, e a
identificar os padrões de expressão das amostras comparando as colunas
da matriz.
Entre os objectivos da análise de dados de expressão genética (gene
expression data analysis), são de salientar os seguintes:
1. Agrupamento de genes de acordo com a sua expressão em diversas
condições;
2. Classificação de um novo gene, dada a expressão de outros genes,
cuja classificação é conhecida;
3. Agrupamento de condições de acordo com a expressão de um determinado número de genes;
4. Classificação de um novo gene, dada a expressão dos genes nessa
condição experimental;
5. Identificação de mecanismos de regulação genética (regulatory mechanisms) e inferência de redes de regulação genética (regulatory networks).
Capítulo 3
Biclustering
O presente capítulo tem como objectivo introduzir o conceito de algoritmos
de biclustering, apresentar um breve resumo dos tipos de algoritmos de
biclustering existentes e da sua aplicação, quer no âmbito geral dos dados
de expressão genética [12], quer no caso específico das séries temporais de
expressão genética [13].
3.1
Conceito de Biclustering
As técnicas de clustering (agrupamento) podem e têm sido largamente usadas para agrupar genes ou condições e, desta forma, contribuir também
para a classificação de novos genes ou novas amostras (condições). Contudo, a aplicação de algoritmos de clustering a dados de expressão genética
depara-se com uma dificuldade acrescida. Na base desta afirmação está o
facto de muitos padrões de activação serem comuns a um grupo de genes
apenas em determinadas condições experimentais e não na totalidade das
condições analisadas. Para além disso, o número de condições experimentais disponível para análise é reduzido (na ordem de escassas dezenas),
comparativamente ao número de genes (na ordem dos milhares), o que
invalida a utilização de técnicas de redução do espaço das características
(feature selection), normalmente usadas em conjunto com os algoritmos de
clustering. De facto, o nosso entendimento geral de processos celulares
leva-nos a esperar que os subconjuntos de genes sejam co-regulados ou
co-expressos apenas em algumas condições experimentais e que se comportem quase independentemente noutras condições.
17
Biclustering
18
A descoberta destes padrões locais de expressão, em oposição aos padrões globais encontrados pelos algoritmos de clustering, pode ser a chave
para encontrar mecanismos regulatórios que, caso contrário, passariam
despercebidos. Assim, torna-se desejável ir para além do paradigma de
clustering e desenvolver abordagens distintas, capazes de revelar padrões
locais em dados de microarrays [2].
O termo biclustering foi introduzido pela primeira vez por Cheng e
Church [3] na análise de dados de expressão genética. Refere-se a uma
classe distinta de algoritmos de clustering que aplica clustering simultâneo
a linhas e colunas. Os algoritmos de biclustering têm sido propostos e
utilizados também noutras áreas de aplicação. Vários nomes, tais como
co-clustering, clustering bidimensional, subspace clustering, entre outros, são
usados frequentemente na literatura para referir a mesma formulação deste
problema. Uma das primeiras técnicas de biclustering foi o algoritmo de
clustering directo (direct clustering) introduzido por Hartigan [8], também
conhecido como clustering em bloco [15] (block clustering), embora na prática este tipo de algoritmos não tenha sido explorado até aos anos 2000.
3.1.1
Clustering vs biclustering
As técnicas de clustering permitem extrair clusters de genes ou clusters de
condições, quando aplicadas sobre as linhas ou as colunas de uma matriz
de dados, respectivamente, produzindo modelos globais. Cada gene de
um cluster de genes é definido usando todas as condições da experiência. De forma semelhante, cada condição de um cluster de condições é
caracterizada pela actividade de todos os genes envolvidos na experiência.
Os algoritmos de biclustering, por sua vez, aplicam clustering simultaneamente nas duas dimensões (linhas e colunas), produzindo modelos locais.
Num bicluster cada gene é seleccionado usando apenas um subconjunto das
condições e cada condição é seleccionada usando apenas um subconjunto
de genes. O objectivo das técnicas de biclustering consiste em identificar
grupos de genes que apresentam padrões de actividade semelhantes num
determinado subconjunto de condições experimentais. Assim, as técnicas
de biclustering são mais adequadas para quando uma ou mais das seguintes
situações ocorrem:
1. Apenas um reduzido número de genes participa num processo celular de interesse.
3.2 Definições e Formulação do Problema
19
2. Um processo celular interessante só permanece activo num determinado subconjunto das condições experimentais.
3. Cada gene pode participar em diversos processos biológicos que
podem ou não estar co-activos em todas as condições experimentais.
Por estas razões, os algoritmos de biclustering devem identificar grupos
de genes e condições obedecendo às seguintes restrições:
1. Um cluster de genes deve ser definido apenas em relação a um subconjunto das condições.
2. Um cluster de condições deve ser definido apenas em relação a um
subconjunto de genes.
3. Os clusters não devem ser exclusivos e/ou exaustivos: um gene/condição
pode pertencer a mais do que um cluster (ou mesmo a nenhum) e ser
agrupado(a) usando um subconjunto de condições/genes.
Adicionalmente, a robustez dos algoritmos de biclustering é particularmente relevante devido a duas características adicionais dos sistemas
em estudo. A primeira é a complexidade inerente aos processos de regulação genética que requer ferramentas de análise poderosas. A segunda
característica diz respeito ao nível de ruído introduzido nas experiências
de expressão genética, que torna a utilização de ferramentas inteligentes,
e tão eficientes quanto possível, indispensável.
3.2
Definições e Formulação do Problema
A maioria das aplicações que utilizam algoritmos de biclustering lida com
matrizes de expressão genética (ver Tabela 3.1). Existem contudo muitas
outras aplicações para estes algoritmos. Por esta razão, consideraremos o
caso geral de uma matriz de dados A, com um conjunto de linhas R e um
conjunto de colunas C, em que o elemento Ai j corresponde a um valor que
representa a relação entre a linha i e a coluna j. Tal matriz A, com |R| linhas
e |C| colunas, é definida pelo seu conjunto de linhas, R = {r1 , ..., r|R| } e pelo
seu conjunto de colunas C = {c1 , ..., c|C| }. Usaremos (R, C) para denotar a
matriz A. Considerando que I ⊆ R e J ⊆ C são subconjuntos de linhas e
colunas, respectivamente, AIJ = (I, J) denota a submatriz de A que contém
Biclustering
20
apenas os elementos Aij que pertencem à submatriz com um conjunto de
linhas I e um conjunto de colunas J.
Gene 1
Gene ...
Gene i
Gene ...
Gene |R|
Condição 1
A11
...
Ai1
...
A|R|1
...
...
...
...
...
...
Condição j
A1j
...
Aij
...
A|R| j
...
...
...
...
...
...
Condição |C|
A1|C|
...
Ai|C|
...
A|R||C|
Tabela 3.1: Matriz de dados de expressão genética.
Dada a matriz A, assim definida, definimos um cluster de linhas como
um subconjunto de linhas que exibe um comportamento semelhante em
todo o conjunto de colunas. Isto significa que um cluster de linhas AIC =
(I, C) é um subconjunto de linhas definido sobre todo o conjunto de colunas
C em que I = {i1 , ..., ik } é um subconjunto de linhas (I ⊆ R e k ≤ |C|). Um
cluster de linhas (I, C) pode assim ser definido como uma submatriz de A
com k linhas por |C| colunas.
Analogamente, um cluster de colunas é um subconjunto de colunas
que exibem um comportamento semelhante em todo o conjunto de linhas.
Um cluster de colunas ARJ = (R, J) é um subconjunto de colunas definido
sobre todo o conjunto de linhas R, onde J = { j1 , ..., js } é um subconjunto
de colunas (J ⊆ C e s ≤ |C|). Um cluster de colunas (R, J) pode ser assim
definido como uma submatriz A com |R| linhas por s colunas.
Um bicluster é um subconjunto de linhas que exibem um comportamento semelhante em todo o subconjunto de colunas e vice-versa. O
bicluster AIJ = (I, J) é, então, um subconjunto de linhas e colunas em que
I = {i1 , ..., ik } é um subconjunto de linhas (I ⊆ |R| e k ≤ |C|), e J = { j1 , ..., js }
é um subconjunto de colunas (J ⊆ C e s ≤ |C|). Um bicluster (I, J) pode ser
definido como uma submatriz de A com k linhas por s colunas.
O problema específico endereçado pelos algoritmos de biclustering pode
agora ser definido. Dada uma matriz de dados, A, pretendemos identificar
um conjunto de biclusters Bk = (Ik , Jk ) tal que cada bicluster Bk satisfaça
algumas características específicas de homogeneidade.
3.3 Complexidade do Problema
3.2.1
21
Grafos pesados bipartidos e matrizes de dados
Pode-se estabelecer uma relação interessante entre as matrizes de dados e
a teoria de grafos. Uma matriz de dados pode ser vista como um grafo
bipartido com pesos. Um grafo G = (V, E), em que V é o conjunto de
vértices e E o conjunto de arestas, é designado bipartido se os seus vértices
podem ser separados em dois conjuntos, C1 e C2 , tais que todaS
a aresta em
E tem exactamente um vértice em C1 e o outro em C2 : V = C1 C2 . Nesta
ordem de ideias, a matriz de dados A = (R, C) pode ser vista como um
grafo bipartido com pesos onde cada nodo ni ∈ R corresponde a uma linha
e cada nodo n j ∈ C corresponde a uma coluna. A aresta entre o nodo ni
e o nodo n j tem um peso Ai j , denotando o elemento da matriz na posição
de intersecção entre a linha i e a coluna j (o nível de activação, no caso das
matrizes de expressão genética).
Esta relação entre as matrizes e a teoria de grafos está na base de diversas
abordagens interessantes à análise de dados de expressão baseadas em
algoritmos de grafos.
3.3
Complexidade do Problema
Embora a complexidade do problema de biclustering possa depender da
sua formulação exacta e, mais especificamente, da função de mérito (merit
function, fitness function) usada para avaliar a qualidade de um determinado
bicluster, quase todas as variantes interessantes deste problema são NPcompletas.
Na sua forma mais simples, a matriz de dados A é uma matriz binária,
em que cada elemento Ai j toma o valor 0 ou 1. Neste caso, um bicluster
corresponde a uma biclique no grafo bipartido que lhe corresponde. Encontrar um bicluster de tamanho máximo é, então, equivalente a encontrar
a biclique com o maior número de arestas num grafo bipartido, o que constitui um problema NP-completo [16]. Em casos mais complexos, em que
os valores numéricos reais da matriz A são tomados em consideração para
determinar a qualidade de um bicluster, teremos uma complexidade que
não pode, necessariamente, ser inferior a esta, uma vez que, de um modo
geral, os problemas complexos podem também ser usados para resolver as
versões mais restritivas do problema conhecido como NP-completo. Neste
contexto, a grande maioria dos algoritmos propostos para o problema de
Biclustering
22
biclustering utiliza abordagens heurísticas, em muitos casos precedidas por
um passo de normalização aplicado à matriz de dados de forma a evidenciar os padrões de interesse. Algumas técnicas evitam as abordagens
heurísticas, usando a enumeração exaustiva de biclusters, normalmente
com restrições que envolvem o seu tamanho.
3.4
Dimensões da Análise
Nas secções que se seguem apresentamos uma classificação dos algoritmos
de biclustering de acordo com as quatro dimensões de análise apresentadas
por Madeira e Oliveira [12]:
• O tipo de biclusters que permitem encontrar.
• A estrutura do(s) bicluster(s) produzido(s).
• O algoritmo específico usado para identificar cada bicluster.
• O domínio de aplicação de cada algoritmo.
3.4.1
Tipo de bicluster
Um dos critérios para avaliar um algoritmo de biclustering envolve a identificação do tipo de biclusters que o algoritmo permite encontrar. Madeira
e Oliveira identificam quatro classes essenciais (ver Figura 3.4.1):
1. Biclusters com valores constantes.
2. Biclusters com valores constantes em linhas ou colunas.
3. Biclusters com valores coerentes.
4. Biclusters com evoluções coerentes.
As três primeiras classes analisam directamente os valores numéricos das matrizes de dados e tentam encontrar subconjuntos de linhas e
subconjuntos de colunas com comportamentos semelhantes. Estes comportamentos podem ser observados nas linhas, nas colunas, ou em ambas
as dimensões da matriz de dados, como nas Figuras 3.1(a), 3.1(b), 3.1(c),
3.1(d) e 3.1(e). A quarta classe de algoritmos engloba os algoritmos que
3.4 Dimensões da Análise
23
1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0
1.0 2.0 3.0 4.0
1.0 2.0 5.0 0.0
1.0 2.0 0.5 1.5
1.0 1.0 1.0 1.0
2.0 2.0 2.0 2.0
1.0 2.0 3.0 4.0
2.0 3.0 6.0 1.0
2.0 4.0 1.0 3.0
1.0 1.0 1.0 1.0
3.0 3.0 3.0 3.0
1.0 2.0 3.0 4.0
4.0 5.0 8.0 3.0
4.0 8.0 2.0 6.0
1.0 1.0 1.0 1.0
4.0 4.0 4.0 4.0
1.0 2.0 3.0 4.0
5.0 6.0 9.0 4.0
3.0 6.0 1.5 4.5
(a)
(b)
(c)
(d)
(e)
S1 S1 S1 S1
S1 S1 S1 S1
S1 S2 S3 S4
70
13
19
10
S1 S1 S1 S1
S2 S2 S2 S2
S1 S2 S3 S4
49
40
49
35
S1 S1 S1 S1
S3 S3 S3 S3
S1 S2 S3 S4
40
20
27
15
S1 S1 S1 S1
S4 S4 S4 S4
S1 S2 S3 S4
90
15
20
12
(f)
(g)
(h)
(i)
(j)
Figura 3.1: Diferentes tipos de biclusters. (a) bicluster constante; (b) linhas constantes;
(c) colunas constantes; (d) valores coerentes - modelo aditivo; (e) valores coerentes modelo multiplicativo; (f) evolução global coerente; (g) evoluções coerentes nas linhas;
(h) evoluções coerentes nas colunas; (i) evoluções coerentes nas colunas; (j) evoluções
coerentes em linhas e colunas
procuram comportamentos coerentes, independentemente dos valores numéricos exactos na matriz de dados. Assim, os biclusters com evoluções
coerentes vêem os elementos da matriz de dados como símbolos. Estes
símbolos podem ser puramente nominais, como nas Figuras 3.1(f), 3.1(g)
e 3.1(h); podem corresponder a uma determinada ordem, como na Figura
3.1(i); ou representar alterações positivas e negativas em relação a um valor
normal, como na Figura 3.1(j).
No caso dos dados de expressão genética, os biclusters constantes revelam subconjuntos de genes com valores de expressão semelhantes num determinado subconjunto de condições. Um bicluster com linhas constantes
identifica um subconjunto de genes com valores de expressão semelhantes
num determinado subconjunto de condições, permitindo que os níveis de
expressão sejam diferentes de gene para gene. De forma semelhante, um
bicluster com colunas constantes identifica um subconjunto de condições
no qual um conjunto de genes apresenta valores de expressão semelhantes
assumindo que os seus valores de expressão podem variar de condição
para condição. Contudo, podemos estar interessados em identificar relações mais complexas entre os genes e as condições analisando directa ou
indirectamente os valores numéricos.
Biclustering
24
Assim, um bicluster com valores coerentes identifica um subconjunto
de genes e condições com valores coerentes nas linhas e colunas da matriz
de dados. Por outro lado, identificar um bicluster com evoluções coerentes
pode ser útil se estivermos interessados em encontrar um subconjunto
de genes que estão regulados acima ou abaixo do normal (up-regulated,
down-regulated) num subconjunto de condições sem ter em conta os seus
valores de expressão reais; ou se estivermos interessado em identificar um
subconjunto de condições que têm os mesmos efeitos ou efeitos opostos
num subconjunto de genes.
De acordo com as propriedades específicas de cada problema, um ou
mais destes diferentes tipos de biclusters é, geralmente, considerado interessante. Para além disso, a função de mérito utilizada para avaliar a
qualidade dos biclusters encontrados deve ser a mais adequada, de acordo
com o tipo de biclusters pretendido. A selecção da função de mérito está
fortemente relacionada com as características dos biclusters que o algoritmo
pretende encontrar. A grande maioria dos algoritmos aplicam clustering
simultâneo em ambas as dimensões da matriz de dados, de forma a encontrar biclusters das quatro classes que mencionámos anteriormente. Existem
também abordagens de clustering de duas vias (two-way clustering) que
usam clustering de uma via (one-way clustering) para produzir clusters em
cada uma das duas dimensões da matriz de dados separadamente. Os
resultados unidimensionais são então combinados para produzir subgrupos de linhas e colunas cujas propriedades nos permitem considerar o
resultado final como biclustering. O tipo de biclusters produzido por estes
algoritmos depende, então, da distância ou medida de similaridade usada
pelos algoritmos de clustering de uma via.
3.4.2
Estrutura do bicluster
Os algoritmos de biclustering assumem que existe apenas um bicluster na
matriz, tal como na Figura 3.2(a), ou partem do princípio que a matriz
contém k biclusters, em que k é o número de biclusters que se esperam identificar, definido previamente. Enquanto a maioria dos algoritmos assume a
existência de vários biclusters, existem outros que apenas pretendem identificar um. Sendo assim, embora estes algoritmos possam identificar mais
do que um bicluster, o bicluster que resulta da execução do algoritmo é
geralmente o melhor, de acordo com um determinado critério.
3.4 Dimensões da Análise
(a)
25
(b)
(f)
(c)
(g)
(d)
(h)
(e)
(i)
Figura 3.2: Estrutura dos biclusters. (a) único; (b) exclusivos; (c) em xadrez; (d) linhas
exclusivas; (e) colunas exclusivas; (f) não sobrepostos com estrutura em árvore; (g) não
sobrepostos e não exclusivos; (h) sobrepostos com estrutura hierárquica; (i) sobrepostos e
arbitrariamente posicionados.
Quando o algoritmo de biclustering assume a existência de vários biclusters na matriz de dados, os biclusters identificados podem ter as seguintes
estruturas (ver Figura 3.4.2):
1. Biclusters de linhas ou colunas exclusivas (blocos rectangulares diagonais após o reordenamento de linhas e colunas).
2. Biclusters não sobrepostos com uma estrutura em xadrez.
3. Biclusters de linhas exclusivas.
4. Biclusters de colunas exclusivas.
5. Biclusters não sobrepostos com estrutura em árvore.
6. Biclusters não sobrepostos e não exclusivos.
7. Biclusters sobrepostos com estrutura hierárquica.
8. Biclusters sobrepostos com posicionamento arbitrário.
Biclustering
26
3.4.3
Objectivos dos algoritmos de biclustering
Os algoritmos de biclustering podem ter dois tipos de objectivos: identificar
um bicluster ou identificar um conjunto de biclusters. Algumas abordagens
procuram identificar um bicluster de cada vez. Outras permitem descobrir um conjunto de biclusters em cada aplicação. Existem também alguns
algoritmos que fazem a identificação de biclusters em simultâneo, isto é,
descobrem todos os biclusters com uma única aplicação. Dada a complexidade do problema, têm sido usadas diversas abordagens:
1. Combinação iterativa de clustering em linhas e colunas (iterative row
and column clustering combination).
2. Divisão e conquista (divide and conquer).
3. Pesquisa gulosa (greedy search).
4. Enumeração exaustiva de biclusters (exhaustive bicluster enumeration).
5. Identificação de parâmetros de uma dada distribuição (distribution
parameter identification).
A forma mais directa para identificar biclusters é a aplicação de algoritmos de biclustering às linhas e colunas da matriz de dados separadamente
e, posteriormente, combinar os resultados através de um método iterativo
que combine as disposições de ambos os clusters. Vários algoritmos usam
esta ideia de combinação iterativa de clustering em linhas e colunas. Outras
técnicas utilizam a abordagem de divisão e conquista: dividem o problema
em vários sub-problemas semelhantes ao original, mas de dimensões mais
reduzidas, resolvem os sub-problemas recursivamente e depois combinam
as soluções para criar uma solução global para o problema original [4]. Um
grande número de métodos aplica a pesquisa gulosa. Esta abordagem consiste em efectuar escolhas óptimas para os casos locais, na esperança de
que a optimização local leve a uma solução global aceitável [4]. Alguns
autores propõem métodos que fazem uma enumeração exaustiva de biclusters, bem como algumas técnicas para acelerar o processo, nomeadamente
através da restrição da dimensão dos biclusters que devem ser identificados. O último tipo de abordagem faz a identificação de parâmetros de uma
dada distribuição. Para isso, assume que os biclusters são gerados segundo
um determinado modelo estatístico e procura identificar os parâmetros
3.5 Aplicações de Biclustering
27
da distribuição que aproximam da melhor forma a distribuição observada
nos dados reais, minimizando iterativamente um determinado critério de
qualidade.
3.5
Aplicações de Biclustering
A técnica de biclustering pode, em geral, ser aplicada quando os dados
que se pretendem analisar tomam a forma de uma matriz A de valores
reais, em que o conjunto de valores Ai j representa a relação entre as linhas
i e as colunas j, e o objectivo é identificar subconjuntos de linhas/colunas
com determinadas propriedades de coerência num dado subconjunto de
colunas/linhas.
A maioria das aplicações de biclustering em Biologia/Medicina utiliza
dados de expressão genética. Contudo, as técnicas de biclustering podem
ser interessantes na análise de outro tipo de dados biológicos. Exemplo
disso é a aplicação destes algoritmos a dados da indústria farmacêutica,
dados nutricionais, entre outros.
Outras áreas aplicacionais de interesse e onde esta técnica tem sido
aplicada são: a pesquisa de informação (information retrieval) e a mineração
de texto (text mining); sistemas de recomendação (recommendation systems,
colaborative filtering), marketing aplicado e estudos de mercado; pesquisas
em bases de dados e mineração de dados (data mining).
3.6
Biclustering em Séries Temporais
Em séries temporais de expressão genética, as condições da matriz de dados correspondem a instantes temporais consecutivos. Dada a natureza
dos dados em análise, a tarefa de isolar actividades coerentes entre genes
num determinado subconjunto de condições pode ser simplificada pela
restrição a biclusters de colunas contíguas (instantes temporais consecutivos).
Esta restrição baseia-se na seguinte observação: à medida que o tempo
passa, os processos biológicos vão-se sucedendo, iniciando e terminando,
levando a um aumento ou decréscimo da actividade de conjuntos de genes, que podem ser identificados pela formação de biclusters com colunas
contíguas. Neste contexto, a activação de conjuntos de genes em determi-
Biclustering
28
nadas condições corresponde, em muitos casos, à activação de um dado
processo biológico.
Genes
Time
P1
P3
P2
P3
Figura 3.3: Três processos biológicos identificados em séries temporais de expressão
genética.
A Figura 3.3 ilustra a existência de três processos biológicos (P1, P2 e
P3) que originam um aumento da actividade de diferentes conjuntos de
genes, representados por três biclusters. Note-se que, embora as colunas
de cada bicluster sejam contíguas, as linhas podem-se encontrar em posições arbitrárias, aparecendo representadas como contíguas apenas por
conveniência. A sobreposição de biclusters também é permitida, isto é,
alguns genes podem contribuir para vários processos biológicos simultaneamente, assim como num determinado conjunto de instantes temporais
poderão ocorrer diversos processos.
As séries temporais de expressão genética são muitas vezes usadas no
estudo de sistemas biológicos dinâmicos e redes de regulação genética,
pois a sua análise pode fornecer elementos que potenciem uma melhor
compreensão dos sistemas biológicos [11]. Neste contexto, a identificação
de processos biológicos que levam à criação de biclusters, bem como a relação entre estes, é crucial para a identificação de mecanismos de regulação
genética e, mais ambiciosamente, para a inferência de redes de regulação
genética.
Capítulo 4
Trabalho Relacionado
O objectivo do presente capítulo é apresentar o trabalho relacionado com
a ferramenta desenvolvida. Apresentaremos uma breve referência aos algoritmos já implementados e integrados no contexto da análise de séries
temporais de expressão genética da aplicação, nomeadamente os algoritmos CCC-Biclustering [13], e-CCC-Biclustering [14] e CC-TSB-Biclustering
[23]. Incidiremos em particular sobre as novas extensões do algoritmo
CCC-Biclustering, que permitem actualmente extrair dois novos tipos de
biclusters: biclusters com padrões de expressão simétricos (anti-correlation)
e/ou desfasamento temporal entre os diferentes instantes temporais (timelags) em que se inicia o padrão de expressão dos genes que pertencem ao
bicluster.
Apresentaremos também a análise compreensiva dos algoritmos qClustering [9] e CDK-Means [19], realizada durante o segundo semestre,
e uma breve referência aos algoritmos de clustering hierárquico reimplementados em Java com base numa biblioteca de clustering em linguagem
C [5].
4.1
Biclustering para Séries Temporais
Os algoritmos seleccionados para integrar a ferramenta BiGGEsTS têm em
comum a sua aplicação à análise de dados de expressão genética cujas
condições correspondem a instantes temporais consecutivos e permitem,
no geral, encontrar biclusters cujos níveis de expressão dos subconjuntos de
genes que os compõem apresentam evoluções coerentes para os respectivos
29
30
Trabalho Relacionado
subconjuntos de condições. Os biclusters identificados pelos algoritmos
utilizados podem-se sobrepor, isto é, apresentar genes ou condições em
comum.
4.1.1
Algoritmos na aplicação
Dos algoritmos integrados na aplicação, dois tinham já sido implementados (CCC-Biclustering e e-CCC-Biclustering) e foram apenas integrados na
ferramenta, enquanto um terceiro foi implementado no desenvolvimento
do projecto (CC-TSB-Biclustering).
Algoritmos integrados
CCC-Biclustering
CCC-Biclustering é um algoritmo proposto recentemente [13] e permite
encontrar e identificar todos os biclusters máximos de colunas coerentes
contíguas em tempo linear no tamanho da matriz de expressão. Para isso é
efectuado o processamento de uma matriz de valores discretos, utilizando
técnicas de processamento de strings (cadeias de caracteres) baseadas em
árvores de sufixos. Cada padrão de expressão partilhado pelos genes
de um bicluster no seu subconjunto de instantes temporais consecutivos
representa um processo biológico potencialmente relevante. O seu funcionamento foi explicado de forma precisa no relatório do primeiro semestre
[7].
CCC-Biclustering com gene shifts
Dado que diferentes genes apresentam níveis de expressão diferentes que,
juntamente com a discretização, podem limitar a capacidade do algoritmo
CCC-Biclustering para descobrir todos os padrões de expressão relevantes,
Madeira e Oliveira propõem um algoritmo CCC-Biclustering com shifting
(translação) de padrões de expressão. Esta extensão do algoritmo permite
o shifting dos padrões de expressão genética k símbolos para cima e para
baixo, de forma a encontrar CCC-Biclusters máximos que não seriam encontrados devido aos diferentes níveis de expressão entre os genes. O valor
de k é, geralmente, um valor inteiro entre 1 e |Σ|, em que Σ é o conjunto
de símbolos, por ordem lexicográfica, usado para discretizar a matriz de
4.1 Biclustering para Séries Temporais
31
expressão original. Com esta extensão, o algoritmo CCC-Biclustering, cuja
complexidade inicial é O(|R||C|), passa a ter complexidade O(2|R||C||Σ|) no
pior caso.
CCC-Biclustering com padrões de expressão simétricos
Uma das novidades no algoritmo CCC-Biclustering é a possibilidade de
extracção de biclusters com genes com padrões de expressão simétricos (sign
changes), isto é, biclusters que agrupam genes que apresentam uma evolução
coerente, embora simétrica, do nível de expressão. Estes biclusters podem
ser considerados interessantes, na medida em que identificam genes que
apresentam um comportamento exactamente oposto quando confrontados
com as mesmas condições experimentais ou participando em processos
biológicos idênticos, tornando assim evidentes fenómenos de activação ou
repressão. A complexidade do algoritmo CCC-Biclustering com padrões
de expressão simétricos é O(2|R||C|) no pior caso.
CCC-Biclustering com atrasos
A segunda novidade no CCC-Biclustering é a integração, no mesmo bicluster, de genes que apresentam padrões de expressão semelhantes, mas
instantes iniciais distintos (time-lags). Este facto indicia que os vários genes
possuem diferentes tempos de resposta às condições experimentais produzindo, no entanto, um comportamento semelhante. Para permitir biclusters
com desfasamento temporal do padrão, o algoritmo CCC-Biclustering é estendido garantindo uma complexidade O(|R||C| + |R||C|2 ), O(|R||C|2 ) no pior
caso.
CCC-Biclustering com padrões de expressão simétricos e atrasos
As opções de padrões de expressão simétricos e atrasos podem ser utilizadas em simultâneo, gerando biclusters com ambas as características
acima descritas. A combinação destes algoritmos, dada a sua natureza,
representa um aumento considerável relativamente à complexidade do
algoritmo original, com O(2|R||C| + 2|R||C|2 ) no pior caso.
32
Trabalho Relacionado
e-CCC-Biclustering
As técnicas de discretização, bem como o ruído inerente à medição dos
dados das experiências com microarrays, podem limitar a capacidade do
algoritmo CCC-Biclustering para identificar padrões biologicamente relevantes. Para tentar ultrapassar este problema, Madeira e Oliveira propuseram um novo algoritmo, e-CCC-Biclustering [14], que permite a ocorrência
de um determinado número de erros no padrão de cada um dos genes do
CCC-Bicluster encontrado. Os biclusters encontrados são então designados
e-CCC-Biclusters, em que e é o número de erros permitido. Os erros podem, em geral, ser substituições de um determinado símbolo do padrão de
expressão por outros símbolos que constituem o alfabeto de discretização
(caso que corresponde a erros de medição), ou substituições restringidas
aos símbolos de discretização mais próximos na ordem lexicográfica (correspondentes a erros de discretização). A complexidade deste algoritmo é
polinomial no tamanho da matriz de expressão genética a processar.
e-CCC-Biclustering com erros restritos
O algoritmo e-CCC-Biclustering apresentado permite erros gerais, isto é,
substituições dos símbolos Aij do CCC-Bicluster Bk = (Ik , Jk ) por qualquer
símbolos do alfabeto Σ0j excepto Ai j . Este tipo de erros são particularmente relevantes para a identificação de erros de medição que ocorrem
durante as experiências com microarrays. Contudo, se estivermos interessados em identificar erros de discretização podemos considerar erros
restritos: substituições dos símbolos Ai j pelos símbolos lexicograficamente
mais próximos em Σ0j .
e-CCC-Biclustering com erros restritos e gene shifts
O gene shifting implementado no algoritmo e-CCC-Biclustering é, em tudo,
semelhante ao referido para o algoritmo CCC-Biclustering e pode ser combinado com com os erros restritos, permitindo aumentar, em muitos casos,
o número de e-CCC-Biclusters extraídos pelo algoritmo.
4.1 Biclustering para Séries Temporais
33
CC-TSB-Biclustering
O algoritmo CC-TSB-Biclustering [23], desenvolvido para séries temporais
de expressão genética, usa a média dos quadrados dos resíduos (MSR mean-squared residue) como medida de qualidade dos biclusters. Forçando
a MSR a diminuir até atingir um determinado valor considerado como
o valor máximo permitido, o algoritmo vai eliminando genes e instantes
temporais (condições) de acordo com a sua correlação no bicluster. Para
assegurar a coerência dos instantes temporais, apenas as condições inicial
e final são elegíveis para serem removidas. Como consequência, o número
de genes e o tamanho do intervalo de tempo são simultaneamente maximizados. A complexidade assimptótica do algoritmo CC-TSB-biclustering
é O(nK|R||C|), em que n é o número de biclusters a extrair pelo algoritmo
(definido a priori), K o número máximo de iterações para optimizar cada
bicluster e |R| e |C| os números de linhas e colunas da matriz, respectivamente.
4.1.2
Algoritmos analisados
Nesta secção são analisados dois algoritmos de biclustering para séries
temporais de expressão genética que não se encontram implementados
ou integrados na ferramenta desenvolvida no projecto, dado que as extensões do algoritmo CCC-Biclustering permitem obter os mesmos resultados
com complexidade inferior e também que, em casos específicos, o resultado
pretendido não corresponde aos objectivos da ferramenta, como verificaremos na nossa análise. Os algoritmos designam-se CDK-Means [19] e
q-Clustering [9].
CDK-Means e D-Miner
CDK-Means [19] [18] consiste num agrupamento (clustering) de biclusters
segundo um determinado critério de qualidade associado à restrição a
colunas contíguas (instantes temporais consecutivos e, portanto, intervalos
de tempo). Para tal, a técnica CDK-Means requer uma extracção prévia
de um conjunto de biclusters possivelmente interessantes, através de um
outro algoritmo, D-Miner [17]. Ambos se aplicam a dados de expressão
genética discretos obtidos a partir de valores reais com alfabetos de apenas
34
Trabalho Relacionado
dois símbolos (dados binários) e cujas condições correspondem a instantes
temporais sucessivos.
CDK-Means
A ideia essencial do CDK-Means é extrair clusters a partir de biclusters que
revelam associações locais fortes entre subconjuntos de genes e subconjuntos de condições (ver Algoritmo 1).
Assume para isso que um conjunto B de biclusters interessantes foi
extraído previamente pelo algoritmo de biclustering D-Miner sobre uma
matriz de expressão genética A de valores discretos obtida a partir de uma
matriz de expressão genética A0 de valores reais com um alfabeto binário
(de dois símbolos, por exemplo: {D, U}, {0, 1} , {A, B} ).
Assume também que o alfabeto está ordenado lexicograficamente. Denotando cada um dos biclusters extraídos por bk = (Rk , Ck ), (Rk ⊆ R, Ck ⊆ C)
e o descrevermos como um vector < rk >< ck >=< rk1 , ..., rkm >< ck1 , ..., ckn >
em que rk j = 1 se r j ∈ Rk (0 caso contrário) e ck j = 1 se c j ∈ Ck (0 caso
contrário). O objectivo consiste então em encontrar K clusters de biclusters
{P1 B , ..., PK B }(Pi B ⊆ B).
O centróide de um cluster de biclusters Pi B é definido por µi =< τi ><
γi >=< τi1 , ..., τim >< γi1 , ..., γin > em que τ e γ são os habituais componentes
do centróide, assim definidos:
1 X
1 X
rk j , γij = B
ck j
τij = B
|Pi | b ∈P B
|Pi | b ∈P B
k
i
k
i
Especificado o cálculo do centróide, pode-se então definir a distância
entre um determinado
bicluster e o centróide
do conjunto:
|ck ∪γi |−|ck ∩γi |
1 |rk ∪τi |−|rk ∩τi |
d(bk , µi ) = 2
+
|rk ∪τi |
ck ∪γi
Esta distância é a média das diferenças simétricas pesadas entre os
P
r +τi j
vários componentes do conjunto. Assume-se que rk ∩ τi = mj=1 a j k j 2 e
P r +τi j
rk ∪ τi = mj=1 k j 2 em que a j = 1 se rk j · τi j , 0, a j = 0 caso contrário.
Intuitivamente, a intersecção é igual à média entre o número de linhas
(genes) comuns e a soma dos seus pesos no centróide. A união é a média
entre o número de linhas e a soma dos seus pesos no centróide. Estas
medidas são definidas de forma semelhante para as colunas (condições)
da matriz de dados.
As linhas rk e, de forma semelhante, as colunas ck , são atribuídas a
um dos K clusters (denotado por i) para o qual τik , respectivamente γik ,
4.1 Biclustering para Séries Temporais
35
é máximo. Podemos permitir que as linhas (genes) e/ou colunas (condições) pertençam a mais do que um cluster controlando o tamanho da
parte sobreposta de cada cluster, através de um parâmetro definido pelo
utilizador.
Algoritmo 1: Algoritmo CDK-Means
Input: r, matriz de expressão genética de valores discretos (alfabeto
binário); B, colecção de biclusters em r; K, número de clusters a
extrair; MI, número máximo de iterações; δr , δc , valores limite
para controlo da sobreposição dos clusters
Output: Clusters de linhas (genes) e de colunas (condições)
µ1 , ..., µK , centróides iniciais dos clusters; k = 0
while centróides alterados e k < MI do
foreach bicluster c ∈ B do
atribuir c ao cluster C tal que d(c, µi ) é mínima
foreach cluster Ci do
calcular τi e γi
k=k+1
if sobreposição permitida then
foreach r j ∈ R do
atribuir r j a cada cluster Cri , tal que τij ≥ (1 − δr ) · max τij
foreach c j ∈ C do
atribuir c j a cada cluster Cci , tal que γi j ≥ (1 − δc ) · max γij
else
foreach r j ∈ R do
atribuir r j ao primeiro cluster Cri , tal que τi j é máximo
foreach c j ∈ C do
atribuir c j a cada cluster Cci , tal que γij é máximo
return {Cr1 , ..., CrK } e {Cc1 , ..., CcK }
D-Miner
O algoritmo D-Miner permite extrair biclusters a partir de matrizes com
dados de expressão genética do tipo referido no Capítulo 3. Considerando
uma matriz A de valores discretos, com um alfabeto binário (de dois símbolos) e os subconjuntos de linhas (genes) I ⊂ R e de colunas (condições)
J ⊂ C, os autores definem os seguintes conceitos [17]:
36
Trabalho Relacionado
Linguagem dos biclusters: L = LR × LC , em que LR = 2R (conjuntos de
linhas - genes) e LC = 2C (conjuntos de colunas - condições).
Conjunto de linhas (genes) comuns a um conjunto de colunas (condições): φ(I, A) = {r ∈ I|∀c ∈ J, (r, c) ∈ A}.
Conjunto de colunas (condições) comuns a um conjunto de linhas (genes): ψ(J, A) = {c ∈ J|∀r ∈ I, (r, c) ∈ A}.
Ligação de Galois: (φ, ψ) denota uma ligação de Galois entre I e J.
Fechos de Galois: os operadores de fecho de Galois são h = φ ◦ ψ e
h0 = ψ ◦ φ.
Frequência de um conjunto de linhas: |ψ(I, A)|.
Frequência de um conjunto de colunas: |φ(J, A)|.
Restrições sobre a frequência de linhas (genes): Consmin f req (A, γ, I) ≡
|ψ(I, A)|) ≥ γ e Consmax f req (A, γ0 , I) ≡ |ψ(I, A)| ≤ γ0 , em que γ e γ0
são valores limite para as frequências mínima e máxima, respectivamente.
Restrições sobre a frequência de colunas (condições): Consmin f req (A, γ, J) ≡
|φ(J, A)|) ≥ γ e Consmax f req (A, γ0 , J) ≡ |φ(J, A)| ≤ γ0 , em que γ e γ0 são valores limite para as frequências mínima e máxima, respectivamente.
Conjunto de linhas fechado: I é fechado se satisfaz a restrição Consclose (I, A) ≡
h(I, A) = I.
Conjunto de colunas fechado: J é fechado se satisfaz a restrição Consclose (J, A) ≡
h(J, A) = J.
1-rectângulo: (I, J) é um 1-rectângulo se e só se ∀r ∈ I e ∀c ∈ J, (r, c) ∈ A .
0-rectângulo: (I, J) é um 0-rectângulo se e só se ∀r ∈ I e ∀c ∈ J, (r, c) < A.
Conceito (formal): (I, J) é um conceito (formal) em A se I = ψ(I, A) e
J = φ(J, A). Um conceito (formal) não é mais do que um 1-rectângulo
máximo, isto é, um rectângulo em que todos os valores de expressão correspondem ao valor máximo do alfabeto de discretização da
matriz de expressão genética e cujos conjuntos de linhas e colunas
4.1 Biclustering para Séries Temporais
37
não podem ser aumentados sem originarem uma perda no número
de colunas e de linhas, respectivamente.
Transposição: a transposta de A é AT ⊆ R × C, em que (r, c) ∈ AT ≡ (r, c) ∈
A.
Propriedade (transposição): ψ(I, AT ) = φ(I, A), φ(J, AT ) = ψ(J, A), h(I, AT ) =
h0 (I, A) , h0 (J, AT ) = h0 (J, A) .
Relação de Especialização: temos uma relação de especialização (I1 , J1 ) ≤
(I2 , J2 ) se e só se I1 ⊆ I2 e J1 ⊆ J2 , em que (I1 , I2 ) e (J1 , J2 ) são biclusters
com linguagem L.
Monotonia: a restrição Cons é anti-monótona com respeito à ordem ≤
se e só se ∀α, β ∈ L : α ≤ β, Cons(β) ⇒ Cons(α). A restrição Cons
é monótona com respeito à ordem ≤ se e só se ∀α, β ∈ L : α ≤
β, Cons(α) ⇒ Cons(β).
Conceito (formal) frequente: o conceito (I, J) é frequente quando ConsI (A, σ1 , I)
se I ≥ σ1 ou Cons J (A, σ2 , J) se J ≥ σ2 . Estas restrições são ambas monótonas com respeito à ordem ≤ em L.
Baseados nestas definições, podemos agora explicar o funcionamento
do algoritmo D-Miner (ver Algoritmo 2). Numa primeira fase é criado um
conjunto H com todos os 0-rectângulos em A, isto é, todas as sequências
do primeiro símbolo do alfabeto da matriz discreta (sequências de 0 se o
alfabeto for {0, 1} ou de D se o alfabeto for {D, U}, por exemplo). Cada
sequência tem apenas uma linha (gene) e poderá ter uma ou mais colunas
(condições). Os elementos de H, 0-rectângulos, são também designados
cutters.
Após a construção de H, o algoritmo inicia a execução com a matriz
A, que vai dividindo sucessivamente com a aplicação dos cutters até que o
conjunto H fique vazio e que cada conjunto resultante da matriz A seja um
1-rectângulo (ver Algoritmo 3).
O conjunto H é definido da seguinte forma: ∀r ∈ R e ∀c ∈ C : (r, c) <
A, ∃(X, Y) de H : r ∈ X e c ∈ Y.
Um elemento (a, b) de H é usado para dividir uma submatriz (X, Y) se
a ∩ X , ∅ e b ∩ Y , ∅.
38
Trabalho Relacionado
Algoritmo 2: Algoritmo D-Miner
Input: A, matriz com n linhas (genes) e m colunas (condições); R, o
conjunto de genes; C, o conjunto de condições; Consr e Consc ,
as restrições de monotonia em R e C, respectivamente
Output: Q, o conjunto de conceitos que satisfazem Consr e Consc
HL ← vazio()
H é calculado a partir de A
Q ← divisao((R, C), H, 0, HL )
return Q
Na divisão de uma submatriz (X, Y) por um 0-rectângulo de H, (a, b),
as submatrizes resultantes são as seguintes: filho esquerdo - (X\a, Y), filho
direito - (X, Y\b).
Antes da divisão de (X, Y) por (a, b) nos dois subconjuntos (X\a, Y) e
(X, Y\b), dois tipos de restrições devem ser verificadas: as restrições de
monotonia e a restrição de corte à esquerda. A maximização está implícita
neste processo de divisão. O algoritmo D-Miner é um método de pesquisa
primeiro em profundidade (depth-first search) que gera biclusters ordenados
pela relação ≤. As restrições de monotonia em R e C são usadas para reduzir
o espaço de procura: se X, Y não satisfaz uma restrição de monotonia
Cons, então nenhum dos seus filhos satisfaz Cons e é desnecessário aplicar
a divisão a (X, Y). A restrição Cons é a conjunção de uma restrição de
monotonia Consr em R com uma restrição de monotonia Consc em C.
Propriedade (conceito/1-rectângulo máximo): Seja (X, Y) uma folha da
árvore e HL (X, Y) o conjunto de cutters associado aos ramos esquerdos
do caminho desde a raiz até (X, Y). (X, Y) é um conceito se e só se Y
contém pelo menos uma condição de cada conjunto de condições em
HL (X, I).
Consideremos, como exemplo, a matriz de expressão genética apresentada na Tabela 4.1.
A Figura 4.1 apresenta um exemplo de aplicação do algoritmo D-Miner
sobre a matriz de expressão genética de valores discretos da Tabela 4.1,
cujo alfabeto binário é {D, U}. As submatrizes representadas em caixas de
texto correspondem aos 0-rectângulos, elementos do conjunto H.
Na Figura 4.1 podemos ver que (r2 , c2 ) e (r3 , c1 c2 ) do conjunto H não
são usados para dividir a submatriz (r1 r2 r3 , c3 ), dado que {c2 } ∩ {c3 } = ∅ e
4.1 Biclustering para Séries Temporais
39
Algoritmo 3: Algoritmo Divisão
Input: (X, Y), uma submatriz de 2R × 2C elementos; H, a lista de
cutters; i, a profundidade da iteração; HL , o conjunto de
cutters precendentes nos cortes à esquerda; Consr e Consc , as
restrições de monotonia em R e C, respectivamente
Output: Q, o conjunto de conceitos que satisfazem Consr e Consc
(a, b) ← H[i], centróides iniciais dos clusters
if i ≤ |H| − 1 then
if (a ∩ X = ∅) ou (b ∩ Y = ∅) then
Q ← Q ∪ divisao((X, Y), H, i + 1, HL )
else
if Consr (A, σ1 , X\a) for satisfeita then
HL ← HL ∪ (a, b)
Q ← Q ∪ divisao((X\a, Y), H, i + 1, HL )
HL ← HL \(a, b)
if Consc (A, σ2 , Y\b) for satisfeita e ∀(a0 , b0 ) ∈ HL , b0 ∩ Y\b , ∅ then
Q ← Q ∪ divisao((X, Y\b), H, i + 1, HL )
else
Q ← (X, Y)
return Q
{c1 c2 } ∩ {c3 } = ∅. O conjunto de biclusters extraído da matriz da Tabela 4.1 é:
{(r1 r2 r3 , c3 ), (r2 , c1 c3 ), (∅, c1 c2 c3 ), (r3 , c3 ), (r2 r3 , c3 )}.
Verificamos que (r3 , c3 ) ≤ (r1 r2 r3 , c3 ) e (r2 r3 , c3 ) ≤ (r1 r2 r3 , c3 ), pelo que os
1-rectângulos (r3 , c3 ) e (r2 r3 , c3 ) não são conceitos formais, isto é, não são
máximos.
Considerações sobre o algoritmo CDK-Means/D-Miner
O algoritmo D-Miner para extracção de biclusters máximos potencialmente
interessantes possui, claramente, uma complexidade exponencial no tamanho da matriz de expressão genética.
No entanto, e apesar de tal complexidade, o algoritmo considera como
bicluster (designado pelos autores como 1-rectângulo) apenas um subconjunto de linhas (genes) e colunas (condições) cujos elementos apresentam
na sua totalidade o segundo símbolo do alfabeto (1 no caso do alfabeto
{0, 1} ou U no caso do alfabeto {D, U}, por exemplo). Tais submatrizes,
40
Trabalho Relacionado
r1
r2
r3
c1
D
U
D
c2
D
D
D
c3
U
U
U
Tabela 4.1: Matriz de expressão genética discretizada com um alfabeto binário {D, U}.
Figura 4.1: Aplicação do algoritmo D-Miner sobre a matriz de expressão genética de
valores discretos representada na Tabela 4.1.
embora possam ser interessantes, são apenas uma parte dos biclusters existentes na matriz, uma vez que os padrões de expressão que procuramos
podem conter todos os símbolos do alfabeto, isto é, interessam-nos tanto
os genes que possuem um valor de expressão mais baixo como os que
possuem um valor mais elevado para uma dada condição experimental,
pois estes valores são indicativos da inibição ou activação do gene nessa
condição, respectivamente, e permitem estabelecer uma sucessão de variação da expressão genética no tempo, acompanhando os diversos processos
biológicos que se vão sucedendo nas células em estudo.
O algoritmo D-Miner permite extrair todos os biclusters máximos de ge-
4.1 Biclustering para Séries Temporais
41
nes activados em determinadas condições experimentais. Dada a natureza
e especificação do algoritmo, os biclusters resultantes não têm garantida
a propriedade de condições sucessivas, isto é, instantes temporais consecutivos. Este aspecto é colmatado pela introdução da restrição a colunas
contíguas no algoritmo CDK-Means. No entanto, mais uma vez, o resultado deste algoritmo não serve os nossos propósitos, uma vez que devolve
clusters de linhas (genes) e colunas (condições) formados a partir dos biclusters extraídos pelo algoritmo D-Miner.
A solução seria uma implementação do algoritmo D-Miner com a introdução da restrição a colunas contíguas e uma alteração profunda que
permitisse extrair subconjuntos de linhas e colunas compostos pelos dois
símbolos do alfabeto da matriz discreta. Tais operações iriam, por um
lado, descaracterizar completamente o algoritmo original e, por outro, aumentar a sua complexidade. Dado que esta é originalmente exponencial,
a implementação deste algoritmo perde o interesse do nosso ponto de
vista, uma vez que possuímos actualmente um algoritmo de biclustering
de complexidade linear no tamanho da matriz de expressão genética: o
CCC-Biclustering [13].
q-Clustering
O algoritmo q-Clustering tem como objectivo a extracção de biclusters, isto
é, subconjuntos de genes que possuem um padrão de expressão coerente
em determinados subconjuntos de condições. Estes biclusters são extraídos
a partir de q-clusters identificados por um processo específico. Numa fase
posterior, o algoritmo identifica co-regulações de activação e inibição entre
os biclusters extraídos, isto é, biclusters cuja actividade dos genes pode ser
activadora ou inibidora da actividade dos genes de outros biclusters.
FASE 1: Transformação da matriz de expressão genética
O q-Clustering decorre em três passos essenciais. Num primeiro momento a matriz de expressão genética com valores reais, A0 , é transformada
numa matriz de valores discretos, A, com um alfabeto de 3 símbolos (por
exemplo: {−1, 0, 1}, {D, N, U}, {A, B, C}) ordenados lexicograficamente. Denotaremos o alfabeto por α e os seus três símbolos por α1 , α2 e α3 . A
matriz resultante representa a variação simbólica dos valores de expressão
da população de genes da experiência biológica entre condições (instantes
temporais) sucessivas (ver Tabelas 4.2 e 4.3). O facto de a matriz resultante
42
Trabalho Relacionado
representar variações entre instantes temporais faz com que possua menos
uma coluna do que a matriz original.
G2163
G1223
T1
−0.44
−1.51
T2
−0.44
−1.57
T3
0.08
−1.35
T4
0.35
0.04
T5
0.26
1.30
T6
0.17
1.15
T7
−0.46
0.94
T8
−0.13
−0.08
T9
−0.05
−0.13
T10
−0.36
−0.72
Tabela 4.2: Matriz de expressão genética original (valores de expressão reais).
G2163
G1223
T1 T2
N
N
T2 T3
U
N
T3 T4
U
U
T4 T5
N
U
T5 T6
N
N
T6 T7
D
N
T7 T8
N
D
T8 T9
N
N
T9 T10
D
D
Tabela 4.3: Matriz de valores discretos (obtida a partir da matriz original da Tabela 4.2).
Representa as variações dos valores de expressão genética dos genes da experiência entre
os sucessivos instantes temporais. Alfabeto: {D, N, U}
FASE 2 : Extracção de q-clusters
A segunda fase do algoritmo consiste na extracção dos q-clusters que
contêm informação sobre os subconjuntos de genes que apresentam um
padrão de expressão semelhante em q condições sucessivas. O objectivo
principal deste passo é encontrar genes que partilham subsequências idênticas de comprimento q − 1, em que q é um parâmetro definido pelo utilizador (ver Tabela 4.4). Dado que cada elemento da matriz de expressão tem
apenas 3 valores possíveis (os 3 símbolos distintos do alfabeto discreto), o
número máximo de q-clusters que podem ser encontrados é 3q−1 .
Cada q-cluster tem um identificador único, designado q-clusterID, gerado da seguinte forma: Seja P = {p[1], p[2], ..., p[q − 1]} um padrão de
expressão; p[i] = α1 , α2 ou α3 ∀i ∈ [1, q − 1].

0 se p[i] = α2



1 se p[i] = α3
Seja f (p[i]) = 


 2 se p[i] = α1
Pq−1
O q-clusterID para o padrão P é: q-clusterID(P) = i=1 f (p[i])3q−1−i .
A extracção dos q-clusters processa-se da seguinte forma: para cada linha (gene) da matriz A, aplica-se uma janela deslizante de amplitude q − 1.
As várias substrings de comprimento q−1 são analisadas individualmente,
com o cálculo do respectivo q-clusterID e a introdução do par (geneID, st)
4.1 Biclustering para Séries Temporais
Padrão
...
NNUUNN
...
NNDNND
...
NUUNND
...
UNNDNN
UNNDND
...
UUNNDN
...
DNDUND
q-clusterID
...
36
...
56
...
110
...
261
263
...
326
...
551
43
Pares (geneID, st)
...
(1223, 1)
...
(2163, 1)
...
(2163, 1)(1223, 2)
...
(2163, 3)
(2163, 4)
...
(2163, 2)(1223, 3)
...
(580,15) (679,16) (836,15) (906,17) (1308,16) (1518,17)
(1527,16) (1622,16) (1681,15) (1811,17) (1875,16)
(2045,16) (2704,17) (4448,16) (4516,15) (5222,16)
(5535,17) (5758,17) (6049,16)
Tabela 4.4: q-clusters extraídos pelo algoritmo q-Clustering sobre a matriz de expressão
da Tabela 4.3 com q = 7.
no q-cluster correspondente. O geneID é o identificador do gene e st representa o instante temporal inicial da substring de comprimento q − 1 (ver
Algoritmo 4).
Análise de complexidade do algoritmo q-Clustering
A determinação do q-clusterID tem uma complexidade O(q − 1), dada a
necessidade de percorrer todos os elementos da janela de tamanho q − 1
para efectuar o cálculo.
O procedimento de inserção do par r, st num q-cluster com um determinado q-clusterID considera-se constante, O(k), pois pode ser implementado
com estruturas de dados que permitem inserções, remoções e pesquisas
em tempo constante (como uma hash table, por exemplo).
O deslizamento da janela de amplitude q − 1 pelas várias posições
possíveis de uma determinada linha da matriz de dados apresenta uma
complexidade (|C| − q + 2)(q − 1 + k). No pior caso temos que q = |C|
+1ea
2
2
complexidade pode simplificar-se para O(q ).
44
Trabalho Relacionado
Algoritmo 4: Algoritmo q-Clustering (fase 2: extracção de q-clusters)
Input: A, matriz de valores discretos (variations betweeen time-points 3 símbolos); R, C, |R| e |C|, linhas, colunas, número de linhas e
número de colunas de A, respectivamente; q, tamanho do
padrão dos q-clusters a extrair pelo algoritmo
Output: q-clusters com padrão de q condições consecutivas
qClusters = ∅
foreach r ∈ R do
st = 0
while st ≤ |C| − (q − 1) do
i = st
qClusterID = 0
while i < st + (q − 1) do
qClusterID = qClusterID + f (A[i]) × 3q−1−i−st
i=i+1
qClusters = inserir(qClusters, (r, st), qClusterID)
st = st + 1
return qClusters
A iteração sobre as linhas da matriz de expressão genética, englobando
todos os passos referidos anteriormente, revela uma complexidade |R|(|C|−
q + 2)(q − 1 + k). Novamente para o pior caso, a complexidade assimptótica
é O(|R|q2 ).
O Algoritmo 4 permite apenas extrair os q-clusters com um determinado valor de q, isto é, da sua aplicação resultam apenas q-clusters com
padrão de expressão de q − 1 colunas consecutivas. O nosso objectivo é
a obtenção de q-clusters para todos os valores possíveis de q, dado que
nos interessam todos os padrões de expressão possivelmente partilhados
por grupos de genes, independentemente do número de condições que
lhes correspondem. Devido a esta característica, é necessário acrescentar
um passo ao algoritmo original que nos permita repetir o procedimento
especificado no Algoritmo 4 para valores de q desde 2 (com q = 2 os padrões de expressão encontrados têm um comprimento de 1 coluna que,
dada a discretização utilizada, corresponde a duas condições - instantes
temporais - da matriz de expressão original; eliminamos assim à partida os
q-clusters com apenas uma condição) até ao número de condições |C|. Este
P
ciclo iterativo apresenta uma complexidade |C|
q=2 |R|(|C| − q + 2)(q − 1 + k).
4.1 Biclustering para Séries Temporais
45
Simplificando a expressão para o pior caso, podemos considerar como
complexidade assimptótica O(|R||C|2 ).
FASE 3 : Extracção dos biclusters e pesquisa de co-regulações de
activação e inibição
O último passo do algoritmo q-Clustering engloba a extracção dos biclusters a partir dos q-clusters e a pesquisa de co-regulações de activação e
inibição entre os biclusters extraídos.
A tarefa de extracção dos biclusters exige que os pares (geneID, st) sejam ordenados pelo instante inicial st para que os que possuem a mesma
condição inicial sejam agrupados. De acordo com as características de
um q-cluster, todos os pares (geneID, st) com o mesmo instante temporal
inicial partilham o mesmo padrão de expressão para as mesmas condições
(instantes temporais), isto é, constituem um bicluster (ver Tabela 4.5).
Instante Inicial
15
16
17
Identificadores dos genes
580 836 1681 4516
679 1308 1527 1622 1875 2045 4448 5222 6049
906 1518 1811 2704 5535 5758
Tabela 4.5: Biclusters de instantes iniciais 15, 16 e 17 identificados no q-cluster 551 da
Tabela 4.4 com o padrão DNDUND.
A identificação de co-regulações de activação entre os biclusters extraídos é também um passo bastante simples e intuitivo. Dadas as características dos q-clusters, todos os biclusters extraídos de um mesmo q-cluster têm
exactamente o mesmo padrão de expressão, diferindo apenas na condição
inicial. Este facto permite que a simples comparação dos instantes temporais iniciais dos vários biclusters de um determinado q-cluster nos revele
que biclusters podem ser potencialmente activados por outros biclusters,
isto é, quais os biclusters que, tendo o mesmo padrão de expressão que
outros, tendem a revelá-lo mais tardiamente.
As co-regulações de inibição exigem, num primeiro momento, a pesquisa de q-clusters com padrões de expressão simétricos. A tarefa seguinte
consiste em comparar as condições iniciais dos biclusters dos q-clusters com
padrão simétrico. Se um bicluster pertencente a um dos q-clusters possui
um instante temporal inicial posterior ao de um bicluster de um q-cluster
com um padrão de expressão simétrico, considera-se que este bicluster é
inibido por aquele. Os q-clusters 551 e 289 apresentados nas Tabelas 4.5 e
46
Trabalho Relacionado
4.6, respectivamente, possuem padrões de expressão simétricos, pelo que
o bicluster com instante inicial 14 do q-cluster 289 (Tabela 4.6) pode ser considerado inibidor do bicluster de instante inicial 17 do q-cluster 551 (Tabela
4.5) com um intervalo (time-lag) de 3 instantes temporais, por exemplo.
Instante Inicial
10
14
15
Identificadores dos genes
868 968 1254 1434 1609 1973 2256 2330 4064 5733
3962 4210 4378 5415 6118
320 321 344 419 1699 6147
Tabela 4.6: Biclusters de instantes iniciais 10, 14 e 15 identificados no q-cluster 289 da
Tabela 4.4 com o padrão UNUDNU.
Considerações sobre o algoritmo q-Clustering
A análise do algoritmo q-clustering revelou a existência de três fases distintas e independentes, que proporcionam uma integração completa no
modelo conceptual já desenvolvido e que se encontra implementado na
aplicação BiGGEsTS. A primeira fase consiste num pré-processamento da
matriz de expressão genética em que se aplica uma transformação dos dados reais em dados discretos, com um alfabeto três símbolos (tipicamente
{D, N, U}), representando as variações do valor de expressão genética entre
condições (instantes temporais) consecutivas (variations between time-points.
Posteriormente, a extracção dos q-clusters associada à identificação dos
biclusters consiste na aplicação da técnica de biclustering. Como demonstrámos anteriormente, a complexidade da extracção dos q-clusters utilizando
o algoritmo indicado pelos autores é O(|R||C|2 ). A identificação dos biclusters a partir dos q-clusters extraídos acrescenta ainda algum tempo de
processamento adicional devido à necessidade de ordenação dos pares
(geneID, st) em cada q-cluster. No entanto, este passo pode ser evitado
trocando a ordem das iterações sobre as linhas da matriz e da janela de
comprimento q − 1 nas linhas, isto é, processar as janelas de igual instante inicial em todas as linhas da matriz e só depois passar para a janela
seguinte. Desta forma, aquando da conclusão do algoritmo, os pares
(geneID, st) estarão automaticamente ordenados.
Dado que existe uma alternativa ao algoritmo dos autores cuja complexidade é apenas linear no tamanho da matriz de expressão, O(|R||C|),
consideramos que a implementação deste algoritmo não é vantajosa para
4.2 Algoritmos de Clustering Hierárquico
47
a aplicação.A última fase do algoritmo q-Clustering foi identificada na
nossa análise como uma fase de pós-processamento, na qual são identificadas co-regulações de activação e inibição entre os biclusters extraídos
previamente. Estas técnicas foram integradas no CCC-Biclustering, dando
origem ao que anteriormente designámos por biclusters com padrões simétricos (sign changes) e atrasos (time-lags).
4.2
Algoritmos de Clustering Hierárquico
Os algoritmos de clustering hierárquico foram reimplementados em Java a
partir de uma biblioteca de clustering em linguagem C pertencente à ferramenta Cluster 3.0, um software de clustering livre e open source que inclui
diversos algoritmos de clustering, nomeadamente clustering hierárquico e
K-Means.
A técnica hierárquica consiste numa série de partições sucessivas a
partir de um cluster inicial que contém todos os objectos até se obter um
determinado número de clusters. Os métodos de clustering hierárquico
subdividem-se em métodos aglomerativos, que procedem à fusão dos vários objectos em grupos, e métodos divisivos, que separam os objectos
sucessivamente em agrupamentos cada vez mais pequenos.
De uma forma geral, um algoritmo aglomerativo produz um conjunto
de partições, Pn , Pn−1 , ..., P1 dos dados. A partição Pn contém n clusters
individuais, enquanto a partição P1 consiste num único cluster contendo
todos os n casos. Em cada passo, o método aglomera os dois clusters mais
próximos (mais semelhantes). As diferenças entre os métodos utilizados
devem-se, essencialmente, às diversas formas de definir a distância (ou
similaridade) entre os clusters. Os algoritmos de clustering hierárquico no
BiGGEsTS podem ser aplicados com as seguintes medidas de similaridade:
distância baseada na correlação, na correlação de Pearson, correlação absoluta, correlação absoluta de Pearson, correlação de Spearman ou correlação
de Kendall, e distância euclideana ou cityblock. Não apresentaremos as suas
definições, dado que são técnicas conhecidas e se situam fora do âmbito
do presente relatório.
As técnicas implementadas, que passaremos a explicar, pertencem à
classe aglomerativa e designam-se: single-linkage, complete-linkage, averagelinkage e centroid-linkage clustering.
48
4.2.1
Trabalho Relacionado
Single-linkage clustering
Também conhecida como a técnica nearest neighbor, a sua característica
principal é o facto de a distância entre os clusters ser definida como a
distância entre o par de objectos mais próximo.
A distância entre dois clusters, r e s, define-se da seguinte forma:
D(r, s) = min{d(i, j) : i ∈ r, j ∈ s}
A distância é calculada para todos os pares de objectos (i, j), em que o
objecto i pertence ao cluster r e o objecto j pertence ao cluster s. O valor
mínimo das distâncias é a distância entre os clusters r e s, isto é, a distância
entre dois clusters é dada pelo comprimento da ligação mais próxima entre
eles.
Em cada passo do algoritmo, os dois clusters r e s para os quais a
distância D(r, s) é mínima são agrupados.
4.2.2
Complete-linkage clustering
O método complete-linkage, ou farthest neighbor é o oposto do anterior. A
distância entre os clusters é definida como a distância entre o par de objectos
mais distante (um de cada cluster).
A distância D(r, s) é assim definida: D(r, s) = max{d(i, j) : i ∈ r, j ∈ s}
A distância é calculada para todos os pares de objectos (i, j), em que o
objecto i pertence ao cluster r e o objecto j pertence ao cluster s. O valor
máximo das distâncias é a distância entre os clusters r e s, isto é, a distância
entre dois clusters é dada pelo comprimento da ligação mais distante entre
eles. Em cada passo do algoritmo, os dois clusters r e s para os quais a
distância D(r, s) é máxima são agrupados.
4.2.3
Average-linkage clustering
Neste tipo de clustering hierárquico, a distância entre dois clusters é definida
como a média das distâncias entre todos os pares de objectos, em que cada
par é constituído por um objecto de cada um dos clusters:
rs
D(r, s) = (NTr ·N
s)
Em que Trs é a soma de todas as distâncias entre os pares de objectos
dos clusters r e s. Nr e Ns são os tamanhos dos clusters r e s, respectivamente.
Em cada iteração do algoritmo average-linkage, os clusters r e s para os
quais a distância D(r, s) é mínima são agrupados.
4.2 Algoritmos de Clustering Hierárquico
4.2.4
49
Centroid-linkage clustering
Nesta técnica, os clusters formados são representados pelos seus valores
médios para cada variável, isto é, o seu vector intermédio. A distância
entre clusters é definida como a distância entre os vectores intermédios dos
mesmos.
Os dois clusters, r e s, são agrupados de tal forma que, após a fusão, a
distância média entre os pares de objectos com o novo cluster (constituído
pelos dois clusters originais) é mínima.
Designemos o novo cluster formado pelos clusters r e s por t. A distância
D(r, s) entre os clusters r e s é definida por:
D(r, s) = average{d(i, j) : i ∈ t, j ∈ t}
Em cada iteração, os clusters r e s para os quais a distância D(r, s) é
mínima, são agrupados. Neste caso, os dois clusters são agrupados de tal
forma que o novo cluster, por eles formado, apresente distâncias mínimas
entre os seus pares de objectos.
Capítulo 5
A Ferramenta BiGGEsTS
A aplicação desenvolvida no projecto designa-se BiGGEsTS (Biclustering
Gene Expression Time-Series) e consiste numa ferramenta de análise, manipulação e visualização de séries temporais de expressão genética. As suas
funcionalidades principais envolvem a manipulação de diversos conjuntos de dados de expressão genética em simultâneo, a aplicação de diversos
algoritmos de pré-processamento (filtragem de genes, preenchimento de
valores em falta, normalização, smoothing e discretização), algoritmos de
biclustering e cálculo de funções biológicas significativas para análise dos
dados. Permitem ainda a visualização dos dados ao longo de todo o processo de manipulação, segundo diversos tipos de representações gráficas
que serão referidas posteriormente, assim como uma análise detalhada dos
resultados.
5.1
Modelação
Na modelação da ferramenta BiGGEsTS serão apresentadas:
• A análise de requisitos e desenho da aplicação, apoiada pelos respectivos diagramas de casos.
• A análise de estrutura, em conjunto com os diagramas de classes.
• A análise da arquitectura, suportada pelo diagrama que relaciona os
vários pacotes internos e externos utilizados na implementação das
funcionalidades pretendidas.
51
52
A Ferramenta BiGGEsTS
As ferramentas utilizadas na modelação do BiGGEsTS foram: o Visual
Paradigm for UML 6.0 Enterprise Edition e o Visual Paradigm Smart Development Environment 4.0 for JBuilder Enterprise Edition (ambos cópias
de avaliação). A escolha foi motivada pelo conhecimento prévio das referidas aplicações e das suas potencialidades, bem como ao seu perfeito
enquadramento com o IDE utilizado na implementação.
5.1.1
Análise de Requisitos e Desenho
A análise de requisitos para a ferramenta BiGGEsTS teve início com o
levantamento de potencialidades e problemas das diversas ferramentas
disponíveis para análise de dados de expressão genética, sobre o qual foi
apresentada uma síntese no relatório do primeiro semestre.
As decisões sobre as funcionalidades da aplicação a desenvolver foram
tomadas numa primeira fase de análise de requisitos e posteriormente revistas ao longo de todo o processo de desenvolvimento, numa tentativa de
produzir um software de utilização intuitiva e agradável, procurando uma
integração fluida das funcionalidades disponibilizadas. Os diagramas e
funcionalidades apresentados neste relatório são os que correspondem à
ferramenta actual, após as alterações sofridas ao longo do segundo semestre.
Funcionalidades principais
Para uma utilização intuitiva, todos os dados carregados na aplicação são
apresentados numa estrutura hierárquica em árvore. A selecção de um
determinado nodo da árvore de dados despoleta automaticamente o reconhecimento do objecto nele contido e a apresentação das funcionalidades
que lhe correspondem. As funcionalidades que não podem ser aplicadas ao objecto identificado permanecem visíveis, mas são desactivadas,
evitando assim mensagens de erro desnecessárias para o utilizador.
As funcionalidades principais da aplicação, apresentadas no diagrama
de casos da Figura 5.1, permitem:
• Carregar dados de expressão genética sob a forma de ficheiros de
texto, nos quais os dados aparecem dispostos tal como numa tabela,
separados por um determinado delimitador: os nomes dos genes
são incluídos na primeira coluna, os nomes das condições (instantes
5.1 Modelação
53
Figura 5.1: Diagrama de casos das funcionalidades principais da ferramenta BiGGEsTS.
temporais) na primeira linha e cada um dos restantes valores, correspondente ao nível de expressão de um determinado gene numa
determinada condição, na posição da tabela que lhe corresponde; a
tabela de valores pode ter alguns valores em falta, que deverão ser
tratados antes de qualquer outro processamento sobre os dados de
expressão.
• Pré-processar matrizes de dados previamente carregadas.
• Aplicar um algoritmo de biclustering, e correspondente análise de
54
A Ferramenta BiGGEsTS
funções biológicas relevantes, a uma determinada matriz; do algoritmo de biclustering resulta sempre um grupo de biclusters que, por
sua vez, é constituído por vários biclusters individuais.
• Analisar ou visualizar os dados de expressão genética contidos numa
matriz, bicluster ou grupo de biclusters.
• Pós-processar grupos de biclusters extraídos pelos algoritmos de biclustering.
• Gravar e restaurar sessões.
• Terminar a sessão actual, guardando ou não os seus dados para
posterior utilização.
Módulo de carregamento de dados (Load dataset)
O carregamento de dados de expressão genética, cujo diagrama de casos
é ilustrado na figura 5.2, implica, num primeiro momento, a indicação do
caminho para o ficheiro de texto que contém os referidos dados (a selecção
do ficheiro pode ser feita recorrendo à navegação no sistema de ficheiros
local).
Após este passo, o sistema analisa os dados contidos no ficheiro e
apresenta-os numa tabela colorida, assinalando a cores distintas: as linhas
que contêm nomes (possivelmente os nomes das condições), as colunas
que contêm nomes (possivelmente os nomes dos genes) e todos os valores
de expressão que serão integrados na matriz de dados caso o carregamento
seja concretizado. Nos casos em que a aplicação não encontra os nomes
dos genes ou das condições, é oferecida a possibilidade de gerar essa(s)
mesma(s) linha(s) ou coluna(s) de forma automática ou seleccionar a primeira linha/coluna do ficheiro como a que contém os nomes pretendidos.
Seguidamente o utilizador deve:
• Seleccionar a linha que contém os nomes das condições, de entre as
várias identificadas automaticamente pelo sistema;
• Seleccionar o identificador dos genes, que indica o tipo de identificador utilizador para designar os genes no ficheiro de dados; por
omissão, o sistema pressupõe que os identificadores correspondem
aos gene IDs utilizados pela Gene Ontology; se os identificadores da
5.1 Modelação
55
Figura 5.2: Diagrama de casos do módulo de carregamento de dados.
experiência forem distintos dos referidos, o utilizador deverá retirar
a selecção da check box File contains gene IDs e indicar o caminho para
o ficheiro de conversão, que contém a correspondência entre os identificadores no ficheiro e os respectivos gene IDs, para que o sistema
possa fazer a conversão; é também necessário indicar qual a coluna
que contém os nomes dos genes, de entre as várias identificadas automaticamente; caso os nomes dos genes não possam ser convertidos,
por falta de ficheiro de conversão ou erro na própria transformação, a
análise de funções biológicas relevantes (posteriormente) não poderá
ser realizada;
56
A Ferramenta BiGGEsTS
Figura 5.3: Diagrama de casos da selecção do organismo, no módulo de carregamento de
dados.
• Seleccionar o tipo de nucleótidos utilizado na medição do nível de
expressão genética (cDNA ou oligonucleótidos, são os tipos disponíveis);
• Seleccionar o organismo (diagrama de casos da Figura 5.3) ao qual
os dados se referem e que possibilitará, posteriormente, a análise de
funções biológicas relevantes através de uma comparação entre os genes analisados e os genes já conhecidos e anotados para o organismo
específico;
• Decidir aplicar ou não uma transformação logarítmica aos dados de
expressão; na maioria das vezes, os dados de expressão contidos nos
ficheiros representam já a transformação logarítmica dos valores originais medidos na experiência; o utilizador deverá conhecer os dados
5.1 Modelação
57
que pretende carregar, de modo a que a análise posterior produza os
resultados esperados.
Todas estas selecções possuem valores pré-definidos, que o utilizador
poderá aproveitar, sobretudo se não for conhecedor da área (a selecção do
organismo afecta somente a análise de funções, por exemplo) ou se desejar
apenas testar a aplicação.
Finalmente, após a selecção de todos os parâmetros, o utilizador deverá
premir o botão Load que se encontra na parte inferior do painel. Os dados
são carregados e a aplicação apresenta então a matriz de expressão genética
colorida. Se existirem no sistema local ficheiros da Gene Ontology com as
anotações correspondentes ao organismo em causa, a aplicação executa em
simultâneo a análise de funções sobre os genes. O resultado desta análise
poderá ser posteriormente acedido através das abas Analyzing, Function e
Table.
Módulo de Pré-Processamento
O diagrama de casos apresentado na Figura 5.4 contém as opções de
pré-processamento de dados de expressão genética. Só são aceites para
pré-processamento matrizes originais, provenientes do carregamento directo dos dados de um ficheiro de texto, ou matrizes pré-processadas (que
não tenham sido sujeitas a técnicas de discretização). Os tipos de préprocessamento disponíveis são:
• Filtragem de genes: acessível (e obrigatória) apenas para matrizes de
dados originais ou pré-processadas (de valores reais) que possuam
valores em falta. É possível filtrar todos os genes que possuam valores
em falta ou apenas os genes com uma percentagem de valores em falta
superior a uma determinada percentagem estipulada pelo utilizador.
• Preenchimento de valores em falta (missing values): acessível (e obrigatório) para matrizes (originais ou pré-processadas) que possuam
valores em falta, quando conjugado com a opção do utilizador pela
filtragem de genes com uma percentagem de valores em falta superior a uma determinada percentagem. O preenchimento de valores
em falta pode ser efectuado com um valor específico indicado pelo
utilizador, com o valor médio da linha ou ainda com a média dos
valores de expressão dos k-vizinhos mais próximos, em que o valor
de k é introduzido pelo utilizador.
58
A Ferramenta BiGGEsTS
Figura 5.4: Diagrama de casos do módulo de pré-processamento.
• Normalização dos dados da matriz: aplicada por linha ou em toda a
matriz. O objectivo é que a média nas linhas/matriz seja 0 e o desviopadrão das linhas/matriz seja 1 ou que os valores das linhas/matriz
tenham determinada média e determinado desvio-padrão definidos
pelo utilizador.
• Smoothing: aplicado a todos os valores da matriz, utilizando uma
janela de tamanho w definido pelo utilizador e um conjunto de pesos calculado automaticamente. O algoritmo de smoothing funciona como um filtro passa-baixo, eliminando valores estranhos facilmente identificáveis como erros experimentais. Nestes casos a ideia
é aproximá-los dos valores dos w − 1 vizinhos mais próximos de
5.1 Modelação
59
forma ponderada pelos pesos (quanto mais próximo o vizinho, mais
relevante é o seu valor para o cálculo).
• Discretização: estão disponíveis para selecção 15 técnicas distintas.
O utilizador poderá seleccionar qualquer uma delas, introduzindo
o parâmetro de discretização exigido (no caso de técnicas que usam
parâmetros).
Módulo de aplicação de algoritmos de biclustering e cálculo de funções
biológicas dos biclusters encontrados
Figura 5.5: Diagrama de casos do módulo de aplicação de algoritmos de biclustering e
cálculo de funções biológicas dos biclusters encontrados.
Este módulo permite aplicar um determinado algoritmo de biclustering
a uma matriz de dados e, em simultâneo, gerar a informação sobre as
funções biológicas dos biclusters identificados pelo algoritmo.
60
A Ferramenta BiGGEsTS
Nesta funcionalidade o utilizador poderá seleccionar o algoritmo de
biclustering que pretende aplicar, inserindo os parâmetros que lhe correspondem. Os algoritmos CCC-Biclustering e e-CCC-Biclustering aceitam
apenas matrizes de valores discretos, pelo que apenas ficam disponíveis
quando uma matriz discretizada é seleccionada na árvore de dados. Ambos oferecem a hipótese de considerar gene shifts.
O algoritmo CCC-Biclustering permite ainda seleccionar a inclusão de
genes com padrões simétricos e/ou de genes cujos padrões de expressão
surgem com um determinado atraso (time-lag) em relação aos restantes.
Nenhuma destas duas opções (ou ambas) pode(m) ser utilizada(s) em
simultâneo com gene shifts.
Os parâmetros para o algoritmo e-CCC-Biclustering incluem, adicionalmente: o número de erros permitido no padrão de expressão de cada
gene de um bicluster e a possibilidade de considerar erros restritos ou erros
gerais. Os erros gerais permitem a substituição de um (ou mais, dependendo do número de erros permitido) símbolo(s) do padrão de expressão
do bicluster por qualquer outro símbolo do alfabeto de discretização, enquanto os erros restritos apenas permitem a substituição de um (ou mais)
símbolo(s) por um dos k símbolos lexicograficamente mais próximos no
alfabeto. O valor de k é introduzido pelo utilizador.
O algoritmo CC-TSB-Biclustering só fica disponível quando a matriz
seleccionada na árvore é uma matriz original ou pré-processada sem valores em falta. Os parâmetros a introduzir são: α, o limite máximo para a
razão entre a MSR (mean-squared residue) da linha e a MSR da submatriz; δ,
o limite superior para a MSR do bicluster; o número de biclusters a extrair e
o número máximo de iterações para optimização dos biclusters.
A análise de funções biológicas potencialmente relevantes utiliza os
identificadores dos genes que integram os vários biclusters (como referimos anteriormente, considera-se que os biclusters representam possíveis
processos biológicos relevantes) e compara-os com os identificadores dos
genes conhecidos e anotados na Gene Ontology - projecto que procura
manter uma descrição consistente nos nomes e funções de genes descobertos e estudados pelos biólogos - para o organismo específico ao qual
os genes pertencem. A esses genes estão atribuídas determinadas funções
ou tarefas biológicas. Após uma análise estatística que compara o número
de genes na matriz original, o número de genes da matriz original que
desempenham uma tarefa específica, o número de genes no bicluster e o
número de genes no bicluster reconhecidos na Gene Ontology como desem-
5.1 Modelação
61
penhando tal tarefa, são calculados valores estatísticos (p-values calculados
usando uma distribuição hipergeométrica e corrigidos com a correcção de
Bonferroni para testes múltiplos) que indicam a relevância biológica do
bicluster segundo a Gene Ontology.
A análise de funções requer dois ficheiros de dados, um com todos os
termos classificados na Gene Ontology e outro específico para o organismo
em análise. Para proceder à análise de funções, o utilizador deverá indicar
o caminho para estes ficheiros no sistema local de ficheiros. Poderá também
efectuar o download a partir do site da Gene Ontology, caso os ficheiros
não existam ou pretenda actualizá-los. O outro parâmetro necessário é o
valor limite para o p-value que indica a relevância das funções biológicas.
Funções que apresentam um p-value corrigido pelo método de Bonferroni
igual ou inferior ao introduzido pelo utilizador, serão consideradas funções
relevantes.
Caso os ficheiros não existam no sistema local e/ou não possam ser descarregados, é possível aplicar apenas o algoritmo de biclustering e realizar
a análise de funções relevantes numa fase posterior.
Módulo de análise e visualização
A análise de dados de expressão genética engloba um conjunto interessante
de visualizações diversas que têm como objectivo facilitar a análise de
dados que, pela sua natureza (valores reais com várias casas decimais) e
elevada quantidade, dificultam a inferência de conclusões (ver Figura 5.6).
As funcionalidades disponíveis neste módulo permitem a análise de:
• Matrizes de valores - apresentam os valores reais de expressão de
matrizes originais e pré-processadas e de biclusters com valores reais.
Esta visualização também é permitida nas matrizes discretas e nos biclusters gerados a partir de matrizes discretas sendo que, nestes casos,
os valores apresentados correspondem aos valores da matriz original
ou pré-processada que deu origem à matriz de valores discretos.
• Matrizes de valores coloridas - apresentam matrizes coloridas em
função dos seus valores reais. As células são coloridas de acordo
com os respectivos valores de expressão que contêm. A visualização
de matrizes de valores coloridas está disponível para os mesmos tipos
de matrizes da análise de matrizes de valores.
62
A Ferramenta BiGGEsTS
Figura 5.6: Diagrama de casos do módulo de análise e visualização.
• Matrizes de símbolos coloridas - apresentam matrizes coloridas em
função dos seus símbolos. As células são coloridas de acordo com os
respectivos símbolos discretos que contêm. Esta visualização permite
mostrar matrizes discretas e biclusters com valores discretos.
A análise de matrizes para grupos de biclusters, seja ela de valores
reais, valores coloridos ou símbolos coloridos, permite mostrar as matrizes
de todos os biclusters. Por omissão são apresentados os cinco primeiros
biclusters. No entanto, o utilizador tem a possibilidade de seleccionar o
número de biclusters que pretende visualizar.
• Dendrogramas. Os dendrogramas apresentam a hierarquia de clusters que resulta da aplicação de um algoritmo de clustering hierárquico sobre uma determinada matriz de expressão genética. Só são
elegíveis para a visualização do dendrograma matrizes originais, préprocessadas e discretas (neste caso usando a matriz que foi utilizada
5.1 Modelação
63
pelo algoritmo de discretização). O BiGGEsTS tem implementadas
quatro técnicas de clustering hierárquico distintas (centroid-linkage,
single-linkage, complete-linkage e average-linkage clustering), que podem
ser aplicadas com uma de cinco medidas de similaridade (correlação
descentrada, de Pearson, descentrada absoluta, de Pearson absoluta,
de Spearman, de Kendall, distância euclidiana ou cityblock).
Após a selecção dos parâmetros, o clustering hierárquico é aplicado
sobre os dados e os resultados são apresentados numa nova janela.
A janela, Java TreeView [20], inclui vários painéis que mostram a
matriz de expressão colorida, as linhas hierárquicas que indicam os
genes e/ou as condições incluídas nos vários clusters e que, ao serem
seleccionadas, provocam o aparecimento do cluster individual num
dos painéis de visualização. São também incluídos os nomes dos
genes/condições que pertencem ao cluster em análise.
O Java TreeView [20] disponibiliza ainda diversas opções de personalização e utilitários como: o controlo do tamanho dos pixéis e das
cores utilizadas na matriz, a pesquisa de genes e de condições, a
exportação para ficheiros de texto e imagem, entre outras.
• Gráficos de expressão dos genes de um bicluster nos respectivos instantes temporais. É possível ver os gráficos de expressão de biclusters
individuais ou grupos de biclusters. Para os biclusters individuais o
utilizador pode optar por normalizar o gráfico de expressão enquanto
este lhe é apresentado. O painel correspondente à visualização de
grupos de biclusters mostra as miniaturas dos gráficos de expressão
dos biclusters individuais que integram o grupo. Por omissão são
apresentados os 12 primeiros biclusters, valor que o utilizador pode
modificar em qualquer altura, durante a visualização dos gráficos.
• Gráficos de expressão dos genes de um determinado bicluster individual (grupos de biclusters não são permitidos) em todas as condições da experiência, e não apenas nas condições do bicluster.
• Gráficos do padrão de expressão de um determinado bicluster para
as condições que o integram. Esta visualização só é permitida para
biclusters que possuam valores discretos. A análise de gráficos de
padrão de expressão está ainda disponível para grupos de biclusters
64
A Ferramenta BiGGEsTS
em condições semelhantes às dos gráficos de expressão dos genes de
um bicluster nos respectivos instantes temporais.
Todos os gráficos, excepto as miniaturas, permitem ampliar pontos
de interesse, imprimir e exportar como imagem no formato PNG. Estas
funcionalidades estão disponíveis a partir de um menu (context menu)
acedido através do botão direito do rato.
• Tabelas de funções biológicas relevantes para biclusters e grupos
de biclusters. As tabelas de funções dos biclusters individuais apresentam os identificadores e termos utilizados na Gene Ontology para
classificação de todos os genes que compõem o bicluster, bem como
os p-values calculados (da forma anteriormente referida) e a marcação
das funções biológicas potencialmente relevantes. A visualização das
funções para os grupos de biclusters apresenta uma tabela com estatísticas gerais tais como os números de genes e condições de cada um
dos biclusters que constituem o grupo, os p-values calculados e o número de funções biológicas potencialmente relevantes para cada um
deles (uma função biológica é considerada potencialmente relevante
se o p-value correspondente for inferior ou igual a um determinado
limite definido pelo utilizador, 0.01 por omissão). O utilizador tem a
oportunidade de recalcular os valores utilizando um limite diferente
do que foi usado para os valores apresentados. No caso de a análise
de funções não ter sido calculada anteriormente, é possível calculá-la
no painel de funções relevantes.
• Grafo de funções biológicas significativas, disponível apenas para
biclusters cuja análise de funções tenha revelado funções significativas. O gráfico apresenta os termos das funções significativas do
bicluster representados segundo a hierarquia da Gene Ontology sob a
forma de um grafo dirigido. Existem duas funcionalidades adicionais que permitem ao utilizador ampliar ou reduzir o tamanho do
grafo e exportá-lo nos formatos PNG e SVG.
Módulo de pós-processamento
O pós-processamento permite aplicar filtragem e/ou ordenação de biclusters
sobre um determinado grupo de biclusters (ver Figura 5.7). Ambas são
realizadas utilizando métricas que calculam a coerência dos valores reais
5.1 Modelação
65
Figura 5.7: Diagrama de casos do módulo de pós-processamento.
no bicluster ou a significância estatística de encontrar um bicluster com
determinado número de genes e determinado padrão, por exemplo (para
isso utiliza-se a hipótese nula que descreve a probabilidade de encontrar
um padrão com determinado tamanho, calculada usando a cauda de uma
distribuição binomial).
Enquanto a filtragem consiste em gerar um novo grupo de biclusters
excluindo todos os que não cumpram os requisitos especificados, a ordenação procede à geração de um novo grupo reorganizando os biclusters do
grupo original de acordo com a ordem estabelecida para a(s) métrica(s) em
causa.
Para a filtragem podem ser considerados os seguintes critérios: biclusters triviais (com apenas um gene e/ou uma condição), número de genes,
número de condições, variância média das linhas (ARV), variância média
das colunas (ACV), média dos quadrados dos resíduos (MSR), tamanho do
bicluster, sobreposição de genes, sobreposição de genes e condições, biclusters com padrão de expressão constante. Alguns destes critérios podem
ser combinados (ver Figura 5.8).
Os biclusters podem ser ordenados por: variância média das linhas
66
A Ferramenta BiGGEsTS
Figura 5.8: Diagrama de casos da selecção do critério de filtragem, no módulo de pósprocessamento.
(ARV), variância média das colunas (ACV), média dos quadrados dos
resíduos (MSR), diferença entre a variância média das linhas (ARV) e a
variância média das colunas (ACV), diferença entre a ARV e a MSR, número de genes, número de condições, tamanho, variância, melhor p-value,
melhor p-value corrigido, melhor p-value para o padrão do bicluster, melhor
p-value corrigido para o padrão do bicluster com colunas (ver Figura 5.9).
5.1 Modelação
67
Figura 5.9: Diagrama de casos da selecção do critério de ordenação, no módulo de pósprocessamento.
5.1.2
Estrutura
A modelação da estrutura consiste na definição das várias classes necessárias à implementação das funcionalidades referidas na modelação de requisitos e desenho da aplicação. A estrutura do BiGGEsTS é apresentada
em diversos diagramas de classes compilados num CD-ROM distribuído
com o presente relatório.
5.1.3
Arquitectura
A modelação da arquitectura promove a organização das classes implementadas/utilizadas em vários pacotes ou componentes, definidos se-
68
A Ferramenta BiGGEsTS
gundo critérios estruturais ou funcionais. A arquitectura da ferramenta
Figura 5.10: Diagrama de pacotes da ferramenta BiGGEsTS. No centro, o pacote que
implementa a interface gráfica - applicationgui.gui; em volta, as suas dependências.
BiGGEsTS inclui os pacotes construídos de raiz durante a fase de desenvolvimento do projecto e pacotes externos que foram utilizados para implementar algumas funcionalidades específicas (ver Figura 5.10). Destacamos
então os seguintes componentes arquitecturais:
• biggests.gui contém todas as classes que definem a interface com o
utilizador e o comportamento geral da aplicação (painéis, janelas,
threads).
• biggests.tree inclui as classes que definem a estrutura base da árvore
de dados e resultados.
• biggests.tables integra todas as tabelas, modelos de ordenação de
tabelas e tipos de cabeçalhos de tabelas utilizados pelos painéis de
visualização.
5.1 Modelação
69
• biggests.clustering concentra as classes que implementam algoritmos
de clustering e as respectivas estruturas de dados.
• biggests.utils engloba algumas classes que não fazem propriamente
parte da interface com o utilizador, mas que permitem implementar
determinados pormenores específicos (utilitários para auxiliar em
determinadas tarefas ou complementar componentes utilizados na
interface com o utilizador).
• smadeira.biclustering inclui todas as classes que definem os tipos
de matrizes, grupos de biclusters e biclusters individuais, bem como
a implementação das técnicas de pré-processamento e discretização,
algoritmos de biclustering e também a interpretação e armazenamento
dos dados resultantes da análise de funções (a figura 5.11 apresenta
as dependências do pacote smadeira.biclustering).
Figura 5.11: Diagrama de pacotes centrado no pacote smadeira.biclustering.
• de.schlichterle.io inclui componentes para a compressão, descompressão e manipulação de ficheiros comprimidos com suporte para
diversos algoritmos.
70
A Ferramenta BiGGEsTS
• org.jfree.chart (e derivados) e org.jfree.data.category, cujas classes
permitem definir os vários tipos de gráficos de expressão incluídos
na aplicação.
• org.apache.batik.swing.svg contém as classes que possibilitam a interpretação e integração de documentos SVG em componentes de
visualização gráfica.
• smadeira.ontologizer, classes de definição e processamento dos dados estatísticos gerados pela análise de funções.
• edu.stanford.genetics.treeview integra diversos componentes de interface gráfica com o utilizador e visualização de clusters que permitem a apresentação de dendrogramas a partir dos ficheiros CDT, ATR
e GTR produzidos pelo algoritmo de clustering hierárquico, descrevendo a estrutura da árvore de clusters resultante.
Os restantes pacotes utilizados são nativos do Java e incluem, sobretudo, componentes gráficos (javax.swing), classes para manipulação de
streams de dados (java.io), utilitários como colecções de dados (java.util) e
também classes de geometria, que permitem aplicar transformações sobre
rendering de gráficos a duas dimensões (java.awt.geom).
5.2 Implementação
A implementação foi desenvolvida em Java, utilizando o IDE Borland
JBuilder 2006 Enterprise Edition. A selecção desta ferramenta deveu-se
às poderosas funcionalidades de visualização prévia dos componentes
gráficos e geração automática de código para tratamento de eventos, bem
como à possibilidade de visualização directa das relações entre classes e
pacotes e da documentação Javadoc produzida, geração de executáveis,
entre outras.
Ao longo da implementação foram tomadas diversas decisões, na maioria das vezes relacionadas com a redução do atrito na interface com o
utilizador e com a maximização da eficiência. Esta (eficiência) constituiu
uma linha de preocupação constante ao longo de todo o desenvolvimento,
não só porque as experiências com microarrays permitem efectuar medições
de níveis de expressão em milhares de genes, mas também porque se pretendia que o BiGGEsTS permitisse carregar diversos conjuntos de dados de
5.2 Implementação
71
expressão genética de dimensões semelhantes, manipulá-los gerando novas matrizes com dimensões também idênticas e aplicar-lhes algoritmos
de biclustering que, tipicamente, extraem grupos de milhares de biclusters. Como se poderá concluir, a quantidade de dados manipulada pela
ferramenta é considerável, o que representou um esforço no sentido de
optimização da capacidade de processamento e utilização de memória.
Nesta secção apresentamos apenas os pormenores de implementação
relativos aos módulos desenvolvidos ou alterações efectuadas durante o
segundo semestre lectivo.
5.2.1
Carregamento de dados
O carregamento de dados foi completamente reformulado para permitir
uma maior flexibilidade e robustez na leitura de dados dos ficheiros de
texto. O painel de carregamento é agora mais amigo do utilizador, apresentando uma tabela com a visualização prévia dos dados contidos no
ficheiro. A tabela é actualizada automaticamente sempre que há uma alteração no caminho do ficheiro de dados indicado, o que, apesar de menos
eficiente, torna a utilização da aplicação mais agradável e intuitiva para
o utilizador. A pré-visualização dos dados resulta de uma análise por
parte do sistema, com o objectivo de identificar os nomes das condições,
os nomes dos genes e os valores de expressão da matriz a carregar. Estes
três tipos de elementos são assinalados a verde, amarelo e cor-de-rosa, respectivamente. É o próprio sistema que selecciona o delimitador de dados
adequado à leitura de cada ficheiro, de entre os vários que a aplicação
suporta.
Com o tipo de análise implementado, é possível carregar dados a partir
de um ficheiro que contém, por exemplo, algumas linhas com outro tipo
de informação antes do conjunto de dados, várias linhas com nomes de
condições ou várias colunas com nomes de genes. Nestes casos é o utilizador quem decide qual a coluna e/ou linha a utilizar. A técnica usada
permite também a geração automática de nomes de genes ou condições,
caso estes não se encontrem presentes no ficheiro de dados.
Dada a multiplicidade de sistemas de identificação de genes existentes
(Ensembl, Entrez, UniGene, Affymetrix, etc.) e também a possibilidade de
os nomes dos genes contidos no ficheiro não pertencerem a nenhum deles,
tendo sido atribuídos pela equipa que realizou a experiência, decidimos
72
A Ferramenta BiGGEsTS
delegar ao utilizador a responsabilidade de fornecer um ficheiro com a
conversão entre os identificadores usados na experiência e os identificadores correspondentes, usados pela Gene Ontology nos ficheiros de anotação.
Desta forma, a conversão é sempre garantida, qualquer que seja o sistema
de identificação dos genes na experiência.
O leque de organismos suportados pela aplicação foi alargado a todos
os organismos que possuem ficheiros de anotação para os seus genes na
Gene Ontology, possibilitando uma maior abrangência na utilização do
BiGGEsTS.
5.2.2
Integração do algoritmo CC-TSB-Biclustering
No final do primeiro semestre, o BiGGEsTS tinha integrados dois algoritmos de biclustering que podiam ser aplicados apenas a matrizes de valores
discretos (CCC-Biclustering e e-CCC-Biclustering). Com a introdução do
algoritmo CC-TSB-Biclustering, a ferramenta passou a poder extrair biclusters a partir de matrizes de valores reais (originais ou pré-processadas, sem
valores em falta). Dada a modularidade da aplicação, esta integração não
implicou alterações profundas, apenas extensões do trabalho que já havia
sido realizado, especialmente na visualização dos gráficos de expressão e
das matrizes de expressão dos biclusters.
5.2.3
Download de ficheiros da Gene Ontology
Os ficheiros com a ontologia dos genes e as anotações para os diferentes
organismos podem agora ser descarregados do site da Gene Ontology.
Esta funcionalidade está disponível no painel de biclustering e no painel de
análise de funções biológicas relevantes. É permitido ao utilizador realizar
o download do ficheiro de ontologia ou do ficheiro de anotações para o
organismo em causa, de forma independente. O ficheiro com a ontologia
dos genes é sempre o mesmo para todos os organismos, apenas o ficheiro
de anotações varia. Na operação de download, o sistema identifica o ficheiro
que deve descarregar, faz a ligação ao site da Gene Ontology através do
URL do respectivo ficheiro e descarrega-o para a directoria de ficheiros da
Gene Ontology no sistema de ficheiros local, descompactando-o.
Nos casos em que o ficheiro alvo da operação de download já existe
na directoria mencionada, a aplicação substituirá a versão existente pela
5.2 Implementação
73
nova, mais actualizada. Se o descarregamento falhar, por qualquer motivo,
os ficheiros que já existiam são repostos e a aplicação poderá continuar a
utilizá-los.
5.2.4
Threads e barras de progresso
O download de ficheiros da Gene Ontology, a aplicação dos algoritmos de
biclustering e a análise de funções biológicas relevantes são operações que
consomem bastante tempo, deixando o utilizador sem qualquer feedback
ou possibilidade de interacção / controlo sobre a aplicação. Como solução,
o BiGGEsTS passou a realizar estas tarefas através de threads de execução
independente, apresentando, simultaneamente, uma barra de progresso
com informação sobre as fases intermédias concluídas.
Para cada tarefa de longo curso é criada uma nova thread, que executa
de forma independente da thread de execução principal, impedindo assim
a paralisação da aplicação. À medida que a tarefa vai sendo realizada, a
thread vai actualizando a informação na barra de progresso. Para um maior
controlo do utilizador sobre a aplicação, incluímos também a possibilidade
de abortar a tarefa de longo curso, através de um botão para o efeito na
janela da barra de progresso.
5.2.5
Pós-processamento
A implementação da filtragem e ordenação de biclusters, designadas em
geral como operações de pós-processamento, introduziu dois novos conceitos em relação aos definidos no relatório do primeiro semestre: biclusters
pós-processados e grupos de biclusters pós-processados. Na realidade, as
classes destes tipos de objectos são exactamente as mesmas que as que definem os biclusters e os grupos de biclusters extraídos pelos algoritmos. No
entanto, o conceito em si é diferente, pois os homónimos pós-processados
não resultam da extracção directa de um algoritmo de biclustering, mas
de uma operação de pós-processamento sobre os biclusters originais (que
poderão ter sido directamente extraídos por um algoritmo de biclustering
ou constituir, eles mesmos, biclusters pós-processados).
O pós-processamento aplica-se a grupos de biclusters, não operando
qualquer modificação sobre os biclusters individuais em si, mas apenas sobre a estrutura do grupo. Isto significa que o grupo pós-processado poderá
74
A Ferramenta BiGGEsTS
ter um menor número de biclusters ou os biclusters ordenados de forma distinta, sendo que cada um dos biclusters finais corresponde exactamente a
um dos biclusters originais. No grupo de biclusters resultante cada bicluster
mantém o identificador do bicluster original, entre parêntesis. No entanto,
para uma melhor navegação na árvore de dados e resultados, bem como
nos gráficos de expressão e nas tabelas de funções biológicas relevantes,
os nodos dos biclusters pós-processados apresentam uma nova numeração
automática atribuída de forma sequencial, mantendo o identificador dos
biclusters originais entre parêntesis. A numeração sequencial torna a tarefa
de pesquisa mais fácil e rápida, sobretudo nos casos em que a ordem dos biclusters foi alterada. O identificador entre parêntesis possibilita um rápido
relacionamento do bicluster pós-processado com o bicluster que lhe deu
origem, tornando-se particularmente útil no caso em que um determinado
grupo de biclusters sofre pós-processamentos sucessivos. Nesta situação,
qualquer bicluster pós-processado da cadeia mencionada que apresente,
por exemplo, o identificador 24 entre parêntesis é exactamente o mesmo
que o bicluster original com o identificador 24.
5.2.6
Gestão de sessões
O BiGGEsTS permite ao utilizador gravar a sua sessão para, posteriormente, restaurar e continuar o seu trabalho a partir do ponto em que se
encontrava. A sessão é gravada da seguinte forma: o sistema cria um ficheiro binário designado tree.big em que guarda a árvore de dados (todos
os objectos são serializados e escritos no ficheiro como sequências de bytes)
e o caminho na árvore para o nodo seleccionado no momento da gravação
da sessão. Finalmente, cria um arquivo ZIP com o nome e caminho indicados pelo utilizador. Este arquivo inclui o ficheiro tree.big e a directoria
Function_Results (bem como o seu conteúdo), onde a aplicação mantém
os ficheiros no formato DOT com a estrutura dos grafos de resultantes da
análise de funções relevantes. Finalmente, ficheiro tree.big é eliminado do
sistema de ficheiros local.
Para restaurar uma sessão o sistema acede ao respectivo arquivo, descompacta a directoria Function_Results para o caminho associado à aplicação e lê a árvore de dados do ficheiro tree.big desserializando-a e construindo assim a árvore na aplicação. Lê também o caminho para o nodo
seleccionado no momento da gravação e instancia-o na árvore.
5.2 Implementação
75
A implementação da gestão de sessões implicou que todas as classes
cujos objectos fossem escritos/lidos para ficheiros tivessem que passar a
implementar a interface Serializable. A preferência sobre o formato de ficheiros a utilizar recaiu sobre o binário, em detrimento do formato de texto,
pois o número de dados a escrever/ler pode ser considerável e o formato
binário permite maior eficiência em todo o processo, dado que os ficheiros de texto requerem sempre uma interpretação/parsing dos dados (entre
outros processos morosos).
5.2.7
Informação
Quando o utilizador selecciona um determinado nodo da árvore de dados,
o sistema apresenta um sumário informativo do conteúdo desse nodo, isto
é, todos os detalhes relevantes sobre a matriz, bicluster ou grupo de biclusters
em causa. Das informações constam, por exemplo, o número de genes e o
número de condições, o nome do nodo que contém a matriz/bicluster/grupo
de biclusters que lhe deu origem, tipos de pré-processamento, biclustering
e/ou análise de funções efectuados sobre os dados, etc.
A introdução deste resumo informativo originou a inclusão de dois atributos adicionais na classe NodeInfo, utilizada para armazenar a informação
sobre o objecto (matriz, bicluster, grupo de biclusters) contido em cada nodo.
O primeiro contém um conjunto de strings com as próprias informações.
O segundo engloba o conjunto de formatações para as strings incluídas no
primeiro, de modo a que a caixa de texto (da classe JTextPane) que as recebe
possa saber qual a formatação adequada para cada informação.
5.2.8
Gráficos de expressão e padrão de expressão
Os métodos que constroem os gráficos de expressão e de padrão de expressão foram reformulados, de forma a suportar os novos tipos de biclusters:
biclusters com padrões de expressão simétricos (sign changes) e biclusters
com atrasos (time-lags).
Nos primeiros, apenas os gráficos do padrão de expressão sofreram
alterações, uma vez que é necessário agora incluir dois padrões: o original
e o simétrico. Na legenda dos gráficos aparecem, para cada padrão, os
respectivos nomes dos genes que lhe estão associados.
Nos gráficos dos biclusters com atrasos, tanto os gráficos de expressão
76
A Ferramenta BiGGEsTS
como os de padrão são agora construídos de modo distinto, pois apesar
de todos os genes apresentarem uma evolução de expressão coerente ou
o mesmo padrão de expressão, a condição inicial (e, consequentemente,
todas as outras condições) pode(m) variar de gene para gene, o que implica
a sua verificação e desenho correspondente.
Existe também a possibilidade de combinação de biclusters com padrões
de expressão simétricos e atrasos, o que implica a satisfação em simultâneo
de todas as condições acima descritas.
5.2.9
Clustering hierárquico e dendrogramas
A implementação do clustering hierárquico foi referida no Capítulo 4, Secção 4.2, e consistiu numa reprogramação em Java dos algoritmos integrados no software Cluster 3.0 [6] e na biblioteca de clustering [5], cujo código
fonte se encontrava em linguagem C. Na adaptação dos algoritmos procurámos minimizar as alterações introduzidas, de modo a que a execução
global se assemelhasse, não esquecendo no entanto a diferente estrutura do
Java e o aproveitamento das suas potencialidades (classes, objectos, atributos de classe - estáticos - e de instância, métodos de classe e de instância,
polimorfismo, entre outras).
Na definição final subsistiram três classes distintas: HierarchicalClustering, ClusterTreeNode e ClusterTreeNodeComparator.
A primeira consiste na classe principal, que recebe e armazena os dados
de expressão genética a processar, produz dados auxiliares e permite aplicar os algoritmos de clustering hierárquico, devolvendo a árvore com a hierarquia de clusters resultante ou escrevendo a sua estrutura para ficheiros
CDT 1 , ATR 2 e GTR 3 . A classe HierarchicalClustering pode receber os dados
tanto de forma individualizada (número de genes, número de condições,
nomes dos genes, nomes das condições, matriz com os dados de expressão, matriz com a máscara de valores em falta, ordem dos genes, ordem
das condições, índices dos genes, índices das condições, pesos dos genes,
1
Ficheiro gerado pelo algoritmo de clustering hierárquico. Contém os nomes dos genes
e das condições, bem como os respectivos pesos e os valores de expressão genética
2
Tipo de ficheiro gerado pelo algoritmo de clustering hierárquico quando aplicado sobre
as condições da matriz de dados de expressão genética. Contém a estrutura hierárquica
dos nodos resultantes.
3
Tipo de ficheiro gerado pelo algoritmo de clustering hierárquico quando aplicado sobre
os genes da matriz de dados. Contém a estrutura hierárquica dos nodos resultantes.
5.3 Finalização e Divulgação
77
pesos das condições), como através de objectos de tipo ExpressionMatrix
(matrizes originais na aplicação BiGGEsTS), PreProcessedExpressionMatrix
(pré-processadas) ou DiscretizedExpressionMatrix (matrizes discretas).
O tipo ClusterTreeNode define um nodo da árvore de clusters, caracterizado por um filho esquerdo, um filho direito e uma distância (medida de
similaridade) entre os dois.
Finalmente, a classe ClusterTreeNodeComparator implementa a interface
Comparator para o tipo de dados ClusterTreeNode, fornecendo métodos para
comparação de objectos deste tipo e definindo assim uma ordem sobre os
elementos desse conjunto.
5.3
Finalização e Divulgação
A fase de finalização consistiu essencialmente na preparação do BiGGEsTS
para a sua distribuição e divulgação e incluiu tarefas como a produção
de executáveis nativos para Windows, Linux e Mac OS X, a criação de
instaladores para automatizar o processo de instalação nesses mesmos
sistemas operativos, a selecção de uma licença de utilização e distribuição
para a aplicação e do seu código-fonte, bem como a criação de uma imagem
e de um site para divulgação e a respectiva documentação.
5.3.1
Executáveis
A criação dos executáveis foi assistida pelo JBuilder. Num primeiro passo
criámos um arquivo executável JAR com a seguinte configuração:
• Inclusão de todas as classes e recursos para todas as dependências.
• Indicação da classe com o método main.
• Parametrização da máquina virtual, com os seguintes valores.
• Compressão do arquivo.
Com as configurações descritas produzimos os executáveis nativos para
Windows, Linux e Mac OS X, a partir do executável JAR.
A parametrização da máquina virtual constituiu um processo cuidadoso, com vários testes ao comportamento da aplicação sobre várias configurações distintas. Antes de apresentarmos e justificarmos a selecção dos
78
A Ferramenta BiGGEsTS
parâmetros para a máquina virtual de Java, faremos uma breve referência aos conceitos de pilha (stack), heap, geração jovem e geração estável,
imprescindíveis à compreensão do funcionamento básico de um garbage
collector.
Pilha (stack)
Alocação linear de memória: a memória é alocada em fila ou em pilha.
Não permite a remoção de objectos fora da ordem de criação. O Java usa
alocação linear para procedimentos sequenciais. Cada thread tem associada uma pilha para armazenar variáveis locais e resultados parciais. A
memória usada pela pilha pode ser alocada na heap, não precisa de ser
contígua e é libertada automaticamente depois de utilizada. Pode ter um
tamanho fixo ou expandir-se e reduzir-se na medida do necessário.
Heap
Alocação dinâmica de memória: permite liberdade de criação e remoção
em ordem arbitrária. Requer uma gestão complexa do espaço ocupado. O
Java usa alocação dinâmica para objectos. Heap é a área de dados onde
todas as instâncias e vectores são alocados. É criada quando a máquina
virtual inicia a sua execução e compartilhada por todas as threads. O espaço
de objectos é reciclado por um sistema de gestão de memória (garbage
collector). No caso do BiGGEsTS, a heap tem um tamanho variável limitado
por valores máximo e mínimo.
Gerações
As gerações são áreas da heap que se baseiam na classificação dos objectos
segundo o seu ciclo de vida e nas seguintes observações:
• Se um objecto se mantém alcançável por um longo período de tempo,
é provável que continue assim.
• A maior parte dos objectos "morre"pouco tempo depois da sua criação.
• Referências de objectos antigos para objectos novos são pouco frequentes.
5.3 Finalização e Divulgação
79
Estas permitem concluir que um garbage collector será mais eficiente se
analisar os objectos mais jovens com mais frequência do que os objectos
mais antigos/estáveis. Praticamente todas as implementações actuais de
garbage collection usam a abordagem geracional para a gestão da memória.
Geração jovem (Young generation)
Área menor da heap, em que é inicialmente alocada a memória para novos
objectos, excepto nos casos em que o espaço não é suficiente.
Geração estável (Tenured generation)
Área maior da heap para onde são copiados objectos que sobrevivem a uma
ou mais garbage collections na área menor.
Parametrização
Em Java a gestão de memória é fundamentalmente automática e realizada pelo garbage collector. O programador não tem a responsabilidade ou
possibilidade de gerir a memória do sistema explicitamente, dado que a
alocação e libertação são realizadas segundo algoritmos previamente definidos. No entanto, é possível ajustar o comportamento ou seleccionar
quais os algoritmos a utilizar para adaptar a gestão de memória à especificidade da aplicação desenvolvida. No BiGGEsTS procurámos optimizar
a combinação de parâmetros para obter um equilíbrio entre a utilização
da memória e o tempo dispensado para garbage collection. A configuração
final foi a seguinte:
Xss5M (tamanho da pilha para cada thread: 5 MB)
Xms100M (tamanho mínimo da heap: 100 MB)
Xmx800M (tamanho máximo da heap: 800 MB)
Dado que a utilização de memória é considerável, particularmente na
aplicação de algoritmos de biclustering, decidimos manter o tamanho máximo da heap bastante superior ao seu tamanho mínimo. Esta técnica
permite aumentar o número de chamadas ao garbage collector, já que é a diferença entre os valores máximo e mínimo que define o espaço disponível
para a geração estável de objectos (tenured generation). Se o valor mínimo
80
A Ferramenta BiGGEsTS
for semelhante ao máximo, o garbage collector não terá que executar tantas
vezes, pois o valor mínimo é atingido com alguma facilidade. O tamanho
máximo estipulado para a heap varia consoante a versão (existem versões
distintas para máquinas com memórias de diferentes capacidades).
O valor elevado para o tamanho da pilha de cada thread (5 MB) é
justificado pelas particularidades da implementação dos algoritmos de
biclustering: engloba vários métodos recursivos que envolvem a criação de
muitas variáveis locais ou resultados intermédios e, consequentemente,
provocam uma utilização extremamente intensiva da pilha.
Finalmente, optámos pela utilização do serial garbage collector que usa,
para a geração jovem, um colector de cópia em série, e para a geração
estável, o algoritmo mark-compact em série.
O primeiro, colector de cópia, divide a heap em duas áreas iguais, designadas origem e destino. Os objectos são alocados na área de origem e
quando o colector é executado, navega pelo conjunto de referências e copia
os objectos alcançáveis para a área de destino. Quando a cópia termina, os
espaços destino e origem trocam de função. Este algoritmo permite uma
cópia rápida, principalmente se a quantidade de objectos for reduzida, o
que é comum no caso da geração jovem. Para além disso não precisa de
percorrer a heap inteira, apenas os objectos alcançáveis, e não fragmenta
a memória. Entre as suas desvantagens contam-se: a necessidade de paragem da aplicação durante a execução do algoritmo (comum a todos os
algoritmos de garbage collection em série); a duplicação de memória necessária na heap, o que constitui um problema se a heap tiver um tamanho
elevado; e a utilização ineficiente da memória, uma vez que metade está
sempre vazia.
O algoritmo mark-compact rastreia os objectos da heap, marca os objectos
alcançáveis e remove os restantes, libertando memória e mantendo a heap
desfragmentada através de um algoritmo de compactação. Não causa
fragmentação da memória, a alocação é rápida e a performance não se
degrada com o tempo devido ao aumento das colectas. Por outro lado, o
algoritmo de compactação representa algum overhead, uma vez que requer
várias visitas.
5.3 Finalização e Divulgação
5.3.2
81
Instaladores
Os instaladores foram construídos com a aplicação BitRock InstallBuilder. Existem duas versões de instaladores. A única diferença entre ambas
reside no facto de uma incluir os ficheiros da Gene Ontology com a ontologia genética e as anotações para todos os organismos suportados pela
aplicação e a outra não. A decisão de oferecer dois instaladores distintos
foi motivada pelo espaço de armazenamento considerável requerido pelos ficheiros da Gene Ontology, dado que estes não são indispensáveis à
utilização do BiGGEsTS. Isto porque apenas são utilizados na análise de
funções biológicas relevantes e, mesmo nesse caso, se existir uma ligação
à Internet é possível realizar o seu download.
O instalador para Windows permite instalar todos os componentes
necessários à utilização imediata da ferramenta. A instalação processa-se
da seguinte forma:
• O instalador verifica a instalação prévia do BiGGEsTS no sistema
(caso exista outra versão, o utilizador é aconselhado a removê-la).
• O utilizador selecciona a linguagem de instalação.
• O instalador apresenta a licença de utilização e distribuição da aplicação.
• O utilizador indica o caminho para a directoria de instalação.
• O instalador extrai e dispõe os seguintes itens na directoria de instalação: executável da aplicação, directoria para os ficheiros da Gene
Ontology, directoria para os resultados da análise de funções biológicas relevantes, directoria para as sessões, directoria com o programa
dot do Graphviz e um ícone do BiGGEsTS; finalmente, cria um desinstalador e os atalhos do BiGGEsTS no menu Iniciar e no Ambiente
de Trabalho.
O instalador para Linux funciona de modo semelhante. As excepções
são a instalação do programa Graphviz-dot e a criação de atalhos. O código
fonte do Graphviz deverá ser descarregado a partir do respectivo site e
compilado para que possa, posteriormente, ser utilizado pelo BiGGEsTS
na apresentação dos grafos de funções biológicas relevantes. Existem no
mesmo site RPMs para algumas distribuições de Linux, que fornecem uma
82
A Ferramenta BiGGEsTS
instalação mais automatizada. O instalador realiza ainda uma operação
adicional, alterando as permissões de execução do BiGGEsTS, para que
este possa ser executado por todos.
Em Mac OS X, o instalador comporta-se de forma em tudo semelhante
ao instalador para Windows.
5.3.3
Licença
O BiGGEsTS utiliza diversas bibliotecas, pacotes ou programas de utilização gratuita e open source. Estes componentes de software são distribuídos
segundo os termos das licenças de utilização e distribuição que passamos
a citar:
Graphviz - Common Public License Version 1.0
TrueZip - Apache License Version 2.0, January 2004
HTTPUnit - Russel Gold License
Commons-Cli - Apache License Version 2.0, January 2004
Batik - Apache License Version 2.0, January 2004
JFreeChart - GNU Lesser General Public License Version 2.1, February
1999
Java Treeview - GNU General Public License
Após a leitura de todos os termos das licenças mencionadas, optámos por
distribuir o BiGGEsTS com a licença GNU General Public License (GNU
GPL), uma vez que nos permite abranger e verificar todos os termos das
outras licenças, protegendo simultaneamente os nossos direitos e os das
entidades distribuidoras daqueles componentes.
5.3.4
Imagem e logótipo
A imagem que produzimos para o BiGGEsTS pretende ser simultaneamente forte e simples (logótipo do BiGGEsTS na Figura 5.12). De certo
modo, caracteriza a aplicação desenvolvida pela sua robustez e eficiência,
aliada à utilização agradável e intuitiva. As cores seleccionadas foram o
5.3 Finalização e Divulgação
83
Figura 5.12: Logótipo do BiGGEsTS.
verde, o vermelho e o branco, sugestionadas pelas cores utilizadas nas
matrizes de valores de expressão utilizadas na análise de expressão genética. As formas foram também inspiradas nas mencionadas matrizes e são,
sobretudo, quadrangulares e rectangulares.
5.3.5
Documentação
A documentação do BiGGEsTS inclui um manual de utilizador e a documentação Javadoc para o programador no formato HTML, produzida
directamente a partir dos comentários no código.
5.3.6
Site
O site desenvolvido tem como objectivo a distribuição e divulgação do
BiGGEsTS à comunidade, funcionando também como o meio de interacção principal entre a equipa de desenvolvimento e os utilizadores ou
programadores interessados na ferramenta.
O layout do site foi inspirado na imagem que desenvolvemos previamente, de acordo com as cores e formas estipuladas (ver Figura 5.13).
Utilizámos XHTML para a definição do conteúdo geral, CSS para a sua
apresentação e também JavaScript para a implementação de alguns comportamentos dinâmicos. O site respeita ambas as normas XHTML e CSS e
suporta uma larga variedade de resoluções e browsers, incluindo navegação em dispositivos móveis (telemóveis e PDAs).
Quanto ao conteúdo, a página oferece oito áreas distintas:
Overview - apresenta uma introdução sobre a extracção de padrões em
séries temporais de expressão genética, algoritmos de biclustering e
sobre o próprio BiGGEsTS.
News - mantém um conjunto de notícias acerca da aplicação; é nesta área
que aparecem os anúncios sobre novas versões do software ou novos
84
A Ferramenta BiGGEsTS
Figura 5.13: Site do BiGGEsTS.
manuais disponibilizados, entre outros.
License - contém os detalhes e termos da licença de utilização e distribuição.
Download - consiste no repositório do software para download, com todas
as versões do BiGGEsTS, incluindo binários e código fonte, versões
para Windows, Linux e Mac OS X e versões com e sem ficheiros de
anotações da Gene Ontology.
Known Issues - divulga os problemas e bugs conhecidos do BiGGEsTS.
Documentation - disponibiliza a documentação das várias versões do
software, incluindo manuais de utilização, documentação Javadoc no
formato HTML, apresentações sobre o BiGGEsTS e artigos científicos,
entre outros.
People - apresenta a equipa de desenvolvimento do BiGGEsTS.
Contacts - divulga os meios de contacto da equipa de desenvolvimento e
suporte para utilizadores e programadores.
Capítulo 6
Estudo de Caso
Este capítulo apresenta uma demonstração de utilização da ferramenta
BiGGEsTS para manipulação, visualização e análise de séries temporais
de expressão genética. Os dados apresentados são provenientes de experiências biológicas reais com genes do organismo yeast (levedura).
6.1
Carregamento de Dados
Figura 6.1: Painel de carregamento de dados.
85
86
Estudo de Caso
O primeiro passo consiste no carregamento dos dados de expressão
genética para a aplicação (ver Figura 6.1). É necessário indicar o caminho
para o ficheiro de texto que contém os dados, o organismo a que correspondem, o tipo de ADN utilizado na experiência e o identificador dos genes.
Neste caso, o ficheiro de texto contém 1171 genes e 7 condições, pertence
ao organismo yeast, o ADN utilizado na experiência foi cDNA, os genes
estão identificados por gene IDs e os dados são delimitados por tabulações.
O ficheiro contém alguns valores em falta, que serão alvo de tratamento
posterior.
Após o carregamento dos dados, e dado que possuímos os ficheiros
de anotações necessários para o organismo yeast, o BiGGEsTS procede à
análise de funções sobre os genes da matriz original, pelo nos será possível
consultar também a tabela de funções.
6.2
Visualização de Matrizes
Após o carregamento bem sucedido, a aplicação comuta para a aba Analyzing e apresenta a matriz de valores colorida (ver Figura 6.2).
Figura 6.2: Matriz de valores original colorida.
A sua observação revela facilmente que os valores mais baixos da matriz apresentam uma coloração verde (de maior ou menor intensidade,
6.2 Visualização de Matrizes
87
consoante o valor real da célula), os valores mais elevados apresentam
uma coloração vermelha e os valores em falta são destacados a amarelo.
Figura 6.3: Matriz de valores original colorida e ordenada por ordem crescente da condição
t2 .
Figura 6.4: Matriz de valores original colorida e ordenada por ordem decrescente da
condição t2 .
88
Estudo de Caso
É possível ordenar a tabela segundo uma determinada coluna, pressionandoa. Os resultados das ordenações crescente e decrescente são ilustrados nas
Figuras 6.3 e 6.4, respectivamente.
O BiGGEsTS apresenta a matriz colorida como resultado do carregamento, pois este tipo de visualização permite, geralmente, uma observação
mais global dos dados. No entanto, é sempre possível aceder à matriz de
valores (original), através da aba Values acessível no extremo inferior da
janela (ver Figura 6.5).
Figura 6.5: Matriz original de valores. As células que cujos valores estão em falta são
coloridas a azul-escuro. A navegação com o rato por cima das células permite identificar
a linha, a coluna e o valor de cada célula em particular.
6.3
Dendrograma
Ainda no mesmo contexto, com a matriz original e as abas Analyzing e
Matrix seleccionadas, acedemos à aba Dendrogram. Aparecerá o painel que
permite seleccionar as opções para a aplicação do algoritmo de clustering
hierárquico sobre os dados. No nosso caso, seleccionámos como medida
de similaridade a correlação de Spearman e optámos pelo método completelinkage clustering (ver Figura 6.6).
6.3 Dendrograma
89
Figura 6.6: Painel de opções para o algoritmo de clustering hierárquico.
Figura 6.7: Janela do BiGGEsTS com a janela do Java TreeView sobreposta. O Java
TreeView apresenta o dendrograma resultante do algoritmo de clustering hierárquico
aplicado aos dados da matriz de expressão original.
Premindo o botão View Dendrogram, surge a janela do Java TreeView
com o dendrograma resultante do clustering hierárquico aplicado sobre os
dados (ver Figura 6.7). Se seleccionarmos um determinado cluster, através
90
Estudo de Caso
das linhas hierárquicas do painel mais à esquerda surge, no painel central,
o cluster correspondente em grande plano. Os nomes das condições do
cluster aparecem no painel central superior e os nomes dos genes no painel
da direita (Figura 6.7).
6.4
Tabela de Funções
Figura 6.8: Tabela de funções biológicas para os genes da matriz original.
A tabela de funções está disponível através das abas Analyzing, Function
e apresenta os termos para o organismo yeast, neste caso, bem como o
número de genes utilizados na experiência e anotados com esse termo. A
Figura 6.8 apresenta a visualização típica de uma tabela de funções para
uma matriz original, pré-processada ou discreta. Neste caso, a Figura 6.8
mostra a tabela de funções para a matriz de expressão original.
6.5
Pré-Processamento
O passo seguinte será o pré-processamento da matriz, demonstrado na
Figura 6.9.
6.5 Pré-Processamento
91
Figura 6.9: Painel com as opções de pré-processamento.
A filtragem de genes é obrigatória, uma vez que a matriz possui valores
em falta, que terão que ser eliminados ou preenchidos. Para tal, optámos
por seleccionar a opção de filtrar apenas os genes com mais de uma determinada percentagem de valores em falta, à qual atribuímos o valor 20 (%).
A selecção desta opção torna obrigatório o preenchimento dos restantes
valores em falta, os quais decidimos preencher com a média da linha em
que se encontram. Escolhemos não aplicar aos dados qualquer técnica de
normalização ou smoothing. Para a discretização seleccionámos a técnica
variations between time-points com 3 símbolos e um threshold igual a 1. (ver
Figura 6.9).
Da aplicação das técnicas de pré-processamento resultam duas novas
matrizes: uma pré-processada e outra discreta. A matriz pré-processada
corresponde à matriz original sem quaisquer valores em falta, enquanto a
discreta resulta da aplicação da discretização variations between time-points
de 3 símbolos sobre a matriz pré-processada. O BiGGEsTS apresenta-nos a
matriz discreta, na forma de uma matriz de símbolos colorida (ver Figura
6.10).
92
Estudo de Caso
Figura 6.10: Matriz discreta sob a forma de uma tabela de símbolos colorida. A navegação
do rato sobre as células permite identificar a linha, a coluna e o símbolo de cada célula em
particular.
6.6
Biclustering
Passemos então à aplicação de um algoritmo de biclustering sobre a matriz
discreta (ver Figura 6.11). As opções disponíveis, neste caso, correspondem aos algoritmos CCC-Biclustering e e-CCC-Biclustering. Optámos pelo
primeiro, sem utilização de gene shifts ou time-lags, mas activando a opção
sign changes para biclusters com padrões de expressão simétricos. Para
a respectiva análise de funções, o BiGGEsTS detectou automaticamente
a existência dos ficheiros da Gene Ontology necessários no sistema local,
que decidimos aproveitar. Aceitámos também o p-value a considerar por
omissão, com o valor de 0.01, e aplicámos então as opções aos dados.
O algoritmo CCC-Biclustering permitiu extrair 262 biclusters, que aparecem na árvore de dados (à esquerda na Figura 6.12). Na análise de
matrizes, temos acesso às matrizes de valores, matrizes de valores coloridas e matrizes de símbolos coloridas, tal como para a matriz discreta, uma
vez que cada bicluster não é mais do que uma submatriz da matriz discreta. Para o grupo de biclusters são apresentados os vários biclusters que o
compõem (por omissão apenas os primeiros 5, mas é possível alterar este
valor, seleccionando outro na caixa de selecção), como se pode observar
6.6 Biclustering
93
Figura 6.11: Painel com as opções para aplicação de algoritmos de biclustering e de análise
de funções biológicas.
na Figura 6.12.
Figura 6.12: Matriz de valores colorida para os cinco primeiros biclusters do grupo de
biclusters extraído pelo algoritmo CCC-Biclustering sobre a matriz discreta. Na Figura
vemos apenas o primeiro bicluster. Para ter acesso aos restantes é necessário mover a barra
de deslocação (à direita) para baixo.
94
6.7
Estudo de Caso
Gráficos de Expressão
Ainda para o grupo de biclusters, é possível visualizar as miniaturas dos
gráficos de expressão genética (Figura 6.13) ou do padrão de expressão
(Figura 6.14) de todos os biclusters do grupo. Os gráficos de expressão
genética permitem analisar a co-regulação ou co-expressão dos genes num
bicluster, isto é, verificar que os genes exibem uma sequência de actividade
semelhante ao longo dos instantes temporais em que se pensa poderem
estar a participar em conjunto num determinado processo biológico. Os
gráficos do padrão de expressão mostram, por sua vez, o padrão de expressão de um bicluster, ou seja, a sequência de símbolos partilhada por
todos os seus genes nos instantes temporais que lhe pertencem. De facto,
o padrão de expressão representa também a co-regulação dos genes do bicluster de uma forma relativa (neste caso específico, através de um alfabeto
de três símbolos - D, N e U - o alfabeto utilizado na discretização) e não
através de valores reais, como os gráficos de expressão genética.
Figura 6.13: Miniaturas dos gráficos de expressão dos 24 primeiros biclusters do grupo
de biclusters extraído pelo algoritmo CCC-Biclustering aplicado à matriz discreta.
Após a visualização global dos gráficos de expressão, considerámos
que o bicluster 10 teria um gráfico de expressão interessante, pelo que decidimos visualizá-lo em mais pormenor. Para tal, é necessário seleccionar
o bicluster pretendido e a respectiva aba Expression (ver Figura 6.15). O
6.7 Gráficos de Expressão
95
Figura 6.14: Miniaturas do padrão de expressão dos primeiros 96 biclusters do grupo
de biclusters extraído pelo algoritmo CCC-Biclustering aplicado à matriz discreta. Na
imagem são visíveis os biclusters com números entre o 45 e o 60.
primeiro gráfico a aparecer será o que representa os valores de expressão do bicluster para os genes e as condições que o integram (ver Figura
6.15). No gráfico é possível visualizar a coerência na evolução da expressão
dos genes. Salienta-se também o facto de um grupo de genes apresentar
uma evolução da expressão exactamente simétrica à dos restantes genes
(evoluções coerentes, mas simétricas). Nos casos em que a co-regulação
dos genes não é clara, é possível solicitar um novo gráfico com os valores
normalizados por gene (ver Figura 6.16).
A visualização do gráfico dos valores de expressão dos genes nas condições do bicluster origina algum interesse em visualizar o gráfico de expressão dos genes do bicluster em todas as condições da experiência e não
apenas nas condições do bicluster (Figura 6.17). O objectivo é permitir
a comparação da co-regulação dos genes nas condições do bicluster com
a não co-regulação dos mesmos genes nos instantes temporais que não
integram o bicluster. No gráfico do bicluster 10 (Figura 6.17) é visível a
sintonia da evolução do nível de expressão dos genes (co-regulação) entre
as condições t4 e t7 , exactamente o intervalo de tempo do bicluster, e a não
co-regulação dos genes entre os instantes temporais t1 e t4 .
O gráfico do padrão de expressão do bicluster 10 é concordante com o
96
Estudo de Caso
Figura 6.15: Gráfico de expressão do bicluster 10. Representa a expressão de todos os
seus genes nas suas condições.
Figura 6.16: Gráfico de expressão do bicluster 10 com os valores de expressão normalizados
por gene para média 0 e desvio padrão 1.
gráfico do seu padrão de expressão (ver Figura 6.18), permitindo uma visualização menos confusa e mais discreta da evolução do nível de expressão
dos genes ao longo dos instantes temporais.
6.8 Análise de Funções Biológicas
97
Figura 6.17: Gráfico de expressão dos genes do bicluster 10 em todas as condições da
experiência.
Figura 6.18: Gráfico do padrão de expressão do bicluster 10.
6.8
Análise de Funções Biológicas
Finalmente, veremos os resultados da análise de funções biológicas, consideradas estatisticamente significativas, efectuada em simultâneo com a
98
Estudo de Caso
aplicação do algoritmo CCC-Biclustering. Para uma observação global
dos p-values calculados para cada bicluster e do número de funções estatisticamente significativas correspondente, acedemos novamente ao grupo
de biclusters extraído pelo algoritmo CCC-Biclustering aplicado à matriz
discreta e seleccionamos a aba Function.
Figura 6.19: Tabela de funções biológicas para o grupo de biclusters calculadas usando
um theshold de 0.01 para o p-value corrigido pela correcção de Bonferroni. Os biclusters
com funções biológicas estatisticamente significativas são assinalados a verde.
A tabela apresentada pelo BiGGEsTS encontra-se na Figura 6.19 e apresenta, para cada bicluster: o número que o identifica, os números de genes
e condições que o compõem, o melhor p-value calculado (best p-value),
correspondente à função biológica atribuída ao bicluster que foi considerada como sendo a estatisticamente mais significativa, o melhor p-value
corrigido (best corrected p-value), depois de aplicada a correcção de Bonferroni para testes múltiplos, e o número de funções biológicas consideradas
estatisticamente significativas (significant functions), isto é, o número de
funções biológicas atribuídas ao bicluster que passaram o teste estatístico
depois da correcção de Bonferroni, pois têm um p-value corrigido inferior
a 0.01 (threshold abaixo do qual as funções biológicas são consideradas
estatisticamente significativas). Esta tabela pode depois ser recalculada
usando outro threshold para o p-value (ver Figura 6.19). As colunas desta
tabela podem ser também ordenadas por ordem crescente ou decrescente
6.8 Análise de Funções Biológicas
99
do valor de qualquer uma das suas colunas. É possível, por exemplo,
ordenar as linhas da tabela por ordem decrescente do número de funções
biológicas estatisticamente significativas e, assim, identificar os melhores
biclusters segundo este critério.
Vejamos, por exemplo, o bicluster 95, com 55 funções biológicas significativas encontradas para os seus 486 genes agrupados em 4 instantes
de tempo consecutivos. A visualização da tabela de funções biológicas
atribuídas a este bicluster, em particular, requer apenas a sua selecção na
árvore de dados e um click sobre a aba Function (ver Figura 6.20).
Figura 6.20: Tabela de funções biológicas para o bicluster 95. Estão assinaladas três
funções estatisticamente significativas: manutenção e assemblagem de subunidades ribossómicas de grandes dimensões, assemblagem de complexos proteína-ARN, processos
metabólicos primários.
A tabela de funções de um bicluster apresenta os seguintes dados para
cada função biológica: o identificador e a descrição da Gene Ontology,
o número de genes na população (experiência) e o número de genes no
bicluster anotados pela Gene Ontology com essa função, o p-value calculado
usando uma distribuição hipergeométrica em função dos valores anteriores
e do número total de genes na população e no bicluster e, por último, o
p-value corrigido pela correcção de Bonferroni para testes múltiplos (ver
Figura 6.20).
Entre as várias funções biológicas apresentadas e que podem ser atri-
100
Estudo de Caso
buídas aos genes deste bicluster (95), verificamos que apenas algumas são
consideradas estatisticamente significativas (ver Figura 6.20), por apresentarem um p-value corrigido inferior ao threshold que introduzimos aquando
da selecção das opções para a análise de funções (neste caso 0.01).
Para uma apresentação gráfica mais interessante destes dados, recorreremos à visualização das funções significativas segundo a hierarquia de
funções anotadas pela Gene Ontology representada num grafo dirigido. A
selecção da aba Significance Graph produz o resultado ilustrado na Figura
6.21.
Figura 6.21: Grafo de funções biológicas significativas do bicluster 95.
A classificação de funções da Gene Ontology considera três funções essenciais: componente celular, função molecular e processo biológico. Estas
funções englobam, por sua vez, outras funções mais específicas e assim sucessivamente. No grafo é apresentada a classificação de todas as funções
gerais que levam às funções significativas do bicluster em análise (bicluster
95). A coloração das funções significativas tem como objectivo realçá-las
em relação às restantes e pode ser interpretada da seguinte forma: as funções significativas que derivam da função geral de componente celular são
coloridas a roxo, as que têm origem na função molecular a amarelo e as
funções específicas de processos biológicos a verde. A intensidade da cor
roxa, amarela ou verde depende do valor de significância estatística encontrado para a função correspondente (ver Figura 6.21). Podemos depois
6.9 Pós-Processamento
101
exportar o gráfico nos formatos SVG e PNG.
Se considerarmos, por exemplo, que a análise apresenta demasiados
biclusters com funções significativas e que, de um modo geral, o número de
funções significativas para cada bicluster é demasiado elevado e queremos
que a análise de significância estatística seja mais restritiva, podemos voltar
a efectuar a análise de funções, utilizando desta vez um threshold para o
p-value inferior ao da primeira análise. Esta funcionalidade está acessível
a partir do painel da tabela de funções do grupo de biclusters, através de
um click no botão Recalculate (ver Figura 6.19).
6.9
Pós-Processamento
Para terminar, decidimos pós-processar o nosso grupo de biclusters. Com
o grupo seleccionado, pressionamos a aba Post-Processing e acedemos ao
respectivo painel de pós-processamento, no qual seleccionamos as opções:
filtragem de biclusters com menos de 5 genes e menos de 5 condições e
ordenação pelo p-value do padrão de expressão (ver Figura 6.22).
Figura 6.22: Painel de pós-processamento.
Após o pós-processamento, o grupo de biclusters ficou com apenas 124
biclusters, ordenados pelo p-value do padrão de expressão. Os identifica-
102
Estudo de Caso
dores dos biclusters originais são visíveis entre parêntesis, sempre que o
bicluster aparece (Figura 6.23).
Figura 6.23: Gráficos de expressão do grupo de biclusters pós-processado.
Capítulo 7
Conclusões e Trabalho Futuro
Pretende-se, através da ferramenta BiGGEsTS, disponibilizar à comunidade científica um conjunto de algoritmos de biclustering especialmente
desenvolvidos para análise de séries temporais de expressão genética.
Esta ferramenta deve permitir não só a execução dos algoritmos de
forma eficiente, mas também uma forma intuitiva de visualizar as matrizes de expressão, pré-processar os dados de entrada de acordo com
as características dos dados relativos ao problema, estudar os resultados
tendo em conta várias dimensões de análise e processá-los de acordo com
o tipo de conclusões biológicas que se pretendem inferir.
Uma ferramenta deste tipo será certamente útil a todos aqueles que trabalham com expressão genética e tentam encontrar mecanismos de regulação genética que possam posteriormente ser usados na difícil e importante
tarefa de inferência de redes de regulação genética.
Como trabalho futuro, seria interessante promover a implementação
de um módulo que permitisse a comparação de resultados obtidos por
aplicações de algoritmos distintos ou semelhantes com parametrizações
diferentes sobre os mesmos dados de expressão genética. A compatibilidade da entrada e saída de dados com o formato MAGE-ML (linguagem
XML para a definição de dados de expressão genética) é também um objectivo a atingir.
No seu estado actual, a ferramenta BiGGEsTS cumpre todos os requisitos propostos para os projectos do primeiro e segundo semestre. Após a
fase de testes, a ferramenta será disponibilizada à comunidade científica,
juntamente com a respectiva documentação, através do site desenvolvido
para o efeito. Será escrito e submetido para publicação na revista Bioinfor103
104
Conclusões e Trabalho Futuro
matics um artigo (application note) que apresente a aplicação e promova a
sua utilização e desenvolvimento.
Bibliografia
[1] P. Baldi and G. W. Hatfield. DNA Microarrays and Gene Expression. From
Experiments to Data Analysis and Modelling. Cambridge University
Press, 2002.
[2] A. Ben-Dor, B. Chor, R. Karp, and Z. Yakhini. Discovering local
structure in gene expression data: The order–preserving submatrix
problem. In Proc. of the 6th International Conference on Computacional
Biology, pages 49–57, 2002.
[3] Y. Cheng and G. M. Church. Biclustering of expression data. In Proc.
of the 8th International Conference on Intelligent Systems for Molecular
Biology, pages 93–103, 2000.
[4] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein. Introduction
to Algorithms. The MIT Electrical Engineering and Computer Science
Series. The MIT Press, 2nd edition, 2001.
[5] M.J.L. de Hoon, S. Imoto, J. Nolan, and S. Miyano. Open source
clustering software. Bioinformatics, 20(9):1453–1454, 2004.
[6] M. de Hooon.
Cluster 3.0.
http://bonsai.ims.utokyo.ac.jp/ mdehoon/software/cluster/software.htm, [July 9, 2007].
[7] J. P. Gonçalves. Relatório no 28-2007: BiGGEsTS, Biclustering Gene
Expression Time-Series. Technical report, Departamento de Informática, Universidade da Beira Interior, 2007.
[8] J. A. Hartigan. Direct clustering of a data matrix. Journal of the American
Statistical Association (JASA), 67(337):123–129, 1972.
105
106
BIBLIOGRAFIA
[9] L. Ji and K. Tan. Identifying time-lagged gene clusters using gene
expression data. Bioinformatics, 21(4):509–516, 2005.
[10] L. Lazzeroni and A. Owen. Plaid models for gene expression data.
Technical report, Stanford University, 2000.
[11] Y. Luan and H. Li. Clustering of time-course gene expression data
using a mixed-effects model with B-splines. Bioinformatics, 19(4):474–
482, 2003.
[12] S. C. Madeira and A. L. Oliveira. Biclustering algorithms for biological data analysis: a survey. IEEE/ACM Transactions on Computational
Biology and Bioinformatics, 1(1):24–45, January–March 2004.
[13] S. C. Madeira and A. L. Oliveira. CCC-Biclustering: A linear time algorithm for biclustering time series expression data. IEEE/ACM Transactions on Computational Biology and Bioinformatics (submitted), 2007.
[14] S. C. Madeira and A. L. Oliveira. An efficient biclustering algorithm
for finding genes with similar patterns in time-series expression data.
In Proc. of the 5th Asia Pacific Bioinformatics Conference (to appear), 2007.
[15] B. Mirkin. Mathematical Classification and Clustering. Nonconvex Optimization and its Applications. Kluwer Academic Publishers, 1996.
[16] R. Peeters. The maximum edge biclique problem is NP-complete.
Discrete Applied Mathematics, 131(3):651–654, 2003.
[17] R. G. Pensa, C. Leschi, J. Besson, and J. Boulicaut. Assessment of
discretization techniques for relevant pattern discovery from gene
expression data. In 4th Workshop on Data Mining in Bioinformatics,
2004.
[18] R. G. Pensa, C. Robardet, and J. F. Bolicaut. A Bi-clustering Framework
for Categorical Data. Technical report, INSA Lyon - LIRIS CNRS UMS
5205, INSA Lyon - PRISMa EA INSA UCBL 2058, 2005.
[19] R. G. Pensa, C. Robardet, and J.F. Boulicaut. Towards Constrained Coclustering in Ordered 0/1 Data Sets. In Foundations of Intelligent Systems
- Proceedings of the 16th International Symposium on Methodologies for
Intelligent Systems (ISMIS’06), pages 425–434, 2006.
BIBLIOGRAFIA
107
[20] A. J. Saldanha. Java Treeview: extensible visualization of microarray
data. Bioinformatics, 20(17):3246–3248, 2004.
[21] L. Shi. Design of a DNA Microarray System. http://www.genechips.com, [January 31, 2007].
[22] R. Stears, T. Martinsky, and M. Schena. Trends in Microarray Analysis.
Nature Medicine, 9(1):140–145, 2003.
[23] Y. Zhang, H. Zha, and C. H. Chu. A time-series biclustering algorithm
for revealing co-regulated genes. In Proc. of the 5th IEEE International
Conference on Information Technology: Coding and Computing, pages 32–
37, 2005.
Download

BiGGEsTS - ALGOS Group