gpt4 book ai didi

r - 基于物种特征值模拟随机二分网络 - 在R中

转载 作者:行者123 更新时间:2023-12-03 22:17:52 25 4
gpt4 key购买 nike

我想在 R 中创建二分网络。例如,如果您有一个包含两种类型物种的数据框(只能跨物种相互作用,不能在物种内相互作用),并且每个物种都有一个特征值(例如,捕食者的嘴巴大小允许谁吃掉哪种猎物),我们如何模拟基于物种特征的网络(例如,两个物种只有在它们的特征值重叠时才能相互作用)?

更新:这是我正在尝试做的一个最小示例。 1) 创建系统发育树; 2)在系统发育上模拟性状; 3)创建基于物种特征值的网络。

# packages
install.packages(c("ape","phytools"))
library(ape); library(phytools)

# Make phylogenetic trees
tree_predator <- rcoal(10)
tree_prey <- rcoal(10)

# Simulate traits on each tree
trait_predator <- fastBM(tree_predator)
trait_prey <- fastBM(tree_prey)

# Create network of predator and prey
## This is the part I can't do yet. I want to create bipartite networks, where
## predator and prey interact based on certain crriteria. For example, predator
## species A and prey species B only interact if their body size ratio is
## greater than X.

最佳答案

答案的格式实际上取决于你下一步想做什么,但这是一种尝试:

set.seed(101)
npred <- nprey <- 10
tree_predator <- rcoal(npred)
tree_prey <- rcoal(nprey)

## Simulate traits on each tree
trait_predator <- fastBM(tree_predator)
trait_prey <- fastBM(tree_prey)

(我使用 set.seed(101) 来实现可重复性,所以这些是我的特征结果......

> trait_predator
t1 t9 t4 t8 t5 t2
-2.30933392 -3.17387148 -0.01447305 -0.01293273 -0.25483749 1.87279355
t6 t10 t3 t7
0.70646610 0.79508740 0.05293099 0.00774235
> trait_prey
t10 t7 t9 t6 t8 t1
0.849256948 -0.790261142 0.305520218 -0.182596793 -0.033589511 -0.001545289
t4 t5 t3 t2
-0.312790794 0.475377720 -0.222128629 -0.095045954

...)

您生成的值位于无限空间中,因此采用它们的比率并没有多大意义;我们假设它们是大小的对数,因此exp(x-y) 将是捕食者/猎物的大小比。任意地,我假设截止值为 1.5 ...

使用 outer 比较所有捕食者和猎物的特征:这会创建一个二进制 (0/1) 矩阵。

bmatrix <- outer(trait_predator,trait_prey,
function(x,y) as.numeric(exp(x-y)>1.5))

可视化结果的一种方法......

library(Matrix)
image(Matrix(bmatrix),xlab="Prey",ylab="Predator",sub="")

enter image description here

例如,您可以看到捕食者 #6(在上面的输出中标记为 t2)非常大(log size=1.87),所以它吃掉了所有的猎物物种......

使用 igraph(我这里的一些方法有点 hacky)

library(igraph)

edges <- which(bmatrix==1,arr.ind=TRUE) ## extract vertex numbers
## distinguish prey (columns) from pred (rows)
edges[,2] <- npred+edges[,2]

gg <- graph.bipartite(rep(1:0,c(npred,nprey)),
c(t(edges)))
## c(t(edges)) collapses the two-column matrix to a vector in row order ...
## now plot ...
plot(gg,vertex.color=rep(c("cyan","pink"),c(npred,nprey)),
edge.arrow.mode=">")

这与上面的矩阵格式相匹配——捕食者 1 和 2(= 顶点 1 和 2)不吃任何人,猎物 2(= 顶点 12)被许多不同的捕食者吃掉......这种表示更漂亮但不是必然更清晰(例如捕食者 7 和 8 都吃猎物 2(顶点 12),但它们的箭头重合)。不过,如果您想应用图论方法,以 igraph 形式使用它可能会很好(并且有大量布局选项可用于绘制图形)。

enter image description here

关于r - 基于物种特征值模拟随机二分网络 - 在R中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12150630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com