projetos:pp_peic:restrito:calophyllum:habitat:torus

Função torus de K. Harms, com pequenas modificações de Ale dez de 2008

<box blue 100%»

torusonesp=function(species,habitat,allabund,plotdim=c(320,320),gridsize=20) {

plotdimqx=plotdim[1]/gridsize  # Calculates no. of x-axis quadrats of plot.
plotdimqy=plotdim[2]/gridsize  # Calculates no. of y-axis quadrats of plot.
hab=unique(habitat)
num.habs=length(hab)   # Determines tot. no. of habitat types.
habmat=matrix(habitat,plotdimqy,plotdimqx,byrow=F)
GrLsEq=matrix(0,1,num.habs*4)       # Creates empty matrix for output.
rownames(GrLsEq)=species       # Names single row of output matrix.
for(i in 1:num.habs)           # Creates names for columns of output matrix.
 {
  if(i==1)
    cols=c(paste("N.Hab.",hab[i],sep=""), paste("Gr.Hab.",hab[i],sep=""), paste("Ls.Hab.",hab[i],sep=""), paste("Eq.Hab.",hab[i],sep=""))
  if(i>1)
    cols=c(cols, paste("N.Hab.",hab[i],sep=""), paste("Gr.Hab.",hab[i],sep=""), paste("Ls.Hab.",hab[i],sep=""), paste("Eq.Hab.",hab[i],sep=""))  
 }
colnames(GrLsEq)=cols    # Names columns of output matrix.
## CALCULATIONS  FOR OBSERVED RELATIVE DENSITIES ON THE TRUE HABITAT MAP
  spmat=matrix(allabund[species,],plotdimqy,plotdimqx,byrow=F)  # Fills a matrix, with no. rows = plotdimqy and no. columns = plotdimqx, with the indiv. counts per quadrat of one species.
  tot=numeric()             # Creates empty vector for tot. no. stems per quadrat.
  len=length(allabund[1,])  # Determines the tot. no. of quadrats.
###SERÁ QUE PRECISA TUDO ISSO!! 
###for(i in 1:len)           # Determines the tot. no. of stems, of all spp., in each quadrat.
##    {
###     tot[i]=sum(allabund[,i]) 
##    }
tot=apply(allabund,2,sum)  ## assim fica melhor, sem looping (ale dez 2008)
totmat=matrix(tot[],plotdimqy,plotdimqx,byrow=F)  # Converts "tot" to a matrix, with no. rows = plotdimqy and no. columns = plotdimqx. 
  spstcnthab=numeric()   # Creates empty vector for stem counts per sp. per habitat.
  totstcnthab=numeric()  # Creates empty vector for tot. stem counts per habitat.
  for(i in 1:num.habs)  
   {
    totstcnthab[i]=sum(totmat[habmat==unique(habitat)[i]])  # Determines tot. no. stems per habitat of the true map.
    spstcnthab[i]=sum(spmat[habmat==unique(habitat)[i]])    # Determines tot. no. stems for focal sp. per habitat of the true map.     
   }
  spprophab=spstcnthab/totstcnthab         # Calculates observed relative stem density of focal sp. per habitat of the true map.

# CALCULATIONS FOR RELATIVE DENSITIES ON THE TORUS-BASED HABITAT MAPS

   for(x in 0:(plotdimqx-1))    # Opens "for loop" through all 20-m translations along x-axis.
    { 
    for(y in 0:(plotdimqy-1))  # Opens "for loop" through all 20-m translations along y-axis.
     { 
      newhab=matrix(0,plotdimqy,plotdimqx)  # Creates empty matrix of quadrats' habitat designations.
      # The following "if" statements create the x,y torus-translation of the habitat map.
      if(y==0 & x==0)          
         newhab=habmat
      if(y==0 & x>0)
         newhab=habmat[c(1:plotdimqy),c((plotdimqx-x+1):plotdimqx,1:(plotdimqx-x))] 
      if(x==0 & y>0)
         newhab=habmat[c((plotdimqy-y+1):plotdimqy,1:(plotdimqy-y)),c(1:plotdimqx)]
     if(x>0 & y>0)
          newhab=habmat[c((plotdimqy-y+1):plotdimqy,1:(plotdimqy-y)),c((plotdimqx-x+1):plotdimqx,1:(plotdimqx-x))] 
      Torspstcnthab=numeric()   # Creates empty vector for stem counts per sp. per habitat in torus-based maps.
      Tortotstcnthab=numeric()  # Creates empty vector for tot. stem counts per habitat in torus-based maps.
      for(i in 1:num.habs)
       {
        Tortotstcnthab[i]=sum(totmat[newhab==unique(habitat)[i]])  # Determines tot. no. stems per habitat of the focal torus-based map.
        Torspstcnthab[i]=sum(spmat[newhab==unique(habitat)[i]])    # Determines tot. no. stems for focal sp. per habitat of the focal torus-based map.
       }
      Torspprophab=Torspstcnthab/Tortotstcnthab   # Calculates relative stem density of focal sp. per habitat of the focal torus-based map.  
      for(i in 1:num.habs)
       {
        if(spprophab[i]>Torspprophab[i])          # If rel. dens. of focal sp. in focal habitat of true map is greater than rel. dens. of focal sp. in focal habitat of torus-based map, then add one to "greater than" count.        
          GrLsEq[1,(4*i)-2]=GrLsEq[1,(4*i)-2]+1  
        if(spprophab[i]<Torspprophab[i])          # If rel. dens. of focal sp. in focal habitat of true map is less than rel. dens. of focal sp. in focal habitat of torus-based map, then add one to "less than" count. 
          GrLsEq[1,(4*i)-1]=GrLsEq[1,(4*i)-1]+1 
        if(spprophab[i]==Torspprophab[i])         # If rel. dens. of focal sp. in focal habitat of true map is equal to rel. dens. of focal sp. in focal habitat of torus-based map, then add one to "equal to" count.
          GrLsEq[1,4*i]=GrLsEq[1,4*i]+1 
        }
     }    # Closes "for loop" through all 20-m translations along x-axis.
   }      # Closes "for loop" through all 20-m translations along y-axis.
  for(i in 1:num.habs)
   {
    GrLsEq[1,(4*i)-3]=spstcnthab[i]
   } 
 return(GrLsEq)
}

