Bukar Alhaji
2014-Jun-03 09:17 UTC
[R] Code for generating states and observations for HMM
Dear R buddies, Sorry for this silly question but am new to R. I am trying to generate states and observations to be use for Bayesian Hidden Markov Models analysis where i intend using mixture of Poisson and Negative binomial as emulsion. I use the code below to generate states and observations for homogeneous HMM . I would like to know if i correctly generated the data. pii = c(0.6,0.4) p1 <- matrix(c(0.8,0.2,0.3,0.7),byrow=TRUE,nrow=2) NUM = 200 theta<-rep(0, NUM) x<-rep(0, NUM) ## generating the states # initial state theta[1]<-rbinom(1, 1, pii[1]) # other states for (i in 2:NUM) { if (theta[i-1]==0) theta[i]<-rbinom(1, 1, p1[1, 1]) else theta[i]<-rbinom(1, 1, p1[2, 1]) } ## generating the observations for (i in 1:NUM) { if (theta[i]==0) { x[i]<-rpois(1, 5) } else { x[i]<-rnbinom(1, 3, 0.3) } } data<-list(s=theta, o=x, p1 = p1, pii = pii) Thanks for your response. Zakir [[alternative HTML version deleted]]
You might find it helpful to look at the sim.hmm() function in the "hmm.discnp" package, or the simHMM() function in the "HMM" package. cheers, Rolf Turner On 03/06/14 21:17, Bukar Alhaji wrote:> Dear R buddies, > > Sorry for this silly question but am new to R. I am trying to > generate states and observations to be use for Bayesian Hidden Markov > Models analysis where i intend using mixture of Poisson and Negative > binomial as emulsion. I use the code below to generate states and > observations for homogeneous HMM . I would like to know if i > correctly generated the data. > > > pii = c(0.6,0.4) > p1 <- matrix(c(0.8,0.2,0.3,0.7),byrow=TRUE,nrow=2) > > > NUM = 200 > theta<-rep(0, NUM) > x<-rep(0, NUM) > > ## generating the states > # initial state > theta[1]<-rbinom(1, 1, pii[1]) > # other states > for (i in 2:NUM) > { > if (theta[i-1]==0) > theta[i]<-rbinom(1, 1, p1[1, 1]) > else > theta[i]<-rbinom(1, 1, p1[2, 1]) > } > > ## generating the observations > > for (i in 1:NUM) > { > if (theta[i]==0) > { > x[i]<-rpois(1, 5) > } > else > { > x[i]<-rnbinom(1, 3, 0.3) > } > } > data<-list(s=theta, o=x, p1 = p1, pii = pii)