====== Juan Pablo Hurtado-Gómez ====== {{:bie5782:01_curso_atual:alunos:trabalho_final:juanphg:r.jpg?nolink&200|}} Sou Biólogo da Universidade de Antioquia em Medellín, Colômbia. A minha área de interesse e a sistemática taxonomia e biogeografia de escamados (cobras e lagartos). Atualmente estou fazendo o mestrado no Laboratório de Herpetologia do Museu de Zoologia da USP com sistemática dum gênero de cobras, utilizando evidencia morfológica e molecular. [[.:exe]] ====== Propostas para função ====== ===== Proposta A. Resumo variação morfológica. ===== Na hora de preparar os manuscritos para publicar trabalhos taxonômicos, baseados em morfologia, geralmente incluem-se tabelas que resumem a variação dos caracteres, onde se fazem comparações entre os diferentes grupos (p.ex. sexo, espécie, região geográfica). Além disso, incluem-se gráficos de boxplot ou histogramas para mostrar as diferenças entre a distribuição dos caracteres que foram informativos. A proposta é fazer uma função que: * A) Crie uma tabela resumo, a partir de uma matriz de dados, comparando os diferentes grupos, em até dois níveis, selecionados pelo usuário (p.ex. espécie e sexo). Para cada caráter de cada nível serão informados os seguintes dados, amplitude de variação, média e o desvio padrão, min-max (media ± sd). A tabela será salva em um arquivo no formato csv para que o usuário possa abrir e formatar em outros programas como excel ou word. * B) Gerar gráficos comparativos para os caracteres dos grupos (p. ex. comprimento total por espécie ou por sexo), onde o usuário escolha os níveis, o tipo de gráfico e os caracteres. ===== Proposta B. Escolha de caracteres a utilizar em análises multivariadas. ===== Um dos problemas mais comuns na hora de fazer uma análises multivariadas são os tamanhos amostrais pequenos e muitos caracteres. Uma das soluções para esse problema é reduzir a quantidade de caracteres a serem incluídos na análise. A ideia é incluir apenas os caracteres que sejam mais informativos. O modo mais recomendável para fazer isso é realizar análises de variância para cada variável entre os grupos e aquelas que apresentem diferenças mais significativas serão incluídas na matriz final, para posteriormente serem utilizadas na análise multivariada (ver Sanders et al, 2004). A proposta é fazer uma função que realize para cada variável uma analises de variância, considerando se apresentam ou não uma distribuição normal. No caso de haver diferença significativa, a variável será incluída na nova matriz a ser utilizada na análise multivariada. No final, a função salvará a nova matriz em um arquivo no formato csv (comma-separated values) contendo apenas as variáveis que foram informativas para a separação dos grupos nas análises de variância. Sanders KL, Malhotra A, Thorpe RS. 2006. Combining molecular, morphological and ecological data to infer species boundaries in a cryptic tropical pitviper. Biological Journal of the Linnean Society 87: 343–364. Olá Juan, sua proposta A parece mais interessante. Com ela você poderá fazer uma análise exploratória de seus dados, criar gráficos, observar intervalos de confiança e jogar com os argumentos. A proposta B pode trazer dificuldades na execução, pois você tenderia a recriar análises básicas de variância e os resultados não seriam tão interessantes, apesar de úteis em análises multivariadas. A questão é que você pode realizar essa escolha de variáveis em poucas linhas de código, o que poderia trazer questionamentos sobre a utilidade da função. Eu optaria pela proposta A, e tentaria incrementá-la brincando com os gráficos comparativos e tentando incluir informações geográficas nestes mapas, já que muitas vezes abrimos mão das classificações existentes para caracterizar as unidades taxonômicas e entender padrões clinais, por exemplo. Qualquer dúvida, entre em contato. ----//[[glaudel@globo.com|Glaucia Del-Rio]]// Obrigado Glaucia. Vou fazer a função A então. Se não tiver muito problema, então vou la incrementar com o que vc me falo. ==== TRABALHO FINAL ==== **Obsevaçoes:**Não consegui fazer as análises em dois nives pois nao encontrei o jeito de concatenar os resultados de tipo data.frame num loop dentro da função, mas continuare na procura duma solução. **1**Ver embaixo uma versão melhorada que trabalha em dois niveis, postada 10 horas depois do prazo. ==== Função Variação Morfologica (var.morf) ==== === Script === var.morf=function(matrix, gru1, vars, name="summary") { if(!is.data.frame(matrix)) # Pergunta se a matriz nao e um data.frame stop ("matrix must be a data.frame object")# No caso de nao ser data frame, mostrar erro if(length(vars)>1)# Pergunta se a variabel tem so um valor { for (x in vars) if (x==vars[1]) { mar=matrix[vars] } else { mat=cbind(mar,matrix[x]) } if(!is.numeric(gru1)|!is.numeric(vars))# Pergunta se o valor inserido na variavel e numerico stop ("gru1, gru2 or vars are not numeric vectors")# No caso de nao ser numerico, mostrar erro if(length(gru1)>1)# Pergunta se a variabel tem so um valor stop("gru1 must be of length '1'")# No caso de ser maior que 1, mostrar erro res=aggregate(mat, list(matrix[[gru1]]), function(x) c(n=length(x), Min=min(x, na.rm=T), Max=max(x, na.rm=T), sd=sd(x, na.rm=T), Mean=mean(x, na.rm=T)))#Tabela de sumario das variaveis selecionadas pelo usuario res[,sapply(res, is.numeric)] <-round(res[,sapply(res, is.numeric)],2)# arredonda os valores das variaveis numericas para dois decimais. write.csv(res,paste(name,".csv", sep=""))#Salva a tabela em formato '.csv' com o nomen escolhido pelo usuario return("A matriz foi salva na sua pasta de trabalho") #Messagem que confirma que a funcao foi executada como sucesso } else { if(!is.numeric(gru1)|!is.numeric(vars))# Pergunta se o valor inserido na variavel e numerico stop ("gru1 or vars are not numeric vectors")# No caso de nao ser numerico, mostrar erro if(length(gru1)>1)# Pergunta se a variabel tem so um valor stop("gru1 must be of length '1'")# No caso de ser maior que 1, mostrar erro res=aggregate(matrix[[vars]], list(matrix[[gru1]]), function(x) c(n=length(x), Min=min(x, na.rm=T), Max=max(x, na.rm=T), sd=sd(x, na.rm=T), Mean=mean(x, na.rm=T)))#Tabela de sumario das variaveis selecionadas pelo usuario res[,sapply(res, is.numeric)] <-round(res[,sapply(res, is.numeric)],2)# arredonda os valores das variaveis numericas para dois decimais. write.csv(res,paste(name,".csv", sep=""))#Salva a tabela em formato '.csv' com o nomen escolhido pelo usuario return("A matriz foi salva na sua pasta de trabalho") } } === HELP === Var.morf package:none R Documentation Resumo de Variaão morfologica Description: Realiza uma tabela resumo da variação de um ou vários carateres para os grupos de uma variável (p.ex. espécie, sexo, região geográfica). A função salva uma tabela em formato .csv com o tamnho da amostra (n), o valor mínimo (min), o valor máximo (max), desvio padrão (sd), e a média aritmética (mean) para cada variável dentro de cada grupo. Usage: var.morf(matrix, gru1, vars, name) var.morf(matrix, gru1, vars, name="summary") Arguments: matrix: objeto de classe “data frame” previamente criado, que contém as variáveis nas colunas e os indivíduos nas linhas. gru1: Número da coluna que contém a lista dos grupos nos que se pretende resumir a variação morfológica. Essa variável só pode ser um (longitude =1) número. vars: Número(s) da(s) coluna(s) nas que se encontram as variáveis a serem resumidas. name: Vector de caráteres (“entre aspas”) no qual se coloca o nomen desejado para o arquivo .csv. O nomen predeterminado para o arquivo é summary e ficará salvo na pasta de trabalho como summary.csv Details: matrix deve ser um arquivo de tipo data frame que contém as variáveis a serem resumidas. A coluna indicada no parâmetro gru1 deve incluir os nomes dos grupos que desejam ser resumidos e podem ser numéricos o carateres. A função mostrara erro quando não seja de tipo numérico ou tenha um comprimento maior a um. Os números indicados no argumento vars deveram corresponder as colunas dos caráters a ser resumidos, os quais devem ser de tipo numérico. A função mostrara erro quando não sejam de tipo numérico. No argumento name o usuário não precisa especificar a extenção do archivo. Ela é .csv por padrão. A função opera com funções do pacote base do R. Author(s): Juan Pablo Hurtado Gómez Juanphg@usp.br Examples: ## Abra o aquivo “ex_var.morf.csv” evmf=read.csv(“ex_var.morf.csv”) source(“var.morf.r”) # Para resumir uma variavel das especies var.morf(matrix=evmf, gru1=1, vars=5, name="summarysp") #Para resumir varias variaveis por localidade var.morf(matrix=evmf, gru1=2, vars=c(5:15), name="summaryloc") # ou varias variaveis por sexo var.morf(matrix=evmf, gru1=3, vars=c(5, 4, 6,15), name="summarysex") === Arquivos === Os arquivos estam comprimidos no seguente arquivo:{{:bie5782:01_curso_atual:alunos:trabalho_final:juanphg:var.morf.rar|var.morf.rar}} ou no seguente link: [[https://copy.com/fF10fv0ZZyQcCDcV]] ==== Função Variação Morfologica (var.morf) V11.1 ==== === Script === var.morf=function(matrix, gru1, gru2=NULL, vars, name="summary") { if(!is.data.frame(matrix)) # Pergunta se a matriz nao e um data.frame stop ("matrix must be a data.frame object")# No caso de nao ser data frame, mostrar erro if(is.null(gru2)) # Se o usuario so quer resumir as variaveis num nivel { if(length(vars)>1)# Pergunta se a variabel tem so um valor { for (x in vars) #cria um loop para juntar as variaveis escolhidas a serem resumidas if (x==vars[1]) # No caso que o loop estivese na primeira variavel { mar=matrix[vars]# criar um vetor inicial para a posterior concatenacao } else # Se e outra variavel { mat=cbind(mar,matrix[x])# concatenar a primeira variavel com a variavel seguente } mat=mat[,-(length(vars)+1)] # tirar a ultima coluna que se repete. if(!is.numeric(gru1)|!is.numeric(vars))# Pergunta se o valor inserido na variavel e numerico stop ("gru1 or vars are not numeric vectors")# No caso de nao ser numerico, mostrar erro if(length(gru1)>1)# Pergunta se a variabel tem so um valor stop("gru1 must be of length '1'")# No caso de ser maior que 1, mostrar erro res=aggregate(mat, list(matrix[[gru1]]), function(x) c(n=length(x), Min=min(x, na.rm=T), Max=max(x, na.rm=T), sd=sd(x, na.rm=T), Mean=mean(x, na.rm=T)))#Tabela de sumario das variaveis selecionadas pelo usuario res[,sapply(res, is.numeric)] <-round(res[,sapply(res, is.numeric)],2)# arredonda os valores das variaveis numericas para dois decimais. write.csv(res,paste(name,".csv", sep=""))#Salva a tabela em formato '.csv' com o nomen escolhido pelo usuario return("A matriz foi salva na sua pasta de trabalho") #Messagem que confirma que a funcao foi executada como sucesso } else { if(!is.numeric(gru1)|!is.numeric(vars))# Pergunta se o valor inserido na variavel e numerico stop ("gru1 or vars are not numeric vectors")# No caso de nao ser numerico, mostrar erro if(length(gru1)>1)# Pergunta se a variabel tem so um valor stop("gru1 must be of length '1'")# No caso de ser maior que 1, mostrar erro res=aggregate(matrix[[vars]], list(matrix[[gru1]]), function(x) c(n=length(x), Min=min(x, na.rm=T), Max=max(x, na.rm=T), sd=sd(x, na.rm=T), Mean=mean(x, na.rm=T)))#Tabela de sumario das variaveis selecionadas pelo usuario res[,sapply(res, is.numeric)] <-round(res[,sapply(res, is.numeric)],2)# arredonda os valores das variaveis numericas para dois decimais. write.csv(res,paste(name,".csv", sep=""))#Salva a tabela em formato '.csv' com o nomen escolhido pelo usuario return("A matriz foi salva na sua pasta de trabalho")# Messagem final que diz que a funcao termino o processo e salvo os resultados. } } else { if(!is.numeric(gru1)|!is.numeric(vars))# Pergunta se o valor inserido na variavel e numerico stop ("gru1 or vars are not numeric vectors")# No caso de nao ser numerico, mostrar erro if (length(vars)>1) # para dos grupos (niveis) so e posivel fazer para ua variavel. stop("two level analysis is only possible for one variable: vars must be of length=1")# Mostrar Erro quando tenta fazer analises de duas variaveis em dois niveis if(length(gru1)>1)# Pergunta se a variabel tem so um valor stop("gru1 must be of length '1'")# No caso de ser maior que 1, mostrar erro res=aggregate(matrix[[vars]], list(matrix[[gru1]]), function(x) c(n=length(x), Min=min(x, na.rm=T), Max=max(x, na.rm=T), sd=sd(x, na.rm=T), Mean=mean(x, na.rm=T)))#Tabela de sumario das variaveis selecionadas pelo usuario res[,sapply(res, is.numeric)] <-round(res[,sapply(res, is.numeric)],2)# arredonda os valores das variaveis numericas para dois decimais. write.csv(res,paste(name,".csv", sep=""))#Salva a tabela em formato '.csv' com o nomen escolhido pelo usuario return("A matriz foi salva na sua pasta de trabalho") # Messagem final que diz que a funcao termino o processo e salvo os resultados. } } === HELP === Var.morf package:none R Documentation Resumo de Variaão morfologica Description: Realiza uma tabela resumo da variação de um ou vários carateres para os grupos de uma variável (p.ex. espécie, sexo, região geográfica) ou em dois niveis (p. ex. espécie e sexo) só para uma variavel. A função salva uma tabela em formato .csv com o tamnho da amostra (n), o valor mínimo (min), o valor máximo (max), desvio padrão (sd), e a média aritmética (mean) para cada variável dentro de cada grupo. Usage: var.morf(matrix, gru1, gru2, vars, name) var.morf(matrix, gru1, gru2=NULL, vars, name="summary") Arguments: matrix: objeto de classe “data frame” previamente criado, que contém as variáveis nas colunas e os indivíduos nas linhas. gru1: Número da coluna que contém a lista dos grupos nos que se pretende resumir a variação morfológica. Essa variável só pode ser um número (longitude =1). gru2: Número da coluna que contém a lista dos grupos nos que se pretende subagrupar a variação morfológica. Essa variável só pode ser um número (longitude =1). vars: Número(s) da(s) coluna(s) nas que se encontram as variáveis a serem resumidas. name: Vector de caráteres (“entre aspas”) no qual se coloca o nomen desejado para o arquivo .csv. O nomen predeterminado para o arquivo é summary e ficará salvo na pasta de trabalho como summary.csv Details: matrix deve ser um arquivo de tipo data frame que contém as variáveis a serem resumidas. A coluna indicada no parâmetro gru1 deve incluir os nomes dos grupos que desejam ser resumidos e podem ser numéricos o carateres. A função mostrara erro quando não seja de tipo numérico ou tenha um comprimento maior a um. Os números indicados no argumento vars deveram corresponder as colunas dos caráters a ser resumidos, os quais devem ser de tipo numérico. A função mostrara erro quando não sejam de tipo numérico. Para trabalhar em dois niveis, a função so consegue analizar uma varariavel. No argumento name o usuário não precisa especificar a extenção do archivo. Ela é .csv por padrão. A função opera com funções do pacote base do R. Author(s): Juan Pablo Hurtado Gómez Juanphg@usp.br Examples: ## Abra o aquivo “ex_var.morf.csv” evmf=read.csv(“ex_var.morf.csv”) source(“var.morf.r”) # Para resumir uma variavel das especies var.morf(matrix=evmf, gru1=1, vars=5, name="summarysp") #Para resumir varias variaveis por localidade var.morf(matrix=evmf, gru1=2, vars=c(5:15), name="summaryloc") # ou varias variaveis por sexo var.morf(matrix=evmf, gru1=3, vars=c(5, 4, 6,15), name="summarysex") # Em dois niveis p. ex. espécie e sexo var.morf(matrix=evmf, gru1=1, gru2=3, vars=5, name="summaryspsex") === Arquivos V11.1 === Os arquivos estam comprimidos no seguente arquivo:{{:bie5782:01_curso_atual:alunos:trabalho_final:juanphg:var.morf_v11_1.rar|var.morf_v11.1.rar}} ou no link :[[https://copy.com/JCItNsCQT24m3X2S]]