答えの形式は、次に何をしたいかによって異なりますが、次のような試みがあります。
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
フォームに含めると便利です(グラフをプロットするためのレイアウトオプションは多数あります)。