====== Guto Hashimoto de Mendonça ====== {{:bie5782:01_curso2009:alunos:trabalho_final:gutohm.jpg?200|Augusto Mendonça}} Engenheiro Ambiental Mestrando em Ciências da Engenharia Ambiental. Universidade de São Paulo - Escola de Engenharia de São Carlos. [[http://www.eesc.usp.br/ppgsea/|Centro de Recursos Hídricos e Ecologia Aplicada]] Desenvolvendo projeto de investigação dos efeitos de borda em fragmentos de cerrado stricto sensu. Orientadora: Giselda Durigan ====== Propostas ====== ===== Proposta A: ===== **Estatistica Q** Proposta por Kempton e Taylor, a estatistica Q é uma inovadora e interessante aproximação para medida de diversidade. Baseada na distribuição de abundância das espécies sem necessitar de um modelo ajustado de observações empíricas. Utiliza a curva de abundância de espécies acumuladas e estima a diversidade através da declividade interquantil dessa curva. Na teoria, toda a curva poderia ser utilizada para estimar a diversidade, mas na prática, restringindo a medida aos interquantis garante-se que nem as super abundantes, nem as muito raras, influenciem siginificativamente o resultado. ===== Comentários ===== Alexandre: Aqui vc. apresenta uma estatística, imagino que sua idéia seja implementá-la em uma função no R. Acho interessante! Gostaria que postasse na proposta o formato de entrada dos dados e qual será a saída. Boa sorte! ===== Proposta B: ===== **Jackknifing** Jackknifing é utilizado para se estimar a diversidade, mas também pode ser utilizado para estimar a riqueza de espécies. Foi desenvolvida inicialmente por Quenouille em 1956 e modificada por Tukey em 1958, O método genérico foi descrito por Sokal e Rohlf. A beleza do método é que não se faz nenhuma restrição quanto a distribuição dos dados. Em seu lugar, uma série de "pseudo valores" é produzida. Essa série de valores é usualmente normal, e suas medias são os melhores estimativas da estatistica. === Comentários === == Paulo == Também um ótimo exercício implementar uma função de Jacknife genérica no R! ====== Página de Ajuda ====== Qstat package:BIE5782-2009 R Documentation Diversidade entre áreas utilizando a estatística Q Description: Produz os gráficos de espécies acumuladas por abundância e adiciona linhas verticais relativas aos quartis de 25% e 75% e uma linha ligando os pontos extremos dentro de intervalo de quartis delimitado pelas retas verticais. Através da declividade da reta interquartis é estimada a diversidade para cada uma das áreas. Usage: Qstat(lista, ...) Arguments: lista: data frame. Constituído pelas espécies na primeira coluna, seguida por colunas de abundâncias de cada espécie. Obs: Espécies não observadas em determinada área deve ser assinaladas com 0. ...: Outros argumentos relacionados à função plot, Details: Os valores de abundacia do data.frame lista são ordenados em ordem crescente. Através da abundância é construído um data.frame de espécies acumuladas para cada área. Os valores de abundancia e de espécie acumuladas são transportados para uma lista a fim de facilitar a manipulação dos dados. Outra lista é gerada contendo o número de espécies. Da lista de espécies acumuladas e da de abundância são plotados os gráficos que representam graficamente os calcúlos da estatística Q. Dentro de cada gráfico são inseridas retas verticais que representam os quartis de 25% e de 75%. Outra linha é adicionada ligando os pontos cartesianos (Espécies Acumuladas vs Abundância) referentes aos quartis de 25% e de 75%. A declividade da reta corresponde ao valor de diversidade da área. A declividade é calculada utilizando-se a seguinte equação: Q(x) = (0.5*r1 + nr + 0.5*r2)/ln(R2/R1) onde: Q = diversidade da área x r1 = número de espécies da classe onde correspondente ao valor do quartil 25% r2 = número de espécies da classe onde correspondente ao valor do quartil 75% R1 = número de indivíduos do quartil 25% R2 = número de indivíduos do quartil 75% nr = número total de espécies entre os quartis de 25% e 75% Value: Para cada área é gerado um gráfico de espécies acumuladas vs abundância. Uma lista contendo os valores de Q é retornada ao fim da execução da função Warning: No caso de não ocorrem observações para determinada espécies no data.frame é necessário que o valor 0 seja assinalado. Valores de NA são automaticamente convertidos em 0. Caso o número de áreas seja maior que 6, aconselha-se a fazer data.frames diferentes contendo no máximo 6 áreas cada um e rodar a análise para cada um deles, evitando "nublar" a plotagem dos gráficos das área, pois este são plotados em uma mesma janela. Author(s): Augusto Hashimoto de Mendonça e-mail: gutohm@gmail.com References: See Also: Examples: species = paste("especie", 1:29) abundance = c(0,0,0,133,63,52,38,37,33,33,29,20,15,15,14,13,11,10,9,8,7,6,6,4,4,3,3,3,2) abundance2 = c(170,140,133,63,52,38,37,33,33,29,20,15,15,14,13,11,10,9,8,7,6,6,4,4,3,3,3,3,2) abundance3 = c(170,140,133,63,52,38,37,33,33,29,20,15,15,14,13,11,10,9,8,7,6,6,4,4,3,3,3,2,2) abundance4 = c(170,140,133,62,52,38,37,33,33,0,20,15,15,14,13,11,10,9,8,7,6,6,4,4,3,3,3,2,2) abundance5 = round(runif(29,0,170)) lista = data.frame(species, abundance, abundance2, abundance3, abundance4, abundance5) Qstat(lista) ====== Código da Função ====== ###Função que estima a diversidade de diferentes área através da Estatística Q, ###a partir de dados de abundância de cada espécie para cada uma das áreas. ###Função desenvolvida por Augusto Hashimoto de Mendonça ###Refenrente ao trabalho final da disciplina BIE5782/2009, ###fornecida pelo Instituto de Biociências da Universidade de São Paulo Qstat <- function(lista) { dim(lista) col = dim(lista)[2] #captura numero de colunas lin = dim(lista)[1] #captura numero de linhas num = rep(0,col) #cria objeto num onde serao armazenados as o numero de observacoes de cada area sem repeticao ###Remove os NA do data.frame de entrada for(j in 2:col) { for(i in 1:lin) { if (is.na(lista[i,j])==TRUE) { lista[i,j]=0 } } } ####Cria o data.frame de Especies Aculumadas a ser utilizada no loop acumul.t = data.frame(lista) acumul.t[,1]=seq(1:lin) names(acumul.t)=c("Atrib",paste("Area",1:(col-1))) for (i in 2:col) { num[i] = length(unique(lista[,i])) #armazena o tamanho de observacoes de cada area em um objeto lista[,i] = sort(lista[,i], decreasing = FALSE) #Ordena as colunas de observacoes em ordem crescente acumul.t[,i]=rep(0,lin) #Cria o data.frame de especies acumuladas com um numero de linhas igual ao do data.frame de entrada } lista.c = lista[,-1] #lista sem a primeira coluna de especies ####Logica de calculo de especies acumuladas for(h in 2:col) { j=1 #indexador auxilar utilizado para o objeto acumul.t for(i in 1:lin) { index=lista[i,h] if(index==0) #If para especies nao observadas. Simplesmente acrescenta 0 a numero de especie acumulada e pula para a proxima indexacao { acumul.t[j]=acumul.t[j] j+1 } if (index!=0) { if(i==1) #Quando o i==1 iniciasse a acumulacao de especies { acumul.t[1,h]=1 j=1 } if(i==lin) #Quando o i igual ao ultimo elemento do data.frame de entrada: { o=lista[lin,h]==lista[lin-1,h] #compara o elemento com o elemento anterior if(o=="TRUE") # se os valores forem iguais { acumul.t[j,h]=acumul.t[j,h]+1 #soma mais um na mesma posicao j } if(o=="FALSE") #se forem diferentes { j=j+1 acumul.t[j,h]=acumul.t[j-1,h]+1 #soma um na posicao j+1 } } if(i!=1&i!=lin) { ####objetos logicos para auxilio do calculo de especies acumuladas r=lista[i,h] != lista[i+1,h]&lista[i,h] != lista[i-1,h] l=lista[i,h] == lista[i+1,h]&lista[i,h] != lista[i-1,h] m=lista[i,h] == lista[i+1,h]&lista[i,h] == lista[i-1,h] n=lista[i,h] != lista[i+1,h]&lista[i,h] == lista[i-1,h] if (r=="TRUE"|l=="TRUE") #Caso o valor da posicao atual de i seja diferente da posicao anterior e posterior a ele { # ou o valor da posicao atual de i seja igual ao posterior e diferente do anterior j=j+1 #soma 1 ao indexador j acumul.t[j,h] = acumul.t[j-1,h]+1 #e acrescenta +1 ao objeto de especies acumuladas } if (m=="TRUE"|n=="TRUE") #Caso o valor da posicao atual de i seja igual ao da posicao anterior e posteiror { #ou o valor da posicao atual de i seja diferente do posterior e igual ao anterior acumul.t[j,h] = acumul.t[j,h]+1 #soma +1 na mesma posicao de j } } } } } ####Cria a lista de especies acumuladas e de abundancia para plotagem e calculo da inclinacao da reta interquartis ind = list(unique(lista[,2])) acu.sp = list(unique(lista[,2])) for (i in 1:(col-1)) { ind[i] = list(unique(lista[,i+1])) acu.sp[i] = list(acumul.t[1:num[i+1],i+1]) } ####Cria a lista de especies e retorna a posicao do valor dos quantis 25% e 75% para cada área num.esp = list(0)#objeto que guarda o numero de especies com o mesmo valor de observacao dentro de uma area for (j in 1:(col-1)) { num.esp[j] = list(table(lista.c[,j])) } pos25= rep(0,col-1) #cria objeto que guarda a posicao onde estao alocados os valores de quartis25% de cada area pos75= rep(0,col-1) #cria objeto que guarda a posicao onde estao alocados os valores de quartis75% de cada area for (j in 1:(col-1)) { for (i in 1:num[j+1]) { x = ind[[j]][i] if(x<=quantile(lista.c[[j]])[2]) { pos25[j] = pos25[j]+1 } if(x>=quantile(lista.c[[j]])[2]) { pos25[j]=pos25[j] } } } for (j in 1:(col-1)) { for (i in 1:num[j+1]) { x = ind[[j]][i] if(x<=quantile(lista.c[[j]])[4]) { pos75[j] = pos75[j]+1 } if(x>=quantile(lista.c[[j]])[4]) { pos75[j]=pos75[j] } } } ####Logica de plot de Especies acumuladas por abundancia de cada area linhas = floor(col/2) #objeto de auxilio para o mfrow. par(mfrow=c(linhas,2)) for(i in 1:(col-1)) { plot(acu.sp[[i]]~ind[[i]], col="black", main=paste("Area",i), xlab="Abundancia", ylab="Numero Cumulativo de Especies", ylim = c(min(acu.sp[[i]]),max(acu.sp[[i]])), xlim = c(min(ind[[i]]),max(ind[[i]]))) abline(v=quantile(lista[[i+1]])[2],col="blue") abline(v=quantile(lista[[i+1]])[4],col="red") lines(c(ind[[i]][pos25[[i]]],ind[[i]][pos75[[i]]]),c(acu.sp[[i]][pos25[[i]]],acu.sp[[i]][pos75[[i]]]), col="orange") } par(mfrow=c(1,1)) ####Calculo de Q Q = list(0) for (i in 1:(col-1)) { r1 = num.esp[[i]][pos25[[i]]] r2 = num.esp[[i]][pos75[[i]]] R1 = ind[[i]][pos25[[i]]] R2 = ind[[i]][pos75[[i]]] nr = 0 for (j in (pos25[[i]]+1):(pos75[[i]]-1)) { nr = nr+num.esp[[i]][j] } Q[i] = list(round((0.5*r1 + 0.5*r2 + nr)/log(R2/R1),2)) } names(Q) = paste("Area",1:(col-1)) return(Q) } ====== Arquivo da Função ====== {{:bie5782:01_curso2009:alunos:trabalho_final:qstat.r|Função Qstat}}