###################################################################### # MARKOV CHAIN SIMULATION EXAMPLE # p <- matrix(c(1/3,1/5,2/3,4/5),nrow=2) # p # [,1] [,2] # [1,] 0.3333333 0.6666667 # [2,] 0.2000000 0.8000000 # runs <- generateMarkovChain(1,p,100) # runs # [1] 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 2 1 1 1 2 2 1 1 2 1 2 1 1 2 2 2 # [39] 1 2 1 2 2 2 2 2 1 2 2 2 1 1 2 1 1 2 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 1 1 2 2 # [77] 2 2 2 1 2 1 2 2 2 1 1 2 2 2 1 2 1 1 1 2 1 2 2 2 ###################################################################### ####################################################### # Given an n x n transition matrix and an initial state in the set # {1,2,..n}, simulate a markov chain to get the next state ####################################################### nextState <- function(transitionMatrix, state) { sample(dim(transitionMatrix)[2], size = 1, prob = transitionMatrix[state,]) } ####################################################### # Given an n x n transition matrix and an initial state in the set # # {1,2,..n}, # # run a simulation of a markov chain "numRun" times # ####################################################### generateMarkovChain <- function(initialState, transitionMatrix ,numRuns) { states = rep(initialState, numRuns) for(i in 2:numRuns) { states[i] = nextState(transitionMatrix, states[i - 1]) } states }