7  RedeR Workflow

Instalar o pacote RedeR (caso já tenha instalado, não rodar estas linhas)

if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install("RedeR")

7.1 Carregue o pacote RedeR

library(RedeR)
library(igraph)

Este exercício foi feito baseado na vinheta do RedeR. Use-o para tirar dúvidas.

vignette('RedeR')

Inicie o aplicativo RedeR:

# Se sua versão do RedeR for > v. 3.0
RedeR::startRedeR()

#Se sua versão do RedeR for < 3.0
rdp <- RedPort()
calld(rdp)

Armazene os dados de expressão diferencial ‘ER.limma’ e os dados do interatoma ’hs.inter’em outros objetos

data(ER.limma)
data(hs.inter)

ER.limma é o resultado de uma análise de expressão diferencial, que veremos adiante nesta disciplina. Basicamente, a análise de expressão visa comparar a expressão de genes em diferentes estados celulares e identificar quais genes tem aumento da expressão e quais genes tem expressão diminuída de uma condição para outra.

Neste experimento, células epiteliais mamárias foram estimuladas com estrógeno por 3, 6 e 12 horas. O que buscaremos aqui é a comparação da expressão em uma determinada hora com a hora inicial (hora 0).

O dataframe ER.limma possui colunas com os identificadores dos genes (ENTREZ id e gene symbol), o fold change da variação da expressão (valores positivos indicam que o gene está upregulado, enquanto que valores negativos indicam que o gene está downregulado) para cada comparação de tempo, os p-valores associados a cada inferência e as colunas degenes, que mostram quais genes estão diferencialmente expressos (1 = gene upregulado, 0 = gene não está diferencialmente expresso, -1 = gene downregulado).

Por exemplo: a coluna ‘logFC.t3’ mostra a mudança na expressão de um determinado gene (as linhas da tabela) da terceira hora com relação à hora 0. A coluna ‘degenes.t3’ mostra qualitativamente se aquele gene em questao é diferencialmente expresso na comparação 3h-0h.

dt <- ER.limma
gi <- hs.inter

Vamos construir subgrafos que representem a expressão dos genes nas comparações 3h-0h, 6h-0h e 12h-0h.

3h

gt3 <- subg(g=gi, dat=dt[dt$degenes.t3!=0,], refcol=1)
gt3 <- att.setv(g=gt3, from="Symbol", to="nodeAlias")
gt3 <- att.setv(g=gt3, from="logFC.t3", to="nodeColor", breaks=seq(-2,2,0.4), pal=2)

6h

gt6 <- subg(g=gi, dat=dt[dt$degenes.t6!=0,], refcol=1)
gt6 <- att.setv(g=gt6, from="Symbol", to="nodeAlias")
gt6 <- att.setv(g=gt6, from="logFC.t6", to="nodeColor", breaks=seq(-2,2,0.4), pal=2)

12h

gt12 <- subg(g=gi, dat=dt[dt$degenes.t12!=0,], refcol=1)
gt12 <- att.setv(g=gt12, from="Symbol", to="nodeAlias")
gt12 <- att.setv(g=gt12, from="logFC.t12", to="nodeColor", breaks=seq(-2,2,0.4), pal=2)

A função subg() do pacote RedeR cria subgrafos a partir de um grafo existente, extraindo um subconjunto de nós e conexões com base em critérios específicos. O argumento dat=dt[dt$degenes.t3!=0,] filtra o data frame dt, incluindo apenas as linhas onde a coluna degenes.t3 é diferente de zero (genes diferencialmente expressos).

A função att.setv() do pacote RedeR atribui valores a atributos dos vértices (nós) em um grafo. O argumento g representa o grafo ao qual os atributos serão atribuídos, enquanto from especifica o nome do atributo a ser modificado e to define os valores que serão atribuídos a esse atributo para os respectivos nós.

Agora que contruimos os subgráficos, vamos adicioná-los à interface gráfica do RedeR:

# Se a versão do RedeR for > 3.0 a função será addGraphToRedeR()
addGraph(rdp, gt3, gcoord=c(10,25), gscale=20, isNest=TRUE, theme= 'tm1' , zoom=30)
addGraph(rdp, gt6, gcoord=c(20,70), gscale=50, isNest=TRUE, theme= 'tm1' , zoom=30)
addGraph(rdp, gt12, gcoord=c(70,55), gscale=80, isNest=TRUE, theme= 'tm1' , zoom=30)

Vamos construir o subgrafos aninhados, ou seja, vamos sobrepor as séries temporais.

nestNodes(rdp, nodes=V(gt3)$name, parent="N1", theme= 'tm2')
nestNodes(rdp, nodes=V(gt6)$name, parent="N2", theme= 'tm2')
nestNodes(rdp, nodes=V(gt3)$name, parent="N4", theme= 'tm3')

O argumento ‘theme’ determina os temas (‘tm0’,‘tm1’,‘tm2’,‘tm3’,‘tm4’,‘tm5’, ‘tm6’) de apresentação dos ninhos. Experimente mudá-los e rode novamente os comandos acima.

Vamos concatenar as arestas que estão fora dos ninhos.

mergeOutEdges(rdp)

Relaxar a rede

relax(rdp,50,400)

Perceba que temos 3 grandes redes aninhadas: N0, que é um subgrafo mostrando os genes diferencialmente expressos na comparação 3-0h, o N1, que possui os subgrafos das comparações 3-0h e 6h-0h, e a N2 que possui os subgrafos das comparações 3-0h, 6-0h e 12-0h.

Agora vamos adicionar uma legenda:

scl <- gt3$legNodeColor$scale 
leg <- gt3$legNodeColor$legend 
addLegend.color(rdp, colvec=scl, labvec=leg, title="Downregulated - Upregulated")

Observe a rede formada. O que as cores dos nós representam?

As cores dos nós na rede representam a regulação gênica, onde azul indica genes downregulados e vermelho indica genes upregulados, refletindo sua expressão diferencial.

Para resetar a interface grafica:

resetd(rdp)