R错误地将丰度数据识别为存在/不存在数据(化石包)

Posted

技术标签:

【中文标题】R错误地将丰度数据识别为存在/不存在数据(化石包)【英文标题】:R falsely identifying abundance data as presence/absence data (fossil package) 【发布时间】:2019-04-03 16:48:21 【问题描述】:

我正在尝试在 RStudio 中使用名为“fossil”的包的 spp.est 函数。我创建了一个名为“akimiskibb”的丰度数据矩阵,其中物种作为列,站点作为行。当我尝试使用函数 spp.est 时,我输入:

spp.est(akimiskibb, rand = 10, abund = TRUE, counter = FALSE, max.est = 'all')

问题出现是因为我的丰富数据有很多零,所以我收到以下错误消息:

if (max(x) == 1) 中的错误警告(“不能使用发生率数据进行基于丰度的分析。如果数据是基于发生率的,请使用 'aund=FALSE' 选项再次运行此函数” ) : 需要 TRUE/FALSE 的缺失值

过去,此函数适用于具有大量零的矩阵(这也是丰富的数据,而不是存在/不存在)。我不知道我做错了什么。

有没有人经历过类似的事情并找到解决方法?

谢谢,

凯拉

数据: 矩阵格式:

 *sp1 sp2 sp3 sp4 sp5 sp6 sp7 sp8 sp9 sp10 sp11 sp12 sp13 sp14 sp15 sp16 sp17
 sample1    0   0   0   0   0   0   0   1   0    0    0    0    0    0    1    
 0    0
 sample 2   0   0   0   1   0   0   1  25   7    0   18   12    0    0    0    
 1    1
 sample3    0   0   0   0   0   0   0   3   0    0    3    1    0    0    0    
 5    4
 sp18 sp19 sp20 sp21 sp22 sp23 sp24 sp25 sp26 sp27 sp28 sp29 sp30 sp31 
 sp32
 sample1     0    0    0    0    0    0    0    0    0    0    0    0    0    
 0    0
 sample 2    1    0    1    0    0    0    0    0    0    0    0    3    2    
 0    3
 sample3     0    0    1    0    0   11    0    0    0    0    0    0    0    
 0    1
 sp33 sp34 sp35 sp36 sp37 sp38 sp39 sp40 sp41 sp42 sp43  X
 sample1     0    0    0    0    0    0    0    0    0    0    0 NA
 sample 2    0    0    3    2    1    0    0    1    8    0    0 NA
 sample3     0    0    0    0    0    0    0    0    0    0    0 NA*

输入:

 *structure(list(sp1 = c(0L, 0L, 0L), sp2 = c(0L, 0L, 0L), sp3 = c(0L, 
 0L, 0L), sp4 = c(0L, 1L, 0L), sp5 = c(0L, 0L, 0L), sp6 = c(0L, 
 0L, 0L), sp7 = c(0L, 1L, 0L), sp8 = c(1L, 25L, 3L), sp9 = c(0L, 
 7L, 0L), sp10 = c(0L, 0L, 0L), sp11 = c(0L, 18L, 3L), sp12 = c(0L, 
 12L, 1L), sp13 = c(0L, 0L, 0L), sp14 = c(0L, 0L, 0L), sp15 = c(1L, 
 0L, 0L), sp16 = c(0L, 1L, 5L), sp17 = c(0L, 1L, 4L), sp18 = c(0L, 
 1L, 0L), sp19 = c(0L, 0L, 0L), sp20 = c(0L, 1L, 1L), sp21 = c(0L, 
 0L, 0L), sp22 = c(0L, 0L, 0L), sp23 = c(0L, 0L, 11L), sp24 = c(0L, 
 0L, 0L), sp25 = c(0L, 0L, 0L), sp26 = c(0L, 0L, 0L), sp27 = c(0L, 
 0L, 0L), sp28 = c(0L, 0L, 0L), sp29 = c(0L, 3L, 0L), sp30 = c(0L, 
 2L, 0L), sp31 = c(0L, 0L, 0L), sp32 = c(0L, 3L, 1L), sp33 = c(0L, 
 0L, 0L), sp34 = c(0L, 0L, 0L), sp35 = c(0L, 3L, 0L), sp36 = c(0L, 
 2L, 0L), sp37 = c(0L, 1L, 0L), sp38 = c(0L, 0L, 0L), sp39 = c(0L, 
 0L, 0L), sp40 = c(0L, 1L, 0L), sp41 = c(0L, 8L, 0L), sp42 = c(0L, 
 0L, 0L), sp43 = c(0L, 0L, 0L), X = c(NA, NA, NA)), .Names = c("sp1", 
 "sp2", "sp3", "sp4", "sp5", "sp6", "sp7", "sp8", "sp9", "sp10", 
 "sp11", "sp12", "sp13", "sp14", "sp15", "sp16", "sp17", "sp18", 
 "sp19", "sp20", "sp21", "sp22", "sp23", "sp24", "sp25", "sp26", 
 "sp27", "sp28", "sp29", "sp30", "sp31", "sp32", "sp33", "sp34", 
 "sp35", "sp36", "sp37", "sp38", "sp39", "sp40", "sp41", "sp42", 
 "sp43", "X"), class = "data.frame", row.names = c("sample1", 
 "sample 2", "sample3"))*

