Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于R中物种特征值的随机二部网络模拟_R_Phylogeny - Fatal编程技术网

基于R中物种特征值的随机二部网络模拟

基于R中物种特征值的随机二部网络模拟,r,phylogeny,R,Phylogeny,我想在R中创建二分网络。例如,如果你有两种类型物种的数据框架(只能在物种之间相互作用,而不能在物种内部相互作用),并且每个物种都有一个特征值(例如,捕食者的嘴巴大小允许谁吃哪个猎物物种),我们如何根据物种的特征模拟一个网络(例如,两个物种只有在其特征值重叠时才能相互作用) 更新:这里是我尝试做的一个最小的例子。1) 建立系统发育树;2) 在系统发育上模拟性状;3) 基于物种特征值创建网络 # packages install.packages(c("ape","phytools")) libra

我想在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.
#包
安装软件包(c(“ape”、“phytools”))
图书馆(ape);图书馆(植物醇)
#建立系统发育树

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

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)
…)

您生成的值是在一个无界空间上的,所以取它们的比率是没有意义的;我们假设它们是大小的对数,因此
exp(x-y)
将是捕食者/猎物的大小比。任意地,我假设截止值是1.5

使用
outer
比较所有捕食者与猎物的特征:这将创建一个二元(0/1)矩阵

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

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

库(igraph)

你能再具体一点吗?首先,您可以使用任何合理的随机分布(例如,对数正态分布->
rlnorm
)和二元交互作用(吃/不吃),或者基于截止点(例如,捕食者吃掉所有大小比小于阈值的猎物),或者通过逻辑回归类型机制来模拟特征值。关于你所期望的结果的更多细节会有很大帮助…@BenBolker对,我完全可以模拟特征,在这个例子中,我使用的是phytools::fastBM。很快用一个例子更新帖子…@BenBolker用一个简单的例子编辑了我正在尝试做的事情。谢谢,我想这正是我需要的!
> 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 
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="")
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=">")