Find where species accumulation curve reaches asymptote

感情迁移 提交于 2019-12-12 03:43:09

问题


I have used the specaccum() command to develop species accumulation curves for my samples.

Here is some example data:

site1<-c(0,8,9,7,0,0,0,8,0,7,8,0)
site2<-c(5,0,9,0,5,0,0,0,0,0,0,0)
site3<-c(5,0,9,0,0,0,0,0,0,6,0,0)
site4<-c(5,0,9,0,0,0,0,0,0,0,0,0)
site5<-c(5,0,9,0,0,6,6,0,0,0,0,0)
site6<-c(5,0,9,0,0,0,6,6,0,0,0,0)
site7<-c(5,0,9,0,0,0,0,0,7,0,0,3)
site8<-c(5,0,9,0,0,0,0,0,0,0,1,0)
site9<-c(5,0,9,0,0,0,0,0,0,0,1,0)
site10<-c(5,0,9,0,0,0,0,0,0,0,1,6)
site11<-c(5,0,9,0,0,0,5,0,0,0,0,0)
site12<-c(5,0,9,0,0,0,0,0,0,0,0,0)
site13<-c(5,1,9,0,0,0,0,0,0,0,0,0)

species_counts<-rbind(site1,site2,site3,site4,site5,site6,site7,site8,site9,site10,site11,site12,site13)

accum <- specaccum(species_counts, method="random", permutations=100)

plot(accum)

In order to ensure I have sampled sufficiently, I need to make sure the curve of the species accumulation plot reaches an asymptote, defined as a slope of <0.3 between the last two points (ei between sites 12 and 13).

results <- with(accum, data.frame(sites, richness, sd))

Produces this:

 sites richness        sd
1      1     3.46 0.9991916
2      2     4.94 1.6625403
3      3     5.94 1.7513054
4      4     7.05 1.6779918
5      5     8.03 1.6542263
6      6     8.74 1.6794660
7      7     9.32 1.5497149
8      8     9.92 1.3534841
9      9    10.51 1.0492422
10    10    11.00 0.8408750
11    11    11.35 0.7017295
12    12    11.67 0.4725816
13    13    12.00 0.0000000

I feel like I'm getting there. I could generate an lm with site vs richness and extract the exact slope (tangent?) between sites 12 and 13. Going to search a bit longer here.


回答1:


Streamlining your data generation process a little bit:

species_counts <- matrix(c(0,8,9,7,0,0,0,8,0,7,8,0,
5,0,9,0,5,0,0,0,0,0,0,0, 5,0,9,0,0,0,0,0,0,6,0,0,
5,0,9,0,0,0,0,0,0,0,0,0, 5,0,9,0,0,6,6,0,0,0,0,0,
5,0,9,0,0,0,6,6,0,0,0,0, 5,0,9,0,0,0,0,0,7,0,0,3,
5,0,9,0,0,0,0,0,0,0,1,0, 5,0,9,0,0,0,0,0,0,0,1,0,
5,0,9,0,0,0,0,0,0,0,1,6, 5,0,9,0,0,0,5,0,0,0,0,0,
5,0,9,0,0,0,0,0,0,0,0,0, 5,1,9,0,0,0,0,0,0,0,0,0),
byrow=TRUE,nrow=13)

Always a good idea to set.seed() before running randomization tests (and let us know that specaccum is in the vegan package):

set.seed(101)
library(vegan)
accum <- specaccum(species_counts, method="random", permutations=100)

Extract the richness and sites components from within the returned object and compute d(richness)/d(sites) (note that the slope vector is one element shorter than the origin site/richness vectors: be careful if you're trying to match up slopes with particular numbers of sites)

(slopes <- with(accum,diff(richness)/diff(sites)))
## [1] 1.45 1.07 0.93 0.91 0.86 0.66 0.65 0.45 0.54 0.39 0.32 0.31

In this case, the slope never actually goes below 0.3, so this code for finding the first time that the slope falls below 0.3:

which(slopes<0.3)[1]

returns NA.



来源:https://stackoverflow.com/questions/38754612/find-where-species-accumulation-curve-reaches-asymptote

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!