3

Rで2つの部分からなるネットワークを作成したいと思います。たとえば、2種類の種のdata.frameがあり(種内ではなく、種間でのみ相互作用できる)、各種に特性値(たとえば、捕食者の口は、誰がどの獲物種を食べることができるかを許可します)、種の特性に基づいてネットワークをどのようにシミュレートしますか(つまり、2つの種は、特性が値で重複している場合にのみ相互作用できます)?

更新:これは私がやろうとしていることの最小限の例です。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.
4

1 に答える 1

2

答えの形式は、次に何をしたいかによって異なりますが、次のような試みがあります。

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

結果を視覚化する1つの方法...

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

ここに画像の説明を入力してください

たとえば、捕食者#6(t2上記の出力でラベル付けされている)は本当に大きい(ログサイズ= 1.87)ので、すべての獲物種を食べることがわかります...

使用するigraph(ここでの私のアプローチのいくつかは少しハッキーです)

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フォームに含めると便利です(グラフをプロットするためのレイアウトオプションは多数あります)。

ここに画像の説明を入力してください

于 2012-08-28T01:42:01.920 に答える