Generate a Markov chain for n individuals or units by specifying a transition matrix.

genMarkov(
  n,
  transMat,
  chainLen,
  wide = FALSE,
  id = "id",
  pername = "period",
  varname = "state",
  widePrefix = "S",
  trimvalue = NULL,
  startProb = NULL
)

Arguments

n

number of individual chains to generate

transMat

Square transition matrix where the sum of each row must equal 1. The dimensions of the matrix equal the number of possible states.

chainLen

Length of each chain that will be generated for each chain; minimum chain length is 2.

wide

Logical variable (TRUE or FALSE) indicating whether the resulting data table should be returned in wide or long format. The wide format includes all elements of a chain on a single row; the long format includes each element of a chain in its own row. The default is wide = FALSE, so the long format is returned by default.

id

Character string that represents name of "id" field. Defaults to "id".

pername

Character string that represents the variable name of the chain sequence in the long format. Defaults "period",

varname

Character string that represents the variable name of the state in the long format. Defaults to "state".

widePrefix

Character string that represents the variable name prefix for the state fields in the wide format. Defaults to "S".

trimvalue

Integer value indicating end state. If trimvalue is not NULL, all records after the first instance of state = trimvalue will be deleted.

startProb

A string that contains the probability distribution of the starting state, separated by a ";". Length of start probabilities must match the number of rows of the transition matrix.

Value

A data table with n rows if in wide format, or n by chainLen rows if in long format.

Examples


# Transition matrix P

P <- t(matrix(c(
  0.7, 0.2, 0.1,
  0.5, 0.3, 0.2,
  0.0, 0.1, 0.9
), nrow = 3, ncol = 3))

d1 <- genMarkov(n = 10, transMat = P, chainLen = 5)
d2 <- genMarkov(n = 10, transMat = P, chainLen = 5, wide = TRUE)
d3 <- genMarkov(
  n = 10, transMat = P, chainLen = 5,
  pername = "seq", varname = "health",
  trimvalue = 3
)