# Generate a sequential dataset from a mixture of Markov models
M <- 3 # number of components
K <- 6 # number of states
# define initial and transition probabilities for each component
ini1<-c(0.15,0.4,0.2, 0.15, 0,0.1)
A1<-matrix(c(0,0.45,0.1,0.15,0.15,0.15,
0.1,0,0.15,0.15,0.1,0.5,
0.25,0.2,0,0.2,0.15,0.2,
0.15,0.2,0.05,0,0.4,0.2,
0.15,0.05,0.45,0.15,0,0.2,
0.4,0.15,0.2,0.05,0.2,0),byrow=TRUE,nrow=6)
ini2<-c(0.3,0.2,0.25, 0.15, 0, 0.1)
A2<-matrix(c(0,0.8,0,0,0,0.2,
0.2,0,0.8,0,0,0,
0,0.2,0,0.8,0,0,
0,0,0.2,0,0.8,0,
0,0,0,0.2,0,0.8,
0.8,0,0,0,0.2,0),byrow=TRUE,nrow=6)
ini3<-c(0.2,0.1,0.2, 0.1, 0, 0.4)
A3<-matrix(c(0,0.1,0,0,0,0.9,
0.8,0,0.15,0.05,0,0,
0,0.9,0,0.1,0,0,
0.05,0.05,0.8,0,0,0.1,
0,0,0.05,0.9,0,0.05,
0.05,0.05,0,0,0.9,0),byrow=TRUE,nrow=6)
trans.prob <- list(A1, A2, A3)
ini.prob <- list(ini1, ini2, ini3)
# sizes i.e. number of sequences in each component
N.sim1<-20
N.sim2<-30
N.sim3<-50
clust.size <- list(N.sim1, N.sim2, N.sim3)
T.range <- c(5, 30) # sequences minimum length and maximum length
data<- sim_seq( M, K, ini.prob, trans.prob, clust.size, T.range)
### Estimate model parameters and identify cluster of sequences
# Set up initial values and hyper parameters (either fixed or random)
iter<-5 # number of iterations for the Gibbs sampler
burn<-0
num.cluster <- 3 # number of components
states <- 6 # number of states
ini.constr<-c(1, 1, 1, 1, 0, 1) # constrains on initial probabilities
trans.constr<-matrix(c(0,1,1,1,1,1, # constrains on transition probabilities
1,0,1,1,1,1,
1,1,0,1,1,1,
1,1,1,0,1,1,
1,1,1,1,0,1,
1,1,1,1,1,0),byrow=TRUE,nrow=6)
# parameters initial values
A.ini <- 1/states*matrix(rep(1, length = (states^2)),
nrow = states, byrow = TRUE,
dimnames = list(as.character(c(1:states))) )
pi.ini <- rep(1/states, length = states)
# Prior distributions' hyperparameters
prior.ini<- prior.transrow <- prior.mixcoef <- 1
# Run the MCMC to estimate parameters
MMM_1 <- fit_mixmar(data, iter, burn, num.cluster = num.cluster, states = states,
A.ini = A.ini, pi.ini = pi.ini, prior.ini = prior.ini,
prior.transrow = prior.transrow, prior.mixcoef = prior.mixcoef,
ini.constr = ini.constr, trans.constr = trans.constr)
str(MMM_1$pi.list) #Initial Markov chain probabilities for MCMC
str(MMM_1$A.list) #Transition Markov chain probabilities for MCMC
str(MMM_1$Sim.index.Danon) #Danon similarity between two partitions
str(MMM_1$Sim.index.Rand) #Rand similarity between two partitions
MMM_1$Conf.mat # Confusion matrix between two partitions
Run the code above in your browser using DataLab