r - 食物网中的营养位置/高度(沿着网络中的路径)

标签 r social-networking

作为为我正在处理的包开发演示的一部分,我需要量化一个经典的生态食物网,如下所述。我已经检查了素食主义者、二分法和 sna,但没有看到任何能满足我需要的东西,尽管我可能是错的——那些都是大包装。因此,我想知道这个想法是否已经打包,或者是否有人有一种聪明的方法来计算结果。好像应该是一个包。

食物网可以用物种 A:F 之间的相互作用矩阵来描述,如代码和图表所示。换句话说,人们会说“A吃B吃E”等等(在矩阵中很难看到,在图中微不足道)。

species <- LETTERS[1:6]

links <- c(0, 1, 0, 0, 0, 0,
    1, 0, 1, 1, 1, 0,
    0, 1, 0, 0, 1, 0,
    0, 1, 0, 0, 1, 1,
    0, 1, 1, 1, 0, 0,
    0, 0, 0, 1, 0, 0)

L <- matrix(links, nrow = 6, byrow = TRUE,
    dimnames = list(species, species))

我想计算每个物种的营养位置和营养高度。营养位置定义为食物链中特定物种以下的物种总数 + 1。在图中,A 的营养位置为 6,D 的营养位置为 3。另一方面,营养高度是平均值物种在它参与的每条独立链中的位置。物种 B 连接到 4 个不同的链(路径);它的高度是当时被认为是 1 个位置的平均值:(3 + 3 + 3 + 2)/4 = 2.75。

在计算上,需要读取矩阵 L,然后通过矩阵隐含的不同路径来计算所需的值。

如果这不是太钝,有没有人知道一个可以做到这一点的包,或者看到一种遵循路径并计算各种长度/选项的方法?它“感觉”必须有一些应该有效的递归/应用方法,但我不想重新发明东西。

提前致谢

a simple food web

最佳答案

这是经典的图论东西。您拥有的是一个有向图,其中动物是节点,而“A 吃 B”是边。然后,您的矩阵是一个对边进行编码的邻接矩阵(但您可能希望矩阵的一半为 0,因此您没有 A 吃 B 和 B 吃 A。同样,对角线上的零,除非您有同类相食的行为)。这是另一个答案中链接的有向无环图。

图论的包列在图形模型任务 View 中:

http://ftp.heanet.ie/mirrors/cran.r-project.org/web/views/gR.html

我认为 igraph 会做你想做的。首先从你的矩阵制作一个图形对象(使用只有上三角形的修改矩阵):

> LG=graph.adjacency(L)
> LG
Vertices: 6 
Edges: 7 
Directed: TRUE 
Edges:

[0] 'A' -> 'B'
[1] 'B' -> 'C'
[2] 'B' -> 'D'
[3] 'B' -> 'E'
[4] 'C' -> 'E'
[5] 'D' -> 'E'
[6] 'D' -> 'F'

然后你可以使用neighbor.size来获得营养位置:
> neighborhood.size(LG,Inf,mode="out")
[1] 6 5 2 3 1 1

应该按照 A、B、C、D、E、F 的顺序排列。注意使用 Inf 来停止限制邻域,并使用 mode="out"只沿着吃东西方向的图边。

所有关于食物链的讨论都让我感到饥饿。希望这能让你开始。

巴里

关于r - 食物网中的营养位置/高度(沿着网络中的路径),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7679019/

相关文章:

text - 社交媒体情绪分类数据集

r - 允许 gls 中的相关参数取决于分组因子

javascript - 英特尔 XDK 社交登录

r - dplyr:变异内的整数采样

R xts - 使用 last() 时下标越界

php - 如何在不使用 URL 的情况下在 Facebook 上分享我的新闻

rss - 自动发布到 Instagram

SQL 来自联系人的最新照片(按联系人分组)

r-在向量中找到两个最接近的值

r - R 中的点图与点阵 : display of vertical axis and error bars