使用的包:

化石(在 R 版本 3.4.4 中制作)

R 版本:R x64 3.4.1

【问题讨论】:

欢迎来到 SO--请使用 dput() 以可重现的格式发布您的数据。查看***.com/questions/5963269/… 你好。我已经用我的数据编辑了这个问题。这是你的意思吗? 看看下面的答案 【参考方案1】:

好的,不熟悉这个包所以谢谢你介绍给我。很高兴看到 R 是如何在这么多学科中使用的。

我发现您的应用程序存在两个问题。首先,根据spp.estfossil 文档,您的数据需要将样本作为列,将物种作为行。第二个问题是具有NA 值的“物种”X。您需要摆脱这些,因为该函数无法处理它们。

代码如下:

library(fossil)
library(tidyverse)

akimiskibb <- as.data.frame(t(akimiskibb)) %>%
 filter(!is.na(sample1) == T)

spp.est(akimiskibb, rand = 10, abund = TRUE, counter = FALSE, max.est = 'all')

# which results in 

     N.obs S.obs S.obs(+95%) S.obs(-95%) Chao1 Chao1(upper) Chao1(lower)
[1,]     1  11.8    25.30995   -1.709948 20.90     28.38331     13.41669
[2,]     2  16.0    25.46770    6.532301 27.15     33.37680     20.92320
[3,]     3  20.0    20.00000   20.000000 26.00     29.24037     22.75963
          ACE ACE(upper) ACE(lower)    Jack1 Jack1(upper) Jack1(lower)
[1,] 14.56286   31.16289  -2.037175 16.82501     36.43129    -2.781268
[2,] 19.19286   30.64000   7.745713 22.21008     35.28448     9.135677
[3,] 22.28571   22.28571  22.285714 25.95082     25.95082    25.950820
attr(,"data.type")
[1] "abundance"
Warning messages:
1: In ests[[k]](b) :
  This data appears to be presence/absence based, but this estimator is for abundance data only
2: In ests[[k]](b) :
  This data appears to be presence/absence based, but this estimator is for abundance data only

【讨论】:

谢谢 Ben G。所以我得先下载 tidyverse 包,对吧? 仅用于%&gt;% 函数。对于进行数据科学/分析来说,这是一个非常棒的功能。如果我回答了您的问题,请将其标记为已回答,以便将其关闭。 当我尝试这个时,它告诉我“过滤器错误(!is.na(sample1)== T):找不到对象'sample1'”。有什么想法吗?我必须对另外 2 个格式与 akimiskibb 完全相同的矩阵执行此操作,但所有这些矩阵都会弹出此错误消息。 哎呀没关系,我想通了。我会将其标记为已回答。非常感谢。

以上是关于R错误地将丰度数据识别为存在/不存在数据(化石包)的主要内容,如果未能解决你的问题,请参考以下文章

移动端车牌识别为优质app而存在

智能地将不同帐户识别为同一用户

Spring源码报错:错误: 程序包jdk.jfr不存在

技术贴 | R语言:组学关联分析和pheatmap可视化

错误 程序包org.apache.http.conn.util不存在

识别 DNS​​ 数据包