A few comments below
On Mon, Sep 21, 2009 at 3:10 PM, drlucyasher <lasher@rvc.ac.uk> wrote:
>
> Hi,
>
> I am trying to write a simulation of the movements of four animals between
> six patches. The movement between patches is based on a first-order Markov
> chain so that the next patch they visit depends on the patch they were in
> before.
>
> I have written code that allows me to simulate the movement of one animal
> but when I add more there seems to be a problem and all chains come back as
> N/A. I can fix the problem if I run the animals as separate sub-routines
> but
> whilst this is adequate for this stage of my model it won't allow me to
> progress to the next stage. The next stage will be to make the animals move
> in reference to each other using a moving average variable. Therefore I
> think I need all animals simulated within one subroutine (loop).
>
> I probably haven't explained thie very well but here is the code I have
> been
> working on....
>
> #creation of a 6*6 matrix with the transition probabilities
>
> transitions<-matrix(0,nrow=6,ncol=6); transitions[1,1]<- (0/6);
> transitions[1,2]<- (0/6); transitions[1,3]<-(0/6);
> transitions[1,4]<-(0/6);transitions[1,5]<-(0/6);
> transitions[1,6]<-(6/6);transitions[2,1]<-
(1/6);transitions[2,2]<- (1/6);
> transitions[2,3]<-(1/6);
transitions[2,4]<-(1/6);transitions[2,5]<-(1/6);
> transitions[2,6]<-(1/6);transitions[3,1]<-
(1/6);transitions[3,2]<- (1/6);
> transitions[3,3]<-(1/6);
transitions[3,4]<-(1/6);transitions[3,5]<-(1/6);
> transitions[3,6]<-(1/6);transitions[4,1]<-
(1/6);transitions[4,2]<- (1/6);
> transitions[4,3]<-(1/6);
transitions[4,4]<-(1/6);transitions[4,5]<-(1/6);
> transitions[4,6]<-(1/6);transitions[5,1]<-
(1/6);transitions[5,2]<- (1/6);
> transitions[5,3]<-(1/6);
transitions[5,4]<-(1/6);transitions[5,5]<-(1/6);
> transitions[5,6]<-(1/6);transitions[6,1]<-
(1/6);transitions[6,2]<- (1/6);
> transitions[6,3]<-(1/6);
transitions[6,4]<-(1/6);transitions[6,5]<-(1/6);
> transitions[6,6]<-(1/6); transitions
>
> # start position probalities
> w <- c((1/6), (1/6), (1/6), (1/6), (1/6), (1/6))
>
> #length of the chain
>
> n<-241
>
>
#matrices creation for birds 1-4> observationb1<-matrix(nrow=n+1,ncol=6)
> observationb2<-matrix(nrow=n+1,ncol=6)
> observationb3<-matrix(nrow=n+1,ncol=6)
> observationb4<-matrix(nrow=n+1,ncol=6)
>
>
#chains starting position> i<-1;observationb1[1,2]<-sample(1:6, 1, prob=w, repl=T)
> i<-1;observationb2[1,2]<-sample(1:6, 1, prob=w, repl=T)
> i<-1;observationb3[1,2]<-sample(1:6, 1, prob=w, repl=T)
> i<-1;observationb4[1,2]<-sample(1:6, 1, prob=w, repl=T)
>
>
the i <- 1 above is not necessary.
rather use a for loop instead of the while - easier to use.
> while(i<n+1){
>
> Here your i == 1
> stateb1<-observationb1[i,2];
>
>
> probsb1<-transitions[stateb1,1:6];
>
> nextstateb1<-rmultinom(1,1,probsb1);
>
> seqb1<-which.max(nextstateb1);
>
> j<-i+1;
>
> observationb1[j,2]<-seqb1;i<-j
> #-------------------------------------if I close the brackets here this
>
Here you set your i to j, i.e. i+1
> works but I want to inlcude this next bit of code for bird 2
>
> stateb2<-observationb2[i,2];
>
> probsb2<-transitions[stateb2,1:6];
>
> nextstateb2<-rmultinom(1,1,probsb2);
>
> seqb2<-which.max(nextstateb2);
>
> j<-i+1;
>
> observationb2[j,2]<-seqb2;i<-j
>
> #and so on for birds 3 and 4.
>
> Any help you could give me would be much appreciated.
>
>
Hope this helps,
Rainer
> Lucy
> --
> View this message in context:
>
http://www.nabble.com/Four-concurrent-Markov-chains-tp25530321p25530321.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Rainer M. Krug, Centre of Excellence for Invasion Biology, Stellenbosch
University, South Africa
[[alternative HTML version deleted]]