Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2013:alunos:trabalho_final:paulaaprigio:start

Ana Paula Aprígio Assis

wiki.jpg

Doutorado em Genética e Biologia Evolutiva na Universidade de São Paulo

Tenho interesse na área de evolução morfológica e processos evolutivos. Durante meu doutorado pretendo analisar os efeitos de mudanças ecológicas e ambientais na morfologia craniana de um grupo de espécies. Para isso utilizarei espéciemes coletados nas mesmas localidades com diferença de 100 anos entre as coletas. As espécies a serem estudadas serão primariamente roedores da família Sciuridae (esquilos). A ideia é, não só analisar os padrões de mudanças, como também os processos responsáveis por estas. O título da minha tese é “Evolução morfológica em séries temporais: um estudo de caso com as comunidades de mamíferos do Projeto Grinnell” orientada por Gabriel Marroig.

Meus Exercícios

Linque para a página com meus exercícios resolvidos exec

Trabalho Final

Proposta 1

Quero criar uma função que calcule para um determinado conjunto de dados matrizes de V/CV (com algum argumento para conseguir controlar efeitos de variação que não seriam de imediato interesse) e destas matrizes também calcule matrizes de correlação. A minha super função ainda pegaria estas matrizes do correlação e calcularia um índice de magnitude geral das correlações (índice r2, bastante usado em estudos de integração morfológica pois indica o grau de integração total de caracteres morfológicos). O pulo do gato e a parte mais legal da minha função será que ela vai fazer reamostragens (cerca de1000) mantendo o tamanho da amostra constante (bootstrap) a fim de calcular a significância estatística deste valores de r2.Se tudo correr bem até aqui minha função também já retornará um histograma com os valores calculados a partir da reamostragem de r2.

Proposta 2

Quero criar uma função que automaticamente pegue um conjunto de dados calcule a matriz de V/CV e extraia os componentes principais desta matriz. Depois, minha função calcularia para cada observação o score desta nos primeiros componentes principais (quantos eu ainda não decidi).Além disso, minha função calcularia vetores de mudanças, isto é calcularia a diferenças entre as médias das observações entre dois grupos (no meu caso estes vetores correspondem a mudança morfológica ocorrida em um determinado tempo). Estes vetores de mudanças seriam correlacionados entre si e com os componentes principais extraídos anteriormente. O output seria uma matriz com os valores de correlações entre os diferentes vetores e na diagonal valores da norma de cada vetor (importante no meu caso pois é uma indicação do tamanho do vetor e assim da quantidade de mudança morfológica que o grupo em questão sofreu).

Comentários

Oi Ana! Gostei das propostas, ambas são factíveis e acho a primeira mais emocionante! Minha sugestão ao implementar o bootstrap é decidir se irá reamostrar a matrix de V/CV ou os dados de cada variável. A primeira é possível e mais complexa (já fiz, mas não me lembro, acho que usei um algorítmo do livro do Legendre, Numerical Ecology). A segunda vc pode permutar apenas as colunas ou linhas onde estão as variáveis antes do cálculo da V/CV. Para fazer isso de uma só vez sem ciclos use:

apply(matrizV/CV, 2, sample, replace=TRUE) 

## nesse exemplo vc. remostra os valores dentro das colunas colunas com reposição, isso poupa muito tempo de processamento. Reamostragem de matrizes de dados demoram um tempo para processar usando ciclos os com for() Bom trabalho! — Alexandre Adalardo de Oliveira 2012/04/03 18:33

Apresentação do trabalho final- Proposta 1

Código da função

