【发布时间】:2019-06-06 19:09:12
【问题描述】:
我不确定表达这一点的最佳方式,也许我的目标比我努力实现它更容易。我正在尝试比较两个共现矩阵(MatA 和 MatB),它们的站点为行,每个站点出现的物种为列,1=存在,0=不存在。这是一些较小的假数据:
>MatA
G. magnirostris G. fortis G. fuliginosa G. difficilis
Site1 0 0 1 1
Site2 1 0 1 1
Site3 0 1 1 0
>MatB
G. magnirostris G. fortis G. fuliginosa G. difficilis
Jefferson 1 1 0 0
Hillsdale 0 1 1 1
对于 MatB 中的每一行(站点),我想搜索 MatA 中的每一行(站点),并首先计算有多少物种同时出现,如果可能的话,跟踪哪些物种。因此,对于 Jefferson 站点,在 MatA 中,G. magnirostris 和 G. fortis 物种的组合从未发生过。所以结果=0。 对于 Hillsdale,这 3 个物种(G. fuliginosa、G. fortis 和 G. difficilis)从未像所有 3 个物种一样出现,但有两种组合: G. fortis & G. fuliginosa,然后是 G. fuliginosa & G. difficilis。
我应该提到我有数百列(物种)和数千行(站点)。我尝试使用 MatA %*% t(MatB) 进行矩阵乘法作为开始的一种方式,但它错误为不合格,我认为这不是我想要的。任何有关如何设置的建议都会非常有帮助。这几天一直在为此苦苦挣扎!
编辑:我编写了 MatA (MatA.probs) 的成对共现概率矩阵。我现在想计算 MatB 中每行(站点)的物种匹配的组合概率。例如:
>MatA.prob
G. magnirostris G. fortis G. fuliginosa G. difficilis
G. magnirostris NA 0 1 1
G. fortis 0 NA 1 2
G. fuliginosa 1 1 NA 2
G. difficilis 1 0 2 NA
然后,在 Jefferson 中,物种组合的组合概率将 = 0,因为该组合从未发生,但在 Hillsdale,对于三种可能的组合中的每一种,它将是 1 * 0* 2。我如何逐行匹配 MatB 中的物种组合来计算这个?
【问题讨论】:
-
如果您在有数百列时关心all possible combinations,我不确定这是否可以解决,即使您只考虑每行中存在的物种。
-
感谢您的回复并帮助我思考这个问题!我做了一些更新,将 MatA 转换为概率矩阵。我想我可以计算每行 MatB 的组合概率。见编辑。我现在仍然确定如何将 colnames 与代码匹配...
-
我意识到你可以以不同的方式看待这个问题,我已经更新了我的答案。
标签: r dplyr lookup binary-data