giddy.ergodic.fmpt

giddy.ergodic.fmpt(P, fill_empty_classes=False)[source]

Generalized function for calculating first mean passage times for an ergodic or non-ergodic transition probability matrix.

Parameters
Parray

(k, k), an ergodic/non-ergodic Markov transition probability matrix.

fill_empty_classes: bool, optional

If True, assign 1 to diagonal elements which fall in rows full of 0s to ensure the transition probability matrix is a stochastic one. Default is False.

Returns
fmpt_allarray

(k, k), elements are the expected value for the number of intervals required for a chain starting in state i to first enter state j. If i=j then this is the recurrence time.

Examples

>>> import numpy as np
>>> from giddy.ergodic import fmpt
>>> np.set_printoptions(suppress=True) #prevent scientific format

Irreducible Markov chain >>> p = np.array([[.5, .25, .25],[.5,0,.5],[.25,.25,.5]]) >>> fm = fmpt(p) >>> fm array([[2.5 , 4. , 3.33333333],

[2.66666667, 5. , 2.66666667], [3.33333333, 4. , 2.5 ]])

Thus, if it is raining today in Oz we can expect a nice day to come along in another 4 days, on average, and snow to hit in 3.33 days. We can expect another rainy day in 2.5 days. If it is nice today in Oz, we would experience a change in the weather (either rain or snow) in 2.67 days from today.

Reducible Markov chain: two communicating classes (this is an artificial example) >>> p = np.array([[.5, .5, 0],[.2,0.8,0],[0,0,1]]) >>> fmpt(p) array([[3.5, 2. , inf],

[5. , 1.4, inf], [inf, inf, 1. ]])

Thus, if it is raining today in Oz we can expect a nice day to come along in another 2 days, on average, and should not expect snow to hit. We can expect another rainy day in 3.5 days. If it is nice today in Oz, we should expect a rainy day in 5 days.

>>> p = np.array([[.5, .5, 0],[.2,0.8,0],[0,0,0]])
>>> fmpt(p, fill_empty_classes=True)
array([[3.5, 2. , inf],
       [5. , 1.4, inf],
       [inf, inf, 1. ]])
>>> p = np.array([[.5, .5, 0],[.2,0.8,0],[0,0,0]])
>>> fmpt(p, fill_empty_classes=False)
Traceback (most recent call last):
    ...
ValueError: Input transition probability matrix has 1 rows full of 0s. Please set fill_empty_classes=True to set diagonal elements for these rows to be 1 to make sure the matrix is stochastic.