Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2013:alunos:trabalho_final:vinicius.jardim.carvalho:start

Vinícius JC

Eu me chamo Vinícius Jardim Carvalho, sou aluno de graduação do IB USP. Estou no 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

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. — 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. — 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<abs(vcor)|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]<-0 ## Transforma a matriz criada acima em uma matriz de 1 e 0.
        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<abs(vcor)|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]<-0 
          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]<-0 
          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.

Função Final

Arquivo usado para rodar a função.

Arquivo para teste

05_curso_antigo/r2013/alunos/trabalho_final/vinicius.jardim.carvalho/start.txt · Última modificação: 2020/08/12 06:04 (edição externa)