マトリックスベースの母集団モデルを作成しましたが、散らばっている個体が行列間を移動できるように、異なる動物グループを表すために複数の行列を同時に実行したい。もともと、私は2番目の行列を得るためにすべてを繰り返していましたが、特定の条件(特定の行列が実行を停止する、つまりそのグループが終了したとき)でforループとbreak()を使ってモデルを実行したので、単なる行列ではなく、モデル全体を止めることができます。複数の行列モデルを同時に実行する際に問題が発生する
私は誰かがモデルをコード化する最良の方法について提案しているので、forループ全体を中断して停止するのではなく、その特定のマトリックスを越えて実行することを止めていたのだろうかと思っていました。私は少し困惑しています。私は以下の1つの行列の1つの実行を含みます。
また、誰かが9つのマトリックスを作成して実行するより効率的な方法を持っている場合、9回のアドバイスを書き出すよりもずっと感謝しています。
n.steps <- 100
mats <- array(0,c(85,85,n.steps))
ns <- array(0,c(85,n.steps))
ns[1,1]<-0
ns[12,1]<-rpois(1,3)
ns[24,1]<-rpois(1,3)
ns[85,1] <- 1
birth<-4
nextbreed<-12
for (i in 2:n.steps){
# set up an empty matrix;
mat <- matrix(0,nrow=85,ncol=85)
surv.age.1 <- 0.95
x <- 2:10
diag(mat[x,(x-1)]) <- surv.age.1
surv.age.a <- 0.97
disp <- 1:74
disp <- disp*-0.001
disp1<-0.13
disp<-1-(disp+disp1)
survdisp<-surv.age.a*disp
x <- 11:84
diag(mat[x,(x-1)])<-survdisp
if (i == nextbreed) {
pb <- 1
} else {
pb <- 0
}
if (pb == 1) {
(nextbreed <- nextbreed+12)
}
mat[1,85] <- pb*birth
mat[85,85]<-1
death<-sample(c(replicate(1000,
sample(c(1,0), prob=c(0.985, 1-0.985), size = 1))),1)
if (death == 0) {
break()}
mats[,,i]<- mat
ns[,i] <- mat%*%ns[,i-1]
}
group.size <- apply(ns[1:85,],2,sum)
plot(group.size)
View(mat)
View(ns)
おそらく、計算する必要があるかどうかを決定するフラグを各マトリックスに設定します。ループの中で 'if'を使ってテストしてください – dww
空間的な場所の間に分散がある場合、それが孤立した場所を再コロニー化できますか? (マトリックス全体を0に設定することでグループを無視しないことが考慮されているのだろうかと思っています) –
はい、ディスペンサが回転できるようにすることが最終的な目的です - しかし、そのカラムを0に設定して、利用可能な場合は犬を使用してください。 – redferry