feno.sementes<-function(x,rmNA=TRUE) { ##Coloquei um aviso inicial para que as pessoas que utilizarem a função tenham o cuidado de importar o data.frame de forma que este se adeque a função: warning("Para que a função rode de forma correta o data.frame deve ter quatro colunas.\nA primeira são os meses do ano. \nA segunda são os anos de estudo. \nA terceira são as parcelas. \nA quarta é quantidade de sementes que é a variável resposta.\n", call.=FALSE,immediate.=TRUE) ##Comandos para que os dados faltantes sejam excluídos da análise e isso seja explicitado no Console: if(rmNA==TRUE) { dados=(na.omit(x)) dim <- dim(x)-dim(dados) n.NA <- dim[1] cat("Valores NA excluídos\n",n.NA,"\n","\n") } else { dados=x warning("Se o seu data.frame tiver valores faltantes, a função não irá rodar. O argumento rmNA deve ser verdadeiro\n", call.=FALSE,immediate.=TRUE) } ##Ordenei os níveis do fator mês: dados[,1] <- factor(dados[,1],levels=c("jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez")) ##Transformei as variáveis ano e parcela em fatores: dados[,2] <- factor(dados[,2]) dados[,3] <- factor(dados[,3]) ##Criei este objeto apenas para ajudar na hora de plotar o gráfico circular: meses <- c("jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez") ##Alguns cálculos brutos: ##Cálculo do total de sementes que chegaram ao longo do estudo: soma.total <- sum(dados[,4]) ##Cálculo de quantas sementes chegaram em cada mês: soma.mes <- tapply(dados[,4],dados[,1],sum) ##Cálculo de quantas sementes chegaram em cada parcela: soma.parcela <- tapply(dados[,4],dados[,3],sum) ##Cálculo de quantas sementes chegaram em cada ano: soma.ano <- tapply(dados[,4],dados[,2],sum) ##Cálculo da média das sementes que chegam por ano no estudo: media.ano <- round(mean(soma.ano),0) ##Cálculo da média de sementes que chegaram em cada um dos meses: feno <- round(tapply(dados[,4],dados[,1],mean),0) ##Instalação e abertura do pacote circular: install.packages("circular") require("circular") ##Fiz um vetor de doze números espaçados igualmente que serão posicionados radialmente na circunferência: angulo <- seq(0,330,by=30) ##Transformei este vetor em valores radianos: angulo.rad <- rad(angulo) ##Transformei os dados referentes a média de sementes que chegaram por mês (feno) em valores circulares, relacionados com o vetor angulo.rad criado ##anteriormente. Coloquei no sentido anti-horário, pois não consegui mudar este padrão nas funções posteriores: feno.c <- circular(rep(angulo.rad,feno),units=c("radians"),rotation="counter") ##Calculei a média para obter o vetor que indica a direção das observações. Este valor vai de 0 (início na posição 3h) até 2pi(~6.283185): media <- mean(feno.c) ##Calculei o comprimento do vetor médio. Quanto mais perto de zero, mais abrangente o período fenológico ao longo do ano, os dados não tem um padrão muito ##evidente: r <- rho.circular(feno.c) ##Testes de Uniformidade. ##Valores significativos do p-valor indicam a existência de um padrão e menor abrangência fenológica: Rayleigh.teste <- rayleigh.test(feno.c) ##Valores acima do valor crítico, indicam a existência de um padrão e menor abrangência fenológica: Watson.teste <- watson.test(feno.c,alpha=0.05) ##Plotei os dados em um gráfico circular: plot(feno.c,axes=F,main="Fenologia da Chuva de Sementes") ##Coloquei os meses no eixo: axis.circular(at=circular(rad(angulo)),labels=meses,units=c("radians")) ##Plotei este diagrama para visualizar como a chegada de sementes se distribui ao longo do ano: rose.diag(feno.c,bins=12,add=T,axes=F) ##Esta função plota um vetor na direção média dos dados e em um comprimento que mostra o quanto esta direção influencia os dados como um todo(r): arrows.circular(x=media, shrink=r, col="red",length=0.1) ##Fiz uma lista para que os resultados sejam apresentados no Console: lista <- list(soma.total,soma.mes,soma.parcela,soma.ano,media.ano,feno,media,r,Rayleigh.teste,Watson.teste) names(lista) <- c("Total de sementes que chegaram ao longo do estudo","Soma das sementes que chegaram em cada mês","Soma das sementes que chegaram em cada parcela","Soma das sementes que chegaram em cada ano","Média das sementes que chegaram por ano no estudo","Média de sementes que chegaram em cada um dos meses","Direção média dos dados","Comprimento médio dos dados","Teste de Uniformidade de Rayleigh","Teste de Uniformidade de Watson") return(lista) }