</box>

essa função foi usada em dez de 2008 para os resultados a seguir

> torusonesp(“Calobr”, solo$soil,allspp)→res

res
       N.Hab.neo Gr.Hab.neo Ls.Hab.neo Eq.Hab.neo N.Hab.trans Gr.Hab.trans
Calobr       135        244         11          1          43           22
       Ls.Hab.trans Eq.Hab.trans N.Hab.esp.aren Gr.Hab.esp.aren Ls.Hab.esp.aren
Calobr          233            1            226              58             197
       Eq.Hab.esp.aren N.Hab.esp.hist Gr.Hab.esp.hist Ls.Hab.esp.hist
Calobr               1             25             116             139
       Eq.Hab.esp.hist
Calobr               1

Interpretação:

  1. N.Hab.neo: primeira coluna, no. de Calophyllum no habitat Neossolo = 135 indivíduos
  2. Gr.Hab.neo: número de simulações onde a densidade relativa observada de Calophyllum no habitat neossolo foi maior que as simulações (Ls.Hab.neo = menor, Eq.Hab neo= igual)…

Para calcular a significancia deve dividir pelo no. de simulações torus (256), note que o número de indivíduos observados nos habitats ficará sem sentido (N.Hab.*)!

> res/256

<box blue 100% >

      N.Hab.neo Gr.Hab.neo Ls.Hab.neo Eq.Hab.neo N.Hab.trans Gr.Hab.trans
Calobr 0.5273438   0.953125 0.04296875 0.00390625   0.1679688    0.0859375
         Ls.Hab.trans Eq.Hab.trans N.Hab.esp.aren Gr.Hab.esp.aren Ls.Hab.esp.aren
Calobr    0.9101562   0.00390625      0.8828125       0.2265625       0.7695312
       Eq.Hab.esp.aren N.Hab.esp.hist Gr.Hab.esp.hist Ls.Hab.esp.hist
Calobr      0.00390625     0.09765625        0.453125       0.5429688
       Eq.Hab.esp.hist
Calobr      0.00390625

</box>

Interpretação:

  1. Gr.Hab.neo = 0.953, significa que o valor observado de densidade relativa do Calophyllum no habitat neossolo

é em mais de 95% das vezes maior do que a simulação torus! Ou seja sua associação a esse habitat é significativamente positiva

densidade de Calophyllum observada

tapply(calo, habitat,sum)
esp.aren esp.hist      neo    trans 
     226       25      135       43 

porcentagem relativa de Calophullum por habitat

