运行香农和辛普森:素食套餐

时间:2019-08-20 08:28:43

标签: r vegan

我对使用素食主义者进行生物多样性指数计算感兴趣          包。辛普森指数有效,但香农没有结果          论点。我希望有人知道解决方法

    What I have tried is that I have converted data. frame into vegan
    package test data format using code below  

      Plot     <- c(1,1,2,2,3,3,3)
      species  <- c( "Aa","Aa", "Aa","Bb","Bb","Rr","Xx")
      count   <-  c(3,2,1,4,2,5,7)

      veganData  <- data.frame(Plot,species,count)
      matrify(veganData )
      diversity(veganData,"simpson")
      diversity(veganData,"shannon", base = exp(1))


          1. I get the following results, so I think it produces all
              simpsons indices   

           > diversity(veganData,"simpson")
              simpson.D simpson.I simpson.R
           1      1.00      0.00       1.0
           2      0.60      0.40       1.7
           3      0.35      0.65       2.8


           2. But when I run for Shannon index get the following 
             message 

               > diversity(veganData,"shannon")
              data frame with 0 columns and 3 rows

     I am not sure why its not working ? do we need to make any changes 
      in data formatting while switching the methods?

1 个答案:

答案 0 :(得分:2)

您的数据必须采用宽格式。同样,计数必须是总计或平均值(对于同一图,不得重复计数)。

library(dply); library(tidyr)

df <- veganData %>% 
         group_by(Plot, species) %>% 
         summarise(count = sum(count)) %>% 
         ungroup %>% 
         spread(species, count, fill=0)

df
# # A tibble: 3 x 5
#     Plot    Aa    Bb    Rr    Xx
#    <dbl> <dbl> <dbl> <dbl> <dbl>
# 1     1     5     0     0     0
# 2     2     1     4     0     0
# 3     3     0     2     5     7

diversity(df[,-1], "shannon")
# [1] 0.0000000 0.5004024 0.9922820

要检查计算是否正确,请注意Shannon计算是以-1 x Pi * lnPi的总和进行的

# For plot 3:

-1*(
    (2/(2+5+7))*log((2/(2+5+7))) + #Pi*lnPi of Bb
      (5/(2+5+7))*log((5/(2+5+7))) + #Pi*lnPi of Rr 
        (7/(2+5+7))*log((7/(2+5+7))) #Pi*lnPi of Xx
    )

 # [1] 0.992282