compute_stationary_distribution <- function(P){
s = nrow(P)
rep(1, s) %*% solve(diag(s) - P + matrix(rep(1, s * s), ncol = s))
}Stationary Distributions
Function to compute stationary distribution for finite state, irreducible transition matrix
Markov’s letters
state_names = c("vowel", "consonant")
P = rbind(
c(0.128, 0.872),
c(0.663, 0.337)
)
pi_0 = c(0.432, 0.568)Marginal distributions if initial distribution is stationary distribution
plot_DTMC_marginal_bars(pi_0, P, state_names, last_time = 20)
Ehrenfest urn chain
M = 3
state_names = 0:M
P = rbind(c(0, 1, 0, 0),
c(1/3, 0, 2/3, 0),
c(0, 2/3, 0, 1/3),
c(0, 0, 1, 0)
)Stationary distribution
pi_s = compute_stationary_distribution(P)
# display in table
data.frame(state_names, t(pi_s)) |>
kbl(col.names = c("state", "stationary probability")) |>
kable_styling()| state | stationary probability |
|---|---|
| 0 | 0.125 |
| 1 | 0.375 |
| 2 | 0.375 |
| 3 | 0.125 |
Marginal distributions if initial distribution is stationary distribution
plot_DTMC_marginal_bars(pi_s, P, state_names, last_time = 20)
Ping pong
state_names = c("AB", "AC", "BC")
P = rbind(c(0, .7, .3),
c(.8, 0, .2),
c(.6, .4, 0)
)Stationry distribution
pi_s = compute_stationary_distribution(P)
# display in table
data.frame(state_names, t(pi_s)) |>
kbl(col.names = c("state", "stationary probability"), digits = 4) |>
kable_styling()| state | stationary probability |
|---|---|
| AB | 0.4220 |
| AC | 0.3761 |
| BC | 0.2018 |
Marginal distributions if initial distribution is stationary distribution
plot_DTMC_marginal_bars(pi_s, P, state_names, last_time = 20)