tapply(calo, habitat,sum)/sum(calo)
  esp.aren   esp.hist        neo      trans 
0.52680653 0.05827506 0.31468531 0.10023310 

densidade de todas as espécies por tipo de solo

apply(allspp,2,sum)→totalparc
tapply(totalparc, habitat,sum)
esp.aren esp.hist      neo    trans 
   10409     1128     4608     2345
 
 

densidade relativa de Calophyllum por habitat

tapply(calo, habitat,sum)/tapply(totalparc, habitat,sum)
  esp.aren   esp.hist        neo      trans 
0.02171198 0.02216312 0.02929688 0.01833689 

* a densidade relativa de Calophyllum média é de 2,3 % dos indivíduos, mas no Neossolo é quase 3% dos indivíduos

ou seja a densidade relativa de Calophyllum é cerca de 30% maior no neossolo em comparacão com a sua média em todos os habitats

Vamos ver com o K. Harms e Valencia et al. apresentaram os resultados deles, para tirar alguma idéia de como apresentá-los

Modifiquei a função para fazer dois ciclos de simulação, o primeiro iniciando com a configuração original do habitat e o segundo com o habitat original transposto (mantem a estrutura espacial, mas invertido)

Nova Função

<box blue 100% >

torusonesp=function(species,habitat,allabund,plotdim=c(320,320),gridsize=20) {

contar=0
plotdimqx=plotdim[1]/gridsize  # Calculates no. of x-axis quadrats of plot.
plotdimqy=plotdim[2]/gridsize  # Calculates no. of y-axis quadrats of plot.
hab=unique(habitat)
num.habs=length(hab)   # Determines tot. no. of habitat types.
habmat=matrix(habitat,plotdimqy,plotdimqx,byrow=F)
GrLsEq=matrix(0,1,num.habs*4)       # Creates empty matrix for output.
rownames(GrLsEq)=species       # Names single row of output matrix.
for(i in 1:num.habs)           # Creates names for columns of output matrix.
 {
  if(i==1)
    cols=c(paste("N.Hab.",hab[i],sep=""), paste("Gr.Hab.",hab[i],sep=""), paste("Ls.Hab.",hab[i],sep=""), paste("Eq.Hab.",hab[i],sep=""))
  if(i>1)
    cols=c(cols, paste("N.Hab.",hab[i],sep=""), paste("Gr.Hab.",hab[i],sep=""), paste("Ls.Hab.",hab[i],sep=""), paste("Eq.Hab.",hab[i],sep=""))  
 }
colnames(GrLsEq)=cols    # Names columns of output matrix.
 # CALCULATIONS FOR OBSERVED RELATIVE DENSITIES ON THE TRUE HABITAT MAP
  spmat=matrix(allabund[species,],plotdimqy,plotdimqx,byrow=F)  # Fills a matrix, with no. rows = plotdimqy and no. columns = plotdimqx, with the indiv. counts per quadrat of one species.
  tot=numeric()             # Creates empty vector for tot. no. stems per quadrat.
  len=length(allabund[1,])  # Determines the tot. no. of quadrats.
###SERÁ QUE PRECISA TUDO ISSO!! 

###for(i in 1:len) # Determines the tot. no. of stems, of all spp., in each quadrat. ## { ### tot[i]=sum(allabund[,i]) ## }

tot=apply(allabund,2,sum)  ## assim fica melhor, sem looping (ale dez 2008)
totmat=matrix(tot[],plotdimqy,plotdimqx,byrow=F)  # Converts "tot" to a matrix, with no. rows = plotdimqy and no. columns = plotdimqx. 
  spstcnthab=numeric()   # Creates empty vector for stem counts per sp. per habitat.
  totstcnthab=numeric()  # Creates empty vector for tot. stem counts per habitat.
  for(i in 1:num.habs)  
   {
    totstcnthab[i]=sum(totmat[habmat==unique(habitat)[i]])  # Determines tot. no. stems per habitat of the true map.
    spstcnthab[i]=sum(spmat[habmat==unique(habitat)[i]])    # Determines tot. no. stems for focal sp. per habitat of the true map.     
   }
  spprophab=spstcnthab/totstcnthab         # Calculates observed relative stem density of focal sp. per habitat of the true map.
 # CALCULATIONS FOR RELATIVE DENSITIES ON THE TORUS-BASED HABITAT MAPS

for (ciclo in 1:2)

{
if(ciclo==1)
habmat=habmat
if(ciclo==2)
habmat=t(habmat)
  for(x in 0:(plotdimqx-1))    # Opens "for loop" through all 20-m translations along x-axis.
    { 
    for(y in 0:(plotdimqy-1))  # Opens "for loop" through all 20-m translations along y-axis.
     {
	contar=contar+1
      newhab=matrix(0,plotdimqy,plotdimqx)  # Creates empty matrix of quadrats' habitat designations.
 # The following "if" statements create the x,y torus-translation of the habitat map.
      if(y==0 & x==0)          
         newhab=habmat
      if(y==0 & x>0)
         newhab=habmat[c(1:plotdimqy),c((plotdimqx-x+1):plotdimqx,1:(plotdimqx-x))] 
      if(x==0 & y>0)
         newhab=habmat[c((plotdimqy-y+1):plotdimqy,1:(plotdimqy-y)),c(1:plotdimqx)]
      if(x>0 & y>0)
          newhab=habmat[c((plotdimqy-y+1):plotdimqy,1:(plotdimqy-y)),c((plotdimqx-x+1):plotdimqx,1:(plotdimqx-x))] 
      Torspstcnthab=numeric()   # Creates empty vector for stem counts per sp. per habitat in torus-based maps.
      Tortotstcnthab=numeric()  # Creates empty vector for tot. stem counts per habitat in torus-based maps.
      for(i in 1:num.habs)
       {
        Tortotstcnthab[i]=sum(totmat[newhab==unique(habitat)[i]])  # Determines tot. no. stems per habitat of the focal torus-based map.
        Torspstcnthab[i]=sum(spmat[newhab==unique(habitat)[i]])    # Determines tot. no. stems for focal sp. per habitat of the focal torus-based map.
       }
      Torspprophab=Torspstcnthab/Tortotstcnthab   # Calculates relative stem density of focal sp. per habitat of the focal torus-based map.  
      for(i in 1:num.habs)
       {
        if(spprophab[i]>Torspprophab[i])          # If rel. dens. of focal sp. in focal habitat of true map is greater than rel. dens. of focal sp. in focal habitat of torus-based map, then add one to "greater than" count.        
          GrLsEq[1,(4*i)-2]=GrLsEq[1,(4*i)-2]+1  
        if(spprophab[i]<Torspprophab[i])          # If rel. dens. of focal sp. in focal habitat of true map is less than rel. dens. of focal sp. in focal habitat of torus-based map, then add one to "less than" count. 
          GrLsEq[1,(4*i)-1]=GrLsEq[1,(4*i)-1]+1 
        if(spprophab[i]==Torspprophab[i])         # If rel. dens. of focal sp. in focal habitat of true map is equal to rel. dens. of focal sp. in focal habitat of torus-based map, then add one to "equal to" count.
          GrLsEq[1,4*i]=GrLsEq[1,4*i]+1 
       }
     }    # Closes "for loop" through all 20-m translations along x-axis.
   }      # Closes "for loop" through all 20-m translations along y-axis.
cat("\n ciclo no.= ", ciclo, "\t simulações = ", contar, "\n") 

} ## Fechar ciclos de diferentes configurações do habitat original (a principio apenas mais o transposto) Ale 2008

  for(i in 1:num.habs)
   {
    GrLsEq[1,(4*i)-3]=spstcnthab[i]
   } 
return(GrLsEq)

} </box>

torusonesp(“Calobr”,habitat,allspp)
 ciclo no.=  1   simulações =  256 
 ciclo no.=  2   simulações =  512 
       N.Hab.neo Gr.Hab.neo Ls.Hab.neo Eq.Hab.neo N.Hab.trans Gr.Hab.trans Ls.Hab.trans Eq.Hab.trans N.Hab.esp.aren
Calobr       135        494         17          1          43           46          465            1            226
       Gr.Hab.esp.aren Ls.Hab.esp.aren Eq.Hab.esp.aren N.Hab.esp.hist Gr.Hab.esp.hist Ls.Hab.esp.hist Eq.Hab.esp.hist
Calobr              97             414               1             25             236             275               1

Os resultados permanencem consistentes com a primeira simulação, não houve grande diferença, apenas aumentou um pouco a significancia da associação com o neossolo.

  • /home/adalardo/farm/labtrop/data/pages/projetos/pp_peic/restrito/calophyllum/habitat/torus.txt
  • Última modificação: 2026/03/27 13:51
  • por 127.0.0.1