r2.ic<- function(grupo1, grupo2, reamostragem= 1000)
{
grupo1<- as.matrix(grupo1)
cor.obs1 <- cor(grupo1, y=NULL, method="pearson")
cor.quad1<- (cor.obs1[lower.tri(cor.obs1)])^2
r2.obs.1<- (sum(cor.quad1))/length(cor.quad1)
r2.est.1<- c()
nr1<- dim(grupo1)[1]

grupo2<- as.matrix(grupo2)
cor.obs2 <- cor(grupo2, y=NULL, method="pearson")
cor.quad2<- (cor.obs2[lower.tri(cor.obs2)])^2
r2.obs.2<- (sum(cor.quad2))/length(cor.quad2)
r2.est.2<- c()
nr2<- dim(grupo2)[1]

for (i in 1:reamostragem)
{
  
  grupo.1<- grupo1[sample.int(nr1, replace=TRUE),]
  cor.est.1<- cor(grupo.1, y=NULL, method= "pearson")
  cor.quad.1<- (cor.est.1[lower.tri(cor.est.1)])^2
  com1<- length(cor.quad.1)
  r2.est.1 [i]<- (sum(cor.quad.1))/com1
}
for (j in 1:reamostragem)
{
  grupo.2<- grupo2[sample.int(nr2, replace=TRUE),] 
  cor.est.2<- cor(grupo.2, y=NULL, method= "pearson")
  cor.quad.2<- (cor.est.2[lower.tri(cor.est.2)])^2
  com2<- length(cor.quad.2)
  r2.est.2 [j]<- (sum(cor.quad.2))/com2
}
par (mar=c(5,4,4,3.5))
limites<- range(r2.est.1, r2.est.2)
plot(density(r2.est.1), main="curva de densidade estimada", xlab= "valores de r2", ylab= "densidade", 
     xlim=limites,ylim=c(0,70), col="blue")
abline(v=r2.obs.1, col="blue")
quantil.1 <- quantile(r2.est.1, probs= c(0.025,0.975))
abline(v=quantil.1[1], lty=2, col="blue")
abline(v=quantil.1[2], lty=2, col="blue")
par(new=TRUE)
plot(density(r2.est.2), main="", xlab= "", ylab= "", xlim=limites, ylim=c(0,70), col="red")
abline(v=r2.obs.2, col="red")
quantil.2<- quantile(r2.est.2, probs= c(0.025,0.975))
abline(v=quantil.2[1], lty=2, col="red")
abline(v=quantil.2[2], lty=2, col="red")
mtext(text= c("grupo 1", "\n grupo 2"),col= c("blue", "red"), side=1, line=1.5, adj=0, padj=1)
vetor.resultados<- list(r2.obs= c(r2.obs.1,r2.obs.2), dist1= c(r2.est.1), 
                        dist2= c(r2.est.2), IC=c(grupo1= quantil.1, grupo2= quantil.2))
return(vetor.resultados)
}

Página de ajuda

  r2.ic                                       	pacote: pacotes_lem			    R Documentation
  
  Descrição
      	Esta função serve para comparar os valores de indíces de integração morfológica total (r2) entre dois grupos. 
        Para isso ela calcula a partir de dados morfométricos matrizes de correlação para cada grupo,e a partir destas matrizes os valores de r2 empíricos.
        Além disso, a função calcula através de uma reamostragem das observações por booststrap os intervalos de confiança de 95% para estes valores de r2.
  
  Uso
        r2.ic(grupo1, grupo2,reamostragem)
  
  Argumentos
        grupo 1 	um data frame ou matriz contendo os valores das variáveis do primeiro grupo que serão usadas para calcular a matriz de correlação e r2
        
        grupo 2		um data frame ou matriz contendo os valores das variáveis do segundo grupo que serão usadas para calcular a matriz de correlação e r2
       
        reamostragem 	o número de reamostragens a serem feitos no bootstrap, o padrão é 1000
   
   Detalhes

        A função utiliza os dados brutos de medidas morfométricas e os transforma em matrizes de correlação, posteriormente calcula o valor de r2, que é igual a soma dos quadrados da matriz triangular excluindo-se a diagonal dividida pelo número de valores que foram usados na soma.
        Este valor corresponde a um índice que indica o quão integrada é esta matriz, isto é se as correlações são elevadas para a maior parte dos caracteres os valores de r2 serão elevados, indicando que a os caractres morfológicos são bastante integrados.
    
    Valores
    
        Retorna uma lista com os valores observados de r2 (r2.obs), os valores de r2 calculados em cada uma da reamostragem (dist1 e dist2) e os quantis de 2.5% e 95% das distribuições destas reamostragens (IC)
        A função também retorna um gráfico com as curvas de densidade, os valores observados e o intervalo de confiança.
     Nota
        
        Esta função funcionará apenas com planilhas de dados nas quais as observações correspondem às linhas do data frame pois serão as linhas que serão amostradas no bootstrap.
        Esta função embora tenha sido desenvolvida para uso em dados morfométricos, pode ser usada em qualquer tipo de dados, desde que cada linha corresponda a uma observação e as colunas aos valores dos quais as matrizes de correlação serão calculadas
    
    Autora
    
        Ana Paula APrígio Assis
    
    Exemplo
    
        ## baixe o arquivo chamado "exemplo_r.txt", este arquivo contém dados de 4 medidas morfométricas (colunas de 1 a 4) para quatro espécies distintas (espécies A,B,C,D- coluna 5)
        exemplo.r<- read.table("exemplo_r.txt", header= TRUE, sep=",", dec=".", as.is=TRUE)
        r2.exemplo<- r2.ic(exemplo.r[exemplo.r$ESPECIE== "A",1:4], exemplo.r[exemplo.r$ESPECIE=="B",1:4]) # exemplo comparando os indices de integração total das espécies A e B
        r2.exemplo<- r2.ic(exemplo.r[exemplo.r$ESPECIE== "B",1:4], exemplo.r[exemplo.r$ESPECIE=="C",1:4]) # exemplo comparando os indices de integração total das espécies B e C
						Lem_pacotes (2012)

Arquivos para implementar R2

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