====== Flaviane Lopes Ferreira ======
{{:bie5782:01_curso_atual:alunos:trabalho_final:flalopesferreira:dsc00087.jpg?200 |}}
Mestrado em Botânica, Instituto de Biociências, USP.
[[.:exec]]
**Trabalho Final**
**Proposta A**
Os processos biológicos são frequentemente representados sob a forma de redes, tais como a redes de interação proteína-proteína e vias metabólicas. O estudo das redes biológicas, sua modelagem, análise e visualização são tarefas importantes nas ciências da vida hoje. Um entendimento destas redes é essencial para saber o sentido biológico de grande parte dos dados complexos que está sendo gerado. Esta crescente importância das redes biológicas é também evidenciado pelo rápido aumento de publicações sobre temas relacionados com a rede e o número crescente de grupos de pesquisa relacionadas com esta área. A visualização da rede é um método fundamental que ajuda cientistas na compreensão das redes biológicas e em descobrir propriedades importantes dos processos bioquímicos subjacentes (Bachmaier et al.,2013). A rede é compostas por nós e links. Em redes biológicas, os nós representam genes, proteínas ou metabólitos, enquanto os links representam as interações entre eles. As redes de co-expressão gênica visa entender a associação ou correlação entre os genes através de dados advindos por exemplo do RNA-Seq ou microarranjo.
Assim, a primeira proposta visa criar uma função que gere redes de co-expressão de genes a partir do conjunto de dados do RNA-Seq. A função usará um dataframe contendo os genes e seus respectivos valores de expressão. A partir destes dados será gerado uma matriz de correlação, podendo ter como argumento a correlação de pearson ou spearman. Depois é criado uma matriz de adjacência (0 e 1). Após este procedimento, será possível estabelecer um p-value para retirar somente as correlações que são significantes dentro da rede. A função retornará uma janela gráfica com a rede de co-expressão de genes.
**Referência**
Bachmaier C, Brandes U, Schreiber F. Biological Networks. 2013. In: Tamassia R, ed. Handbook of Graph Drawing and Visualization. CRC Press, pp.621-651.
Junker Bj¨orn H. Networks in Biology. 2008.In: Junker Bj¨orn H, Schreiber Falk, eds. Analysis of Biological Networks. John Wiley & Sons, New Jersey, pp.3-14.
**Proposta B**
A segunda proposta visa utilizar um conjunto de dados de atividade enzimática de fungos filamentosos para uma análise exploratória dos dados. A função terá como entrada um dataframe, e no final a função retornará um conjunto de gráficos como boxplot, barplot, histograma e quantil-quantil para avaliar os dados.
=== COMENTÁRIOS PROPOSTA MELINA ===
em 28/abr/16
A proposta A é simples, razoável e plausível. O monitor Diogo sugeriu você dar uma olhada no pacote igraph para fazer a figura da rede. Seria bom a função retornar objetos com os resultados das correlações, caso o usuário queira guardar essa informação. Também sugiro dar uma olhada na função pairs e diversas variantes dela existentes no R, talvez seja útil mas não necessariamente.
A proposta B é ruim, sem sentindo de ser colocada em uma função. Sugiro fazer a proposta A mesmo.
====Código da Função=====
==== Função co.expr.network ====
co.expr.network<-function(x,method="pearson", p.value=0.05, node.color="orange1",link.color=c("black","gray 50"), link.line=c("solid","dotted"), plot=T) ## Argumentos da função
{
## Transpõe os dados para que cada coluna seja um gene
expr<- t(x[,-1])
## Coloca os nomes nas colunas e linhas da tabela de expressão
colnames(expr)<-x[,1]
## Cria uma matrix de correlação par-a-par de cada gene para o método de correlação escolhido - "pearson" ou "spearman"
corr<-cor(expr,method= method)
## Coloca 0 nas diagonais
diag(corr)<-0
## Cria um arquivo com as correlações entre os genes
write.csv(corr,file="correlação.csv")
# Indica condição para plotar os scatterplots. Aqui o usuário tem a opção de fazer ou não os scatterplots, T = indica para fazê-los e F = indica para não fazê-los.
if(plot==T){
## Faz um loop para poder criar os scatterplots da matriz de correlação entre os genes. Aqui o usuário precisa mudar para o número de genes que ele tem.
for(i in c(0,10,20)){
## Abre uma janela gráfica
X11()
##Faz os scatterplots da correlação entre os genes através da matriz de correlação
pairs(corr[(i+1):(i+10),(i+1):(i+10)],lower.panel=panel.smooth, upper.panel=panel.smooth, pch=1,cex.labels =1.0, cex.axis=1.0, font.labels =1.0)
}
}
## Constrói uma matriz vazia para p-valores com os dados de expressão dos genes
pcorr<-matrix(NA,ncol(expr),ncol(expr))
## Faz um loop para percorrer a matriz
for(i in 1:ncol(expr)){
## Faz um loop para percorrer a matriz
for(j in 1:ncol(expr))
## Calcula do p-valor para correlação entre dois genes
pcorr[i,j]<-cor.test(expr[,i],expr[,j])$p.value
}
## Coloca o nome dos genes nas colunas da tabela de p-valor
colnames(pcorr)<-x[,1]
## Coloca o nome dos genes nas linhas da tabela de p-valor
rownames(pcorr)<-x[,1]
## Cria um arquivo do p-valor entre os genes
write.csv(pcorr,file="p-valor.csv")
## Verifica o p-valor abaixo do estabelecido para cada gene, e assim até alcançar o término da dimensão da matrix
for(i in 1:dim(corr)[1]){
## Verifica o p-valor abaixo do estabelecido para cada gene,e assim até alcançar o término da dimensão da matrix
for(j in 1:dim(corr)[1]){
## Se na tabela de pcorr,os p-valores de um par de genes for maior ao p-valor estabelecido ou quando os valores são missing values, coloca zero na tabela de correlação. Removendo assim o link que existiria entre dois genes.
if(pcorr[i,j]>=p.value | is.na(pcorr[i,j])) corr[i,j]=0
}
}
## Carrega o igraph
library(igraph)
## Constrói a rede a partir de uma matriz de adjacência
g<- graph.adjacency(corr,mode="undirected",weighted=T)
##Cria uma lista de links entre os genes a partir da matriz de adjacência (g)
a<-as_edgelist(g)
## Cria um objeto c com NA dentro
c<-NA
## Faz um loop da lista entre os genes da matriz de adjacência (g)
for(i in 1:nrow(a)){
##Verifica o p-valor para estes gene e coloca no objeto c
c[i]<-pcorr[which(colnames(corr)==a[i,1]),which(colnames(corr)==a[i,2])]
}
## Adiciona o p-valor para o objeto c
E(g)$pvalue<-c
## Adiciona o nome dos genes
colnames(pcorr)
##Deixa a correlação positiva e negativa na lista de genes da matriz de adjacência (g)
E(g)$peso<-E(g)$weight
# Deixa a correlação em valores absolutos
E(g)$weight<-abs(E(g)$weight)
## Cria uma lista de links entre os genes
links<-get.edgelist(g, names=TRUE)
## Adiciona a correlação com sinal
cor<- E(g)$peso
## Adiciona o p-valor < 0.05
pvalue<-E(g)$pvalue
## Liga os diferentes objetos e coloca em uma lista
lista<-cbind(links,cor,pvalue)
## Cria um arquivo da rede dos genes com a correlação e o p-valor < 0.05
write.csv(lista,file="lista_rede.csv")
##Estabelece o layout do gráfico da rede. Este layout é o default da função.
layout <- layout.kamada.kawai(g)
## Dá as coordenadas do layout de x e y
layout<- norm_coords(layout, ymin=-1, ymax=1, xmin=-1, xmax=1)
## Estabelece a cor dos nós do gráfico da rede
V(g)$color<-node.color
## Faz um loop da matriz de correlação
for(i in 1:length(E(g)$peso)){
## Se a correlação for > 0, coloca a cor preta.
if(E(g)$peso[i]>0) E(g)$color[i]<-link.color[1]
## Caso a correlação seja < 0, adiciona a cor cinza.
else E(g)$color[i]<-link.color[2]
}
## Faz um loop da matriz de correlação
for(i in 1:length(E(g)$peso)){
## Se a correlação for > 0, coloca uma linha sólida entre a correlação entre os genes.
if(E(g)$peso[i]>0) E(g)$lty[i]<-link.line[1]
## Caso a correlação seja < 0, coloca uma linha pontilhada entre a correlação entre os genes.
else E(g)$lty[i]<-link.line[2]
}
## Abre uma janela gráfica
X11()
## Faz o gráfico da rede com genes que tem o p-valor < 0.05
plot.igraph(g,vertex.size=20,vertex.label.color="black", vertex.label.cex=0.75, rescale=F, layout=layout*0.97, edge.width=2)
## Retorna a lista de genes com os valores de correlação e p-valor da rede toda,e uma lista da rede com as correlações no qual o p-valor é < 0.05
return(list(correlacao=corr,p.valor=pcorr,lista=lista))
}
====Arquivo da Função====
{{:bie5782:01_curso_atual:alunos:trabalho_final:flalopesferreira:funcao.r|}}
====Página Help====
co.expr.network package:unknown R Documentation
Cria uma rede de co-expressão de genes a partir de uma conjunto dados do RNA-Seq.
Description:
Esta função cria uma rede de co-expressão a partir de um dataframe que contém os valores de expressão de cada gene. Esses valores de expressão gênica é usado para criar uma matriz de correlação que pode ter como método a correlação de Pearson ou Spearman. Além disso, é possível estabelecer um p-valor para selecionar as correlações que são mais significantes na rede. A função retorna para o usuário os arquivos da correlação e p-valor de todos genes, scatterplots da matriz de correlação, uma lista de ligações entre os genes para o p-valor estabelecido, bem como uma janela gráfica da rede.
Usage:
co.expr.network<-function(x=,method="pearson", p.value=0.05, node.color="orange1",link.color=c("black","gray 50"), link.line=c("solid","dotted"), plot=T)
Arguments:
x É um dataframe.
method Método de correlação usado para análise dos dados. A correlação de Pearson é o padrão, mas pode ser usada a correlação de Spearman.
p.value Valor numérico para selecionar as correlações mais significantes na rede.
node.color Define a cor dos nós na rede.
link. color Define a cor dos links entre os nós.
link.line Define o tipo de linha do link entre os nós.
plot Define se os scatterplots da função pairs será feito ou não.
Details:
É necessário o download do pacote igraph.
Value:
Quando o dataframe é inserido na função, é retornado ao usuário a matriz e os scatterplots da correlação, a matriz com o p-valor, uma lista de ligações entre os genes - onde o p-valor seja abaixo de 0.05, e uma janela gráfica da rede.
Author(s):
Flaviane Lopes Ferreira
flalopesferreira@hotmail.com
Example:
gene.expression <-read.csv("~/Desktop/Funcao/Genes_expression.csv", header = F)
result<-co.expr.network(gene.expression,method="pearson", p.value=0.05, node.color="orange1",link.color=c("black","gray 50"), link.line=c("solid","dotted"), plot=T)
====Arquivo para Teste====
{{:bie5782:01_curso_atual:alunos:trabalho_final:flalopesferreira:genes_expression.csv|}}