====== Antônio Ralph ======
{{:bie5782:01_curso_atual:alunos:trabalho_final:aralphms:an_nio_ralph.jpg?200|}}
Mestrando em Epidemiologia, Faculdade de Saúde Pública, USP.
O título de minha dissertação é: "Indicadores ecológicos de mosquitos (Diptera: Culicidae) em parques municipais da cidade de São Paulo", orientado pelo professor Dr. Mauro Toledo Marrelli.
[[.:exercícios]]
====== Minha proposta ======
**Plano A**
Minha Proposta é criar uma função que descreva e compare comunidades a partir dos dados amostrais, fornecendo a riqueza observada, estimativa da riqueza total (pode ser o Jackknife 1), índice de diversidade de Simpson (1-D) e similaridade entre as comunidades pelo índice qualitativo de Sorensen.. Os dados contendo as unidades amostrais nas linhas e as espécies nas colunas serão lançados no R. Cada comunidade será representada por um objeto e, obviamente, para que a função também forneça o índice de Sorensen será necessário a presença de, pelo menos, uma segunda comunidade. Os índices de riqueza e diversidade aparecerão nas linhas e as comunidades testadas nas colunas, abaixo uma matriz contendo os índices de similaridade. Estou trabalhando com comunidades de Culicideos (mosquitos) e estou analisando 10 áreas. Imagino que inúmeros pacotes do R contenham funções semelhantes para para o estudo de diversidade, mas ainda sim penso que seria interessante e desafiador (para alguém que esta começando a conhecer o R) construir a função proposta, obtendo com um único comando os indicadores de interesse.
**Plano B**
O segundo plano é obter uma função que com base nos dados amostrais me forneça um gráfico contendo uma curva de rarefação e seu intervalo de confiança de 95%, com uma lógica igual ao “Sobs Mao Tau” obtido no [[http://viceroy.eeb.uconn.edu/estimates/|EstimateS]]. A curva será formada por pontos com seus respectivos intervalos de confiança, sendo o eixo x representado pelas amostras e o y pelo número de espécies. O último ponto plotado no gráfico será um estimador de riqueza total também contendo o intervalo de confiança.
==Comentário - Anna==
Oi, Antônio.
Se você acha que vai ser legal o exercício de montar essas funções, ele é factível. Você pode também fazer a sua proposta B junto!
== Ale ==
Tem realmente pacotes e funções que realizam a tarefa que sugere. Isso não é um problema se vc. fizer a sua função a partir do zero.
Faça a A e se tiver confortável e com tempo, inclua B!
--- //[[adalardo@usp.br|Alexandre Adalardo de Oliveira]] 2013/03/24 11:21//
**Página de ajuda da função e script**
indiv package:sem pacote R Documentation
###Fornece alguns indicadores de diversidade e exibe a curva de rarefação de espécies###
Description:
A função "indiv" fornece o número de indivíduos, riqueza obeservada, estimador Jackknife 1, índice de Simpson (1-D),
matriz de similaridade (índice qualitativo de Sorensen) e curva de rarefação. Tem como objetivo comparar assembléias
de um mesmo táxon coletados em diferentes locais com um mesmo esforço amostral, considera-se número de indíviduos.
Usage:
indiv(x,nsim=300,replace=F)
Arguments:
x: é um objeto do tipo lista (list) contendo matrizes com dados amostrais (amostragens nas linhas e espécies nas colunas)
nsim: número de simulações para cada rodada de reamostragem (default=300)
replace: reposição de indivíduos amostrados, se F=falso (não repõe, default), se T=verdadeiro (repõe)
Details:
o número de colunas (correspondentes às espécies) deve ser o mesmo e a posição das espécies deve corresponder entre as matrizes
para permitir a comparação da similaridade (exemplo: sp1 deve ser a mesma para matriz 1, matriz 2, matriz,3...mesmo que o valor
correspondente para esta espécie seja zero em alguma destas matrizes). Recomenda-se nomear cada elemento (matriz) da lista com
o um nome que defina cada assembléia para melhor visualização dos resultados.
Caso hajam valores faltantes (NA's), estes serão desconsiderados.
É possível analisar apenas uma assembléia desde que esta também esteja no formato "list"
Value:
Indicadores de diversidade: contem o numero de indivíduos, espécies, jackknife1 e índice de Simpson (1-D)
matriz de similaridade (ind. qual. Sorensen): matriz contendo o índice qualitativo de Sorensen para cada par de assembléia
curva de rarefação: curva formada com base em simulações dos dados amostrais contendo número de indivíduos coletados no eixo x e
número de espécies no eixo y, fornecendo um indicativo da suficiência amostral.
Warning:
Quanto maior o número de indivíduos coletados maior o tempo para processamento das simulações, pois aumenta-se o número de amostragens possíveis.
neste caso recomenda-se não se elevar o número de simulações (nsim) por amostragem.
Note:
########
Author(s):
Antônio Ralph Medeiros de Sousa
email: aralphms@usp.br
References:
MAGURRAN, Anne E. Measuring biological diversity. 2004.
LEGENDRE, Pierre; LEGENDRE, Louis. Numerical ecology. Elsevier, 2012.
See Also:
####
Examples:
> analise.div=list(ambiente1,ambiente2,ambiente3)
> names(analise.div)=c("ambiente 1","ambiente 2","ambiente 3")
> analise.div
$`ambiente 1`
sp 1 sp 2 sp 3 sp 4 sp 5 sp 6 sp 7 sp 8 sp 9 sp 10
am 1 9 0 0 5 0 0 0 5 0 0
am 2 0 0 0 9 0 0 9 0 0 0
am 3 0 0 0 0 1 5 2 6 12 0
am 4 0 0 0 0 0 0 0 0 0 0
am 5 0 0 0 0 0 11 11 0 0 0
$`ambiente 2`
sp 1 sp 2 sp 3 sp 4 sp 5 sp 6 sp 7 sp 8 sp 9 sp 10
am 1 11 13 14 11 0 0 0 0 0 0
am 2 0 0 0 12 13 0 0 0 0 18
am 3 0 0 0 11 0 0 0 0 0 0
am 4 10 0 1 14 0 1 0 0 2 0
am 5 0 3 0 0 0 3 0 16 0 0
$`ambiente 3`
sp 1 sp 2 sp 3 sp 4 sp 5 sp 6 sp 7 sp 8 sp 9 sp 10
am 1 0 0 0 0 0 0 0 0 11 0
am 2 0 0 0 0 0 0 0 0 13 0
am 3 8 0 12 0 1 0 11 0 14 15
am 4 0 0 0 10 0 15 0 0 9 21
am 5 0 0 0 11 4 0 0 0 0 0
> indiv(analise.div,nsim=500,replace=F)
######################################################################################
Função Indicadores de diversidade (indiv)#############################################
######################################################################################
indiv<-function(x,nsim=300,replace=F)
{
individ=t(lapply(x,sum,na.rm=T))##somando o número de indivíduos em cada matriz de dados
rownames(individ)="Indivíduos"
sobs<-function(z)##########função para calcular a riqueza em cada matriz de dados
{
z1=apply(z,2,sum,na.rm=T)
riqueza=length(z1[z1>0])
return(riqueza)
}
rich<-t(lapply(x,sobs))####calculando a riqueza na lista de comunidades
rownames(rich)<-"Riqueza observada"
jack1<-function(z)###função para calcular o jackknife 1 em cada matriz de dados
{
am.x=nrow(z)###calculando número de amostras###
am.x2=nrow(z)-1
bin.x=z
bin.x[bin.x>1]=1###transformando em dados binários##
sumbin.x=apply(bin.x,2,sum,na.rm=T)
ap1=length(sumbin.x[sumbin.x==1])###somando número de espécies que aparecem em apenas uma amostra
riqobs=length(sumbin.x[sumbin.x>0])###riqueza observda
jack=riqobs+(ap1*(am.x2/am.x))###calculando o Jackknife 1####
return(jack)
}
jackkn1<-t(lapply(x,jack1))###calculando o jackknife nas comunidades
rownames(jackkn1)<-"Jackknife1"
simpson<-function(z)####função para calcular o índice de Simpson
{
tot.x=apply(z,2,sum,na.rm=T)
tot.ger=sum(tot.x)
simp=1-(sum((tot.x/tot.ger)^2))###calculando o índice de simpson
return(simp)
}
ind.simp<-t(lapply(x,simpson))###calculando o índice de Simpson das comunidades
rownames(ind.simp)<-"Simpson (1-D)"
cont.spp<-function(z)###função para transformar espécies em dados binários
{
x1=apply(z,2,sum,na.rm=T)
x1[x1>0]=1
return(x1)
}
bin<-as.data.frame(lapply(x,cont.spp))###aplicando a função à lista de transformando os resultados em um data.frame
bin.sp<-as.matrix(bin)###transformando em uma matriz de dados binários
num.col=ncol(bin.sp)
m.similar=matrix(1,ncol=num.col,nrow=num.col)###matriz para abrigar os dados de similaridade
for(i in 1:num.col-1)###automatizando a verificação de co-ocorrência de espécies entre as comunidades###
{
r=i+1
for(r in r:num.col)
{
co.ocor=sum(bin.sp[,i]>0 & bin.sp[,r]>0)
tot.sp=sum(bin.sp[,i])+sum(bin.sp[,r])
m.similar[i,r]=(2*co.ocor)/tot.sp
m.similar[r,i]=(2*co.ocor)/tot.sp
}
mat.similar=round(m.similar,digits=3)
rownames(mat.similar)=names(x)
colnames(mat.similar)=names(x)
}
rar=function(z)###função para construir uma curva de rarefação para cada assembléia amostrada###
{
w1=apply(z,2,sum,na.rm=T)###somando número de indivíduos de cada espécie
w2=sum(w1)####somando total de indivíduos coletados
w5=rep(1,w2)###criando um vetor que repet o número 1 tantas vezes quanto for o total de indivídous
w6=cumsum(w5)##fazendo a soma cumulativa deste vetor(com isto se diz quantos indivíduos serão coletados a cada simulação)##
w7=dim(z)[2]##contando o número de colunas de espécies
w8=c(1:w7)##criando um vetor que vai de 1 ao total de colunas
w9 = as.vector(rep(w8[which(w1 > 0)], times = w1[which(w1 > 0)]))###criando um vetor que repita o número da espécie quantas vezes for o número de indivíduos desta##
resultw=rep(NA,times=length(w5))##criando um vetor para abrigar e orientar os dados da simulação
aq=rep(NA,times=length(w5))###idem
resultsim<- matrix(NA, nrow=nsim, ncol=length(w5), byrow=T)###matriz de Na's para guardar os dados das simulações
for(i in 1:nsim)###automatizando o processo de aleatorização de amostragens começando por 1 indiv. nsim vezes até o total de indiv. nsim vezes
{
for(r in 1:length(w6))
{
for(k in 1:length(w6))
{
aq[k]=w6[r]###informando quantos indivíduos serão retirados da amostra a cada rodada de simulação
}
resultw[r]=length(unique(sample(w9, size=aq,replace)))###somando o número de espécies de cada amostra
}
resultsim[i,]=resultw###guardando o resultado na matriz
}
meddados=t(t(apply(resultsim,2,mean)))###obtendo a média de espécies para cada valor simulado de tamanho de amostragem
vardados=t(t(apply(resultsim,2,var)))###obtendo a variância
guardaic=matrix(NA,length(meddados),2,byrow=T)###criando matriz para guardar intervalos de confiança
for(d in 1:length(meddados))###automatizando o processo de calculo do intervalo de confiança
{
calcic=meddados[d,]+qt(c(0.025,0.975),df=length(resultsim[,d])-1)*sqrt(vardados[d,]/length(resultsim[,d]))###calculo do intervalo de confiança (95%)
guardaic[d,]=calcic##guardando os valores de IC obtidos
}
w10=t(t(w6))##transpondo a soma cumulativa de indivíduos para coluna
dadosrar=cbind(w10,meddados,guardaic)###reunindo número de indivíduos amostrados, média e IC's
colnames(dadosrar)=c("índivíduos","media de espécies","ic 95% inf","ic 95% sup")
rownames(dadosrar)=paste("am",c(1:length(dadosrar[,1])))
dadosrare=as.matrix(dadosrar)
}
individ2=max(as.numeric(individ))##obtendo o maior valor de indivíduos amostrados
rich2=max(as.numeric(rich))###obtendo o maior valor de espécies amostrado
x11()
plot(c(1,individ2),c(1,rich2),xlab="indivíduos amostrados",ylab="nº médio de espécies",type="n",main="curva de rarefação")##plotando gráfico para construção da curva de rarefação
resultrare=lapply(x,rar)###aplicando a função rar para as comunidades da lista
for(l in 1:length(resultrare))##automatizando a criação da curva de rarefação com média e IC's
{
tran=resultrare[[l]]
tran1=as.numeric(tran[,1])###indivíduos
tran2=as.numeric(tran[,2])###espécies
tran3=as.numeric(tran[,3])###IC
tran4=as.numeric(tran[,4])###IC
tran5=max(tran1)
tran6=max(tran2)
lines(tran1,tran2,type="l")
lines(tran1,tran3,col="red",type="l",lty=3)
lines(tran1,tran4,col="red",type="l",lty=3)
text(tran5,tran6,labels=names(resultrare[l]),pos=3)
}
index=rbind(individ,rich,jackkn1,ind.simp)##juntando o resultado dos indicadores
tudo=list(index,mat.similar)###juntando os indicadores e a matriz de similaridade em uma lista
names(tudo)=c("indicadores das comunidades","matriz de similaridade (ind. qual. Sorensen)")
return(tudo)###retornando no console todos os valores calculados exceto curva de rarefação que será plotada em uma gráfico aberto automaticamente##
}
{{:bie5782:01_curso_atual:alunos:trabalho_final:aralphms:script_da_função_indiv.txt|}}