1

私は生物学者であり、Rの初心者であり、単純な人口モデルを作成する方法を学んでいます。

したがって、100年間モデル化される30の年齢クラスの女性(1:4は非ブリーダー、5:30はブリーダー)の人口マトリックス(「ポップ」)があります。

pop <- matrix(0,30,100)

次に、このマトリックスに3人の若い成人女性を配置します。

pop[5, 1] <- 3

次に、これを確率論的に100年間実行して、この人口が時間の経過とともにどのように機能するかを確認したいと思います。(私はこれらを記入していませんが、あなたはそれらを必要としません、それらはすべて性的に成熟した大人とは異なる生存確率を持っています。)

for (t in 1:100)  {  # Edited y to t, typing error!
    pop[1,t+1] <- rbinom(1,colSums(pop[5:30, t]), b/2) 
    pop[5, t+1] <- rbinom(1, pop[4, t], s2)
    pop[6, t+1] <- rbinom(1, pop[5, t], s2)
    .....
    pop[30, t+1] <- rbinom(1, pop[29, t], s2)
}

だから私の質問は:明示的に30行のコードを書かなくてもこの行列を作成する方法はありますか?5〜30行目はすべて同じになるため、5時間(文字通り)Web検索とR手動読み取りを行った後でも、行にインデックスを付ける方法が見つかりません。これがここで必要なことのようです。

この母集団をモデル化する別の方法を含め、あらゆる洞察をここで歓迎します。

4

1 に答える 1

5

はベクトル化されているのでrbinom、置き換えることができるはずです

pop[1,t+1] <- rbinom(1,colSums(pop[5:30, t]), b/2) 
pop[5, t+1] <- rbinom(1, pop[4, t], s2)
pop[6, t+1] <- rbinom(1, pop[5, t], s2)
.....
pop[30, t+1] <- rbinom(1, pop[29, t], s2)

pop[,t+1] <- rbinom(27,size=c(colSums(pop[5:30,t]),pop[4:29,t]),
                       prob=c(b/2,rep(s2,26)))

またはそのようなもの(26と27が間違っている可能性があり、私は誤ってカウントした可能性があります)

しかし、私が本当にあなたがすべきだと思うのは、次のようなものです。

pop[1,t+1]  <- rpois(1,b/2*sum(pop[5:30,t]))
pop[-1,t+1] <- rbinom(29,size=pop[1:29,t]),
                       prob=c(rep(s1,4),rep(s2,26)))

これは、最後の年齢層の個人が世界の端から落ちて死ぬことを前提としています...私はrpoisここで二項分布ではなくポアソンの繁殖を可能にするために使用していますがrbinom(1,size=sum(pop[5:30,t])/2,prob=p)、女性が最大で1を持っていることを本当に主張したい場合は使用できます子孫(確率p)

于 2013-02-18T16:31:56.043 に答える