Как использовать цикл for с одой - PullRequest
2 голосов
/ 05 апреля 2019

Я работаю над созданием модели, основанной на динамике Лотки-Вольтерры, которая включает в себя стохастическую меру дисперсии, с целью изучения размеров популяции с течением времени по мере увеличения относительной плотности неадаптированной жертвы.

У меня полностью функционирующая базовая модель LV.До сих пор я пытался поместить всю модель в цикл и определить дисперсию как последовательность.

Это моя базовая модель:

LVmod<-function(Time,State,Pars){
  with(as.list(c(State, Pars)),{
    ingestion1 <- ingP1 * P1 * P #ingestion maladapted
    ingestion2 <- ingP2 * P2 * P #ingestion residents
    ingestion3 <- ingS * S * p #source population

    growthprey1 <- rGrow1 * P1 * (1-((P1+P2)/K)) #mal
    growthprey2 <- rGrow2 * P2 * (1-((P2+P1)/K)) #res
    growthsource <- rGrowS * S * (1-(S/K2)) #source pop

    mortpred <- rMort * P #predator mortality
    mortpredS <- rMort * p #source pred mort
    migration <- S*.5 #dispersal from source pop

    dPrey1 <- growthprey1 - ingestion1 + migration #change in maladapted pop
    dPrey2 <- growthprey2 - ingestion2 # change in resident pop
    dSource <- growthsource - ingestion3 # source
    dPred <- (ingestion1+ingestion2)*assEff - mortpred #change in predator
    dpredS <- (ingestion3)*assEff - mortpredS #source predator

    return(list(c(dPrey1,dPred,dPrey2,dSource,dpredS)))
  })
}

pars <- c(ingP1 = 0.8,
          ingP2 = 0.2,
          ingS = 0.2,
          rGrow1 = 0.5,
          rGrow2 = 1.5,
          rGrowS = 1.5,
          rMort = 0.2,
          assEff = 0.8,
          K = 10,
          K2 = 15)
yini <- c(P1 = 1, P = 2, P2 = 1, S = 1, p = 2)
times <- seq(0,200,by=1)
out <- ode(yini,times,LVmod,pars)

Это проблемная строка:

migration <- S*.5 #dispersal from source pop

В настоящее время значение разгона установлено на .5.Я хотел бы иметь что-то вроде этого:

migration <- S*dispersal

со случайным изменением разгона на одну итерацию.

Это начало цикла, который я пробовал:

for (j in 2:200){
    disp=runif(200,0,1)
    LVmod<-function(Time,State,Pars){......

Я хочу получить результат, который можно представить как изменение численности населения с течением времени в связи с изменяющимися показателями рассеивания.Прямо сейчас, если я запускаю цикл, я получаю большое количество графиков, которые имеют одну горизонтальную линию.

...