Main Content

hitprob

Compute Markov chain hitting probabilities

Description

example

hp = hitprob(mc,target) returns the probability hp of hitting a specified subset of states target, beginning from each state in the Markov chain mc. If target forms a recurrent class, the elements of hp are absorption probabilities.

example

hp = hitprob(mc,target,'Graph',true) plots a directed graph of mc with node colors representing the hitting probabilities. A color bar summarizes the color coding.

[hp,h] = hitprob(mc,target,'Graph',true) also returns the plot handle. Use h to modify properties of the plot after you create it.

[hp,h] = hitprob(ax,mc,target,'Graph',true) plots on the axes specified by ax instead of the current axes (gca).

Examples

collapse all

Consider this theoretical, right-stochastic transition matrix of a stochastic process.

P=[10001/201/2001/201/20001].

Create the Markov chain that is characterized by the transition matrix P.

P = [1 0 0 0; 1/2 0 1/2 0; 0 1/2 0 1/2; 0 0 0 1];
mc = dtmc(P);

Plot a directed graph of the Markov chain. Visually identify the communicating class to which each state belongs by using node colors.

figure;
graphplot(mc,'ColorNodes',true);

Compute the hitting probabilities for state 1, beginning from each state in the Markov chain.

hp = hitprob(mc,1)
hp = 4×1

    1.0000
    0.6667
    0.3333
         0

Because state 1 is the target, the probability of state 1 reaching itself is 1.

State 1 is reachable from states 2 and 3. Therefore, the hitting probabilities for state 1 beginning from those states are positive.

Because state 1 is unreachable from state 4, state 4 has a hitting probability of 0 for state 1. Therefore, state 4 is a remote state with respect to state 1.

Consider this theoretical, right-stochastic transition matrix of a stochastic process.

P=[1/201/2000001/302/30001/403/4000002/301/30001/41/81/81/81/41/801/2000001/2].

Create the Markov chain that is characterized by the transition matrix P.

P = [1/2 0   1/2 0   0   0   0
     0   1/3 0   2/3 0   0   0
     1/4 0   3/4 0   0   0   0
     0   2/3 0   1/3 0   0   0
     1/4 1/8 1/8 1/8 1/4 1/8 0
     1/6 1/6 1/6 1/6 1/6 1/6 0
     1/2 0   0   0   0   0   1/2];
mc = dtmc(P);

Plot a digraph of the Markov chain mc. Specify node colors representing the hitting probabilities for state 1, beginning from each state in the Markov chain.

hitprob(mc,1,'Graph',true);

Plot another digraph. Include state 3 as a target state.

hitprob(mc,[1 3],'Graph',true);

The probability of hitting states 1 or 3 from state 6 is approximately 0.5.

Create a 20-state Markov chain from a random transition matrix containing 375 randomly placed infeasible transitions. An infeasible transition is a transition whose probability of occurring is zero.

rng(4) % For reproducibility
mc = mcmix(20,'Zeros',375);

Plot a digraph showing, for each state, the probability of transitioning to the subclass containing states 1 and 2.

target = [1 2];
hitprob(mc,target,'Graph',true);

Create a 20-state Markov chain from a random transition matrix containing 375 randomly placed infeasible transitions. Plot a digraph of the Markov chain.

rng(4)
mc = mcmix(20,'Zeros',375);

Find a recurrent class in the Markov chain mc by following this procedure:

  1. Classify the states by passing mc to classify. Return the array of class memberships ClassStates and the logical vector specifying whether the classes are recurrent ClassRecurrence.

  2. Extract the recurrent classes from the array of classes by indexing into the array using the logical vector.

[~,ClassStates,ClassRecurrence] = classify(mc);
s = ClassStates{ClassRecurrence}
s = 1x2 string
    "4"    "15"

States 4 and 15 form a recurrent class.

Plot two digraphs of the Markov chain mc. For the first digraph, use node colors to identify the state classification. For the second digraph, show the probability of absorption into the recurrent class for each state.

subplot(2,1,1)
graphplot(mc,'ColorNodes',true)
legend off
subplot(2,1,2)
hitprob(mc,s,'Graph',true);

The states to the left of states 2, 11, 18, and 13 are remote with respect to the recurrent class. Therefore, their absorption probability is 0.

Input Arguments

collapse all

Discrete-time Markov chain with NumStates states and transition matrix P, specified as a dtmc object. P must be fully specified (no NaN entries).

Target subset of states, specified as a numeric vector of positive integers, string vector, or cell vector of character vectors.

  • For a numeric vector, elements of target correspond to rows of the transition matrix mc.P.

  • For a string vector or cell vector of character vectors, elements of target must be state names in mc.StateNames.

Example: ["Regime 1" "Regime 2"]

Data Types: double | string | cell

Axes on which to plot, specified as an Axes object.

By default, hitprob plots to the current axes (gca).

Output Arguments

collapse all

Hitting probabilities, returned as a numeric vector of length mc.NumStates. hp(i) is the probability of hitting the specified subset of the target states target from starting state i.

hp is not a probability distribution; its elements do not have to sum to 1.

Handle to the graph plot, returned as a graphics object when the 'Graph' name-value pair argument is true. h is a unique identifier, which you can use to query or modify properties of the plot.

More About

collapse all

Remote State

Remote states are those states from which the target states are unreachable. A remote state has a hitting probability of 0 and an expected first hitting time of Inf. For more details on expected first hitting times, see hittime.

Algorithms

hitprob uses linprog to find the minimum norm nonnegative solution to the system:

{hiA=1,iAhiA=j=1NPijhjA,iA,

where

  • hiA = hp(i), the probability of hitting the subset of states A, beginning from state i.

  • A is the set of indices of the states in target.

  • P = mc.P.

  • N = mc.NumStates [1].

References

[1] Norris, J. R. Markov Chains. Cambridge, UK: Cambridge University Press, 1997.

Introduced in R2019b