====== Vinícius JC====== Eu me chamo Vinícius Jardim Carvalho, sou aluno de graduação do IB USP. Estou no [[http://www.lafieco.com.br/|Laboratório de fisiologia Ecológica]] (LAFIECO) trabalhando com análise de dados fisiológicos através da teoria de redes. Utilizar o R será muito importante para facilitar alguns passos dessas análise. ====== Exercícios ====== [[.:exec]] ====== Minha proposta ====== **Plano A:** Minha primeira proposta é usar o R para realizar os passos de análise de dados que faço em meu laboratório. Primeiramente, tenho uma tabela de valores de medidas de metabólitos ao longo do tempo. Essa seria minha tabela, mas essa função poderia usar qualquer data-frame em que a intenção seja fazer correlações entre variáveis numéricas. E podem ser feitas também com relação a alguma variável fator, por exemplo montar uma rede para inicio e outra para o fim do experimento, colocando apena uma tabela. A partir dessa tabela seria montada uma matriz de correlação de pearson ou spearman, definida nos argumentos. Na tabela de correlação seria aplicado um teste lógico, para correlações maiores que **X** e menores que **Y**. Obtendo-se a Matriz de adjacência(matriz de 0 e 1). Caso o usuário já tenha a matriz de correlação ele pode usá-la direto na função e colocar os seus padrões de quais ele quer, com relação ao valor da correlação(por exemplo de 0,7 até 1), como um argumento da função. Se ele tiver a matriz de correlação ou a matriz de adjacência, pode colocar nos argumentos(no caso, Lógicos) da função que teriam o padrão FALSE. Nesta matriz será aplicado um teste de robustez como cross-validation ou leave-one-out, escolhidos nos argumentos. Obtendo uma nova matriz de adjacência que irá gerar a rede final. A rede deve ser construída com base nos valores da matriz de adjacência, após o teste de robustez. Ultima revisão: 29/03/2013 ===== Comentários ===== Sua função parece ser aplicável a diferentes casos em que se quer construir uma rede, então tome cuidado para não restringir para seus dados. Não entendo do assunto, mas você parece saber fazer cada um desses passos na mão com clareza. Já que você propõe duas opções de teste de robustez, esse poderia ser um argumento para que o usuário escolha o método que prefere. Para mim não ficou claro qual será esse produto final (grafo/rede). É importante esclarecer o que o usuário irá obter com a função. Talvez haja mais algum dado interessante que ele quisesse ver no final (?). Você propôs apenas a opção A porque quer usá-la em seu projeto, mas tenha mais alguma coisa em mente caso encontre problemas ao desenvolver essa proposta. --- //[[tauanajc@gmail.com|Tauana Junqueira da Cunha ]] 2013/03/20 10:26// ===== Comentários 2 ===== Smeg, os passos estão bem mais claros! Vai ser tranquilo vc montar a função. Como vc disse que a pessoa poderá começar com uma tabela ou com uma matriz, tome cuidado na hora de criar os argumentos e o desenrolar dos mesmos dentro da função para que ela não dê problemas quando o usuário entra com um tipo de arquivo ou o outro. A única coisa que ainda não está clara para mim é o que é a rede e como construí-la a partir da matriz de adjacência. E esse passo é importante, afinal, é o objetivo final da função. Mas se vc tem isso claro na sua cabeça, manda bala e eu vejo o resultado quando vc entregar a função =) Ah, use essa caixa de texto só para o código e o help. A proposta é melhor ficar no texto normal, como estava a primeira versão. --- //[[tauanajc@gmail.com|Tauana Junqueira da Cunha ]] 2013/04/01 09:43// ===== Minha Função ===== ==== Código ==== cor.network<-function(x,dado="tabela",corr="spearman",vcor=0.4,pint=5){ if(dado=="tabela"){ ##caso o usuário insira uma tabela de medidas de variaveis. tabela<-na.omit(x) ##Exclui linhas com NA mat.cor<-cor(tabela,method=corr) ## Faz a correlação desejada entre as variáveis. matrix.adj<-mat.cor matrix.adj[matrix.adj>=abs(vcor)&matrix.adj<=abs(1)]<- 1 ##Transforma a matrix de correlação em matrix de adjacência. matrix.adj[matrix.adj(1)]<- 0 ## Acima dos valores de vcor igual a 1, abaixo igual a 0. matrix1<-matrix(0,nrow(matrix.adj)-1,ncol(matrix.adj))## Cria a matrix nula para teste. for(i in 1:nrow(matrix.adj)){ matrix1=matrix1+matrix.adj[-i,] } ## Ciclo que soma as matrizes, teste de leave-one-out. a=c(0,matrix1[,1]) for(f in 1:(nrow(matrix1)-1)){ b = c(matrix1[1:f,(f+1)],0,matrix1[(f+1):nrow(matrix1),(f+1)]) a<-cbind(a,b) } b=c(matrix1[,ncol(matrix1)],0) a<-cbind(a,b) ##transforma a matrix criada acima(matriz nrow=ncol-1) em uma matriz quadrada. mat.final<-a mat.final[mat.final=nrow(mat.final)*pint/100]<-1 ##tem q ser nesta ordem. rownames(mat.final)<-rownames(matrix.adj) colnames(mat.final)<-colnames(matrix.adj) } if(dado=="cor"){ ## Quando o usuário insere uma matriz de correlação ## Faz os mesmos procedimentos acima porém a partir da etapa de correlação. matrix.adj<-x matrix.adj[matrix.adj>=abs(vcor)&matrix.adj<=abs(1)]<- 1 matrix.adj[matrix.adj(1)]<- 0 matrix1<-matrix(0,nrow(matrix.adj)-1,ncol(matrix.adj)) for(i in 1:nrow(matrix.adj)){ matrix1=matrix1+matrix.adj[-i,] } a=c(0,matrix1[,1]) for(f in 1:(nrow(matrix1)-1)){ b = c(matrix1[1:f,(f+1)],0,matrix1[(f+1):nrow(matrix1),(f+1)]) a<-cbind(a,b) } b=c(matrix1[,ncol(matrix1)],0) a<-cbind(a,b) mat.final<-a mat.final[mat.final=nrow(mat.final)*pint/100]<-1 ##tem q ser nesta ordem. rownames(mat.final)<-rownames(x) colnames(mat.final)<-colnames(x) } if(dado=="adj"){ ## Quando o usuário insere uma matriz de adjacência ## Faz os mesmos procedimentos acima porém faz apenas o leave-one-out. matrix.adj<-x matrix1<-matrix(0,nrow(matrix.adj)-1,ncol(matrix.adj)) for(i in 1:nrow(matrix.adj)){ matrix1=matrix1+matrix.adj[-i,] } a=c(0,matrix1[,1]) for(f in 1:(nrow(matrix1)-1)){ b = c(matrix1[1:f,(f+1)],0,matrix1[(f+1):nrow(matrix1),(f+1)]) a<-cbind(a,b) } b=c(matrix1[,ncol(matrix1)],0) a<-cbind(a,b) mat.final<-a mat.final[mat.final=nrow(mat.final)*pint/100]<-1 ##tem q ser nesta ordem. rownames(mat.final)<-rownames(matrix.adj) colnames(mat.final)<-colnames(matrix.adj) } library("igraph", lib.loc="C:/Users/Vinicius JC/Documents/R/win-library/2.15") g <- graph.adjacency(mat.final,mode="undirected") x11() plot(g) ## constrói a rede com base na matriz de adjacência. return(mat.final) } ==== Help da função ==== cor.network Pacote:nenhum R Documentation Cria uma rede de correlações entre parâmetros, a partir das variáveis colocadas em uma tabela. Description: A função cria uma rede de correlações e uma matriz de adjacência a partir de uma tabela de medida de variáveis, ou de uma matriz de correlação ou de uma matriz de adjacência. Quando se insere uma tabela de medidas de variáveis a função calcula a correlação entre elas, transforma essa matriz de correlação em uma matriz de adjacência, faz um teste de robustez nessa matriz e a partir desse resultado produz outra matriz de adjacência que servirá para construir a rede. Usage: cor.network(x,dado="tabela",corr="spearman",vcor=0.4,pint=5) Arguments: x Dado a ser iserido para análise, pode ser um data.frame, ou uma matriz. Dependendo de o que será analisado. dado Caracter string que diz o que deverá ser feito com o objeto inserido. O padrão "tabela" realiza todo o processo de análise. Pode ser colocado "cor", que indicará para a função que está sendo inserida uma matriz de correlação, então ele realiza o processo após a etapa de cronstrução de uma matriz de correlação. Também pode ser inserido "adj", indicando que foi colocada uma matriz de adjacencia, então realiza-se a análise a partir desta etapa. corr Caracter string que indica qual coeficiente de correlação será computado. Pode ser usado, "spearman" (padrão), "pearson", ou, "kendall". vcor Caracter numérico que varia de 0 à 1. Este argumento é utilizado na transformação da matriz de correlação em matriz de adjacência (matriz de 0 e 1). Definindo, assim, qual será o valor de correlação acima do qual deverá se considerar 1 e abaixo dele considera-se 0. Valor módulo de 0.4 é o padrão. pint Argumento numérico que varia de 0 à 100. Indica a porcentagem de interações em que certa correlação deve aparecer. Essa é a etapa da análise de robustes por Leave-one-out. Details: A função só constrói uma rede com base em dados de correlação, ou com base em uma matriz de adjacência. Ela exige o download do pacote igraph. Value: Sendo inserido, tanto a tabela, a matriz de correlação ou a matriz de adjacência, será retornado uma matriz de adjacência e a figura de uma rede indicando a ligação entre as variáveis. Author(s): Vinicius Jardim Carvalho viniciusjcarvalho@hotmail.com Example: Tabela<-cbind(matrix(rnorm(200,3,6),20,10),matrix(rnorm(200,8,6),20,10)) ## cria uma tabel de valores aleatórios result<-cor.network(Tabela) ==== Arquivos ==== Arquivo com a função final e com os comandos para rodar o arquivo abaixo, também com comandos para teste da função. {{:bie5782:01_curso_atual:alunos:trabalho_final:vinicius.jardim.carvalho:função_final.r|Função Final}} Arquivo usado para rodar a função. {{:bie5782:01_curso_atual:alunos:trabalho_final:vinicius.jardim.carvalho:folha.csv|Arquivo para